2012-10-21 27 views
1
using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing ; 
using System.Linq; 
using System.Text; 
using System.Windows.Forms; 
using Meta.Numerics.Matrices; 

double[,] ptsImgOne = new double[3, 5]; 
double[,] ptsImgTwo = new double[3, 5]; 


ptsImgOne = new double[,] { { 0.41726, 0.94478, 0.33771, 0.11120, 0.24169 }, 
{ 0.04965, 0.49086, 0.90005, 0.78025, 0.40391}, 
{ 0.90271, 0.48925, 0.36924, 0.38973, 0.09645 } }; 
ptsImgTwo = new double[,] { { 0.13197, 0.57520, 0.35315, 0.04302, 0.73172 }, 
{ 0.94205, 0.05977, 0.82119, 0.16899, 0.64774 }, 
{ 0.95613, 0.23477, 0.01540, 0.64911, 0.45092 } }; 


      RectangularMatrix q1 = new RectangularMatrix(ptsImgOne); 
      RectangularMatrix q2 = new RectangularMatrix(ptsImgTwo); 


      RectangularMatrix Qmultiply = new RectangularMatrix(5, 9); 
      for (int i = 0; i < q2.ColumnCount; i++) 
      { 
       Qmultiply[i, 0] = q1[0, i] * q2[0, i]; 
       Qmultiply[i, 1] = q1[1, i] * q2[0, i]; 
       Qmultiply[i, 2] = q1[2, i] * q2[0, i]; 

       Qmultiply[i, 3] = q1[0, i] * q2[1, i]; 
       Qmultiply[i, 4] = q1[1, i] * q2[1, i]; 
       Qmultiply[i, 5] = q1[2, i] * q2[1, i]; 

       Qmultiply[i, 6] = q1[0, i] * q2[2, i]; 
       Qmultiply[i, 7] = q1[1, i] * q2[2, i]; 
       Qmultiply[i, 8] = q1[2, i] * q2[2, i]; 
      } 


SingularValueDecomposition singValDec= Qmultiply.SingularValueDecomposition(); 




     } 
    } 
} 

我使用Meta.Numerics.Matrices與矩陣工作,並計算SVD,
但每當編譯器去到最後一行代碼:
「SingularValueDecomposition singValDec = Qmultiply.SingularValueDecomposition();」
我收到一個錯誤,說索引超出了數組的界限。我仔細檢查了Qmultiply數組和其餘部分的邊界。我嘗試調試它,但錯誤仍然存​​在。
任何人都可以幫助我解決這個問題嗎?**指數outisde數組的邊界**用SVD計算Meta.Numeric.Matrices

回答

0

看來有計算SVD的一些錯誤元包。

我用MathNet具有相同的代碼,它工作得很好。

爲了安全起見,請使用MathNet(Math.Numeric)。