2011-12-20 46 views
1

MathNetを使用して結果の行列の値を取得する方法を知ることができません。だれでも助けてくれますか?私は3列の多項式を表す3列の行列を4列あり、a =、b =、c =について解くことを試みています。行1はa、2b、3cを表す。私はこれらの値を得るためにMathNetの機能を使用する方法を理解することはできません。MathNetでマトリックスを解決するにはどうすればよいですか?

 double X1 = Convert.ToDouble(x1); 
     double Y1 = Convert.ToDouble(y1); 

     double X2 = Convert.ToDouble(x2); 
     double Y2 = Convert.ToDouble(y2); 

     double X3 = Convert.ToDouble(x3); 
     double Y3 = Convert.ToDouble(y3); 

     var a = new DenseMatrix(3, 4); 

     double[] row1 = new double[2]; 
     row1[0] = X1; 
     row1[1] = Y1; 

     double[] row2 = new double[2]; 
     row2[0] = X2; 
     row2[1] = Y2; 

     double[] row3 = new double[2]; 
     row3[0] = X3; 
     row3[1] = Y3; 

     a.SetRow(0, row1); 
     a.SetRow(1, row2); 
     a.SetRow(2, row3); 

EDIT:

あなたが解決策を試してみたい場合にもMathNetを使用していない解決

  double[,] matrix = new double[3, 4]{ 
      { 1, 2, -1, -4 }, 
      { 2, 3, -1, -11 }, 
      { -2, 0, -3, 22 } 
     }; 

答えて

1

に=行列を設定することができます。

int lead = 0, rowCount = 3, columnCount = 4; 
     for (int r = 0; r < rowCount; r++) 
     { 
      if (columnCount <= lead) break; 
      int i = r; 
      while (matrix[i, lead] == 0) 
      { 
       i++; 
       if (i == rowCount) 
       { 
        i = r; 
        lead++; 
        if (columnCount == lead) 
        { 
         lead--; 
         break; 
        } 
       } 
      } 
      for (int j = 0; j < columnCount; j++) 
      { 
       double temp = matrix[r, j]; 
       matrix[r, j] = matrix[i, j]; 
       matrix[i, j] = temp; 
      } 
      double div = matrix[r, lead]; 
      for (int j = 0; j < columnCount; j++) matrix[r, j] /= div; 
      for (int j = 0; j < rowCount; j++) 
      { 
       if (j != r) 
       { 
        double sub = matrix[j, lead]; 
        for (int k = 0; k < columnCount; k++) matrix[j, k] -= (sub * matrix[r, k]); 
       } 
      } 
      lead++; 
     } 
関連する問題