如何在C#中乘以矩阵?

我不能让这种方法起作用。 它打算将矩阵乘以给定的矩阵。 有人可以帮我纠正吗?

class Matriz { public double[,] structure; //Other class methods public void multiplyBy(Matrix m) { if (this.structure.GetLength(1) == m.structure.GetLength(0)) { Matriz resultant = new Matriz(this.structure.GetLength(0), m.structure.GetLength(1)); for (int i = 0; i < this.structure.GetLength(0) - 1; i++) { for (int j = 0; j < m.structure.GetLength(1) - 1; j++) { resultant.structure[i, j] = 0; for (int z = 0; z < this.structure.GetLength(1) - 1; z++) { resultant.structure[i, j] += this.structure[i, z] * m.structure[z, j]; } } } this.structure= resultant.structure; } else { Console.WriteLine("Selected matrixs cannot be multiply"); } } } 

阅读James McCaffrey 撰写的MSDN杂志文章 ,并使用下面的代码作为扩展方法。 它们使用锯齿状arrays,比2Darrays更方便,有时更快。 将任何data[i][j]更改为data[i,j]以使代码与2D数组一起使用。

 public static double[] MatrixProduct(this double[][] matrixA, double[] vectorB) { int aRows=matrixA.Length; int aCols=matrixA[0].Length; int bRows=vectorB.Length; if (aCols!=bRows) throw new Exception("Non-conformable matrices in MatrixProduct"); double[] result=new double[aRows]; for (int i=0; i 

这是我的方法的修改版本,就我一直在测试这种方法工作正常。

  public void multiplicarPor(Matriz m) { if (this.estructura.GetLength(1) == m.estructura.GetLength(0)) { Matriz resultante = new Matriz(this.estructura.GetLength(0), m.estructura.GetLength(1)); for (int i = 0; i < this.estructura.GetLength(0); i++) { for (int j = 0; j < m.estructura.GetLength(1); j++) { resultante.estructura[i, j] = 0; for (int z = 0; z < this.estructura.GetLength(1); z++) { resultante.estructura[i, j] += this.estructura[i, z] * m.estructura[z, j]; } } } this.estructura = resultante.estructura; } else { Console.WriteLine("No se pueden multiplicar estas matrices"); } }