两个维数相同的数组a,b,要求各元素相加(或减法,乘法,除法),组成新的数组c,
  可不可以直接c=a+b(类似matlab语言)?还是只能遍历各元素相加??

解决方案 »

  1.   

    这个得遍历
    int[] i = {1,2,3,4,5};
    int[] j = {6,7,8,9,10};
    int[] k = new int[i.Length];
    for(int m=0;m<i.Length;m++)
    {
        k[m] = i[m] + j[m];
    }
    foreach(int n in k)
    {
       Response.Write(n.ToString());
    }
      

  2.   

    本帖最后由 caozhy 于 2012-05-19 22:02:38 编辑
      

  3.   

    本帖最后由 caozhy 于 2012-05-19 22:01:53 编辑
      

  4.   

    矩阵运算时一个数学软件包基本的功能,写成简练的表达式是很符合数学家的习惯的——因为跟数学书上的符号一直。随便写一个重载+号的例子吧。    public class Mat
        {
            public double[,] Datas;        public static Mat operator +(Mat a, Mat b)
            {
                var result = new Mat { Datas = new double[a.Datas.GetLength(0), b.Datas.GetLength(1)] };
                for (var i = 0; i < a.Datas.GetLength(0); i++)
                    for (var j = 0; j < b.Datas.GetLength(1); j++)
                    {
                        double sum = 0;
                        for (var k = 0; k < a.Datas.GetLength(1); k++)
                            sum += a.Datas[i, k] * b.Datas[k, j];
                        result.Datas[i, j] = sum;
                    }
                return result;
            }
        }这里为矩阵类,设计了+运算。于是打印两个简单的矩阵的和,就可以简单写为            var x = new Mat
                {
                    Datas = new double[2, 3] { { 1, 2, 3 }, { 4, 5, 6 } }
                };
                var y = new Mat
                {
                    Datas = new double[3, 2] { { 1.1, 2.2 }, { 3.3, 4.4 }, { 5.5, 6.6 } }
                };
                var result = x + y;
                for (var i = 0; i < result.Datas.GetLength(0); i++)
                {
                    for (var j = 0; j < result.Datas.GetLength(1); j++)
                        Console.Write("{0}\t", result.Datas[i, j]);
                    Console.WriteLine();
                }你可以写 x+y 这种表达式来计算矩阵求和,也可以写 k*x 这种表达式来计算矩阵乘,甚至是数乘,还可以求你矩阵然后直接矩阵乘法,例如 var t= Inv(a);
    var result= t*((b*t+c*a)*t;用简练的一个公式,就可以写出复杂的矩阵运算甚至解方程的过程来了。
      

  5.   

    比如说一个线性规划模型类似于   A * x + y = B,其中B是一个n行1列的向量,而A是n行n列的矩阵,y就是此时的初始可行解,然后模型的目标函数也可以表示为矩阵运算,当交换入基和出基变量(某个x和某个y)的时候,就需要计算新的y向量左边的矩阵的逆矩阵,然后分别左乘左右两边的公式,得到新的线性规划模型。直到没有可交换的变量,最后得到的y就是最终的可行解。(大致是这样意思)使用矩阵,数学家可以三言两语地表达大规模(经济等应用领域)运算的算法,非常方便。所以这类可以直接用运算符重载的表达形式,正是“类似matlab语言”的强大工具,c#所能够写出来的计算方法代码的效果堪比matlab。