項目中用到矩陣計算,在網上沒有搜到合適的矩陣運算類,C#類庫中的matrix類又不是很合心意,於是乎自己寫了一個,完成后總結了一下,發布了上來。完成的DLL文件及使用例程在文章最后有下載鏈接
使用方法和步驟:
一,引用方法
1:在你想用的工程中添加引用,引用你所下載的文件
MatrixDevelopTest\MatrixDevelopTest\bin\Debug\Matrix.dll
2:在你工程中需要做矩陣計算的類中的最上邊加上using CMatrix;就可以在其中使用了。
二,Matrix類使用方法
1,創建Matrix類的對象,此對象就表示一個矩陣對象,我重載了四種矩陣對象的初始化方法
public Matrix(int size);即初始化方陣,size為方陣的大小 public Matrix(int rows, int cols);用行數和列數初始化矩陣,rows為行數,cols為列數 public Matrix(double[,] data);用雙精度二維數組初始化矩陣 public Matrix(double[] data, Direction direction);用雙精度一維數組初始化向量型矩陣,這里 //第二個參數為枚舉,需設置為Matrix.Direction.vertical或 //Matrix.Direction.horizontal意為相應的創建列向量或行向量
2,對+,-,*,==,!==進行了運算符的重載,其中+,-,==,!=的操作數只能是Matrix類型,*支持double
和Matrix的相乘,即系數乘矩陣
3,數據類型轉換
Matrix類對象只可以裝換成double[,]即雙精度二維數組的形勢
eg: Matrix matrixObj=new Matrix(5);
double[,] temp=matrixObj.Data;
4,數據索引
Matrix對象有一個public double[,] Data;的對象級別的數據成員,為該矩陣對象的矩陣數據,你可
以采用諸如matrixObj.Data[0,0]的形勢索引其矩陣的元素值,也可以采用matrixObj[0,0]的方式索引
其矩陣的元素值
5,一些對象級別屬性
rows cols IsSquare IsSingular分別是行數,列數,是否是方陣,是否行列式值為零
6,一些類級別的靜態方法
public static double[,] Inverse(double[,] a)//矩陣求逆 public static double[,] Transpose(double[,] a)//矩陣轉置 public static Matrix Zeros(int size)//產生零矩陣 public static Matrix Zeros(int rows, int cols) public static double[,] eyes(int n)//產生單位陣 public static Matrix Combine(Matrix m, Matrix n, Direction Dir)//合並矩陣,后面的例程里面有 //演示
三,例程1
此例程在你下載的文檔里面有:
下面是主程序
Matrix R1 = Matrix.Combine(new Matrix(Matrix.eyes(3)), Matrix.Zeros(3), Matrix.Direction.horizontal);//新建兩個矩陣(3型單位陣,3型零矩陣)進行橫向拼接 R1 = 10000 * R1;//系數乘以矩陣 Matrix R2 = Matrix.Combine(Matrix.Zeros(3), new Matrix(Matrix.eyes(3)), Matrix.Direction.horizontal); Matrix R = Matrix.Combine(R1, R2, Matrix.Direction.horizontal); R.Display();//顯示,只針對控制台模式 Console.ReadLine();
例程2
針對一些郵件的問題我又重新編寫了一個例程,主要包括矩陣初始化和類型轉
化等,內容要詳實些。
Matrix R1 = Matrix.Combine(new Matrix(Matrix.eyes(3)), Matrix.Zeros(3), Matrix.Direction.horizontal); R1 = 10000 * R1; Matrix R2 = Matrix.Combine(Matrix.Zeros(3), new Matrix(Matrix.eyes(3)), Matrix.Direction.horizontal); Matrix R = Matrix.Combine(R1, R2, Matrix.Direction.horizontal); double[,] temp = R.Data;//將Matrix對象的值賦給double[,] Matrix K = new Matrix(temp);//用double[,]初始化Matrix對象 double[] temp2 =new double[4]{1,2,3,4}; Matrix H1 = new Matrix(temp2, Matrix.Direction.horizontal);//用double[]初始化Matrix對象 Matrix H2= new Matrix(temp2, Matrix.Direction.vertical); Console.WriteLine("下面輸出H1"); H1.Display(); Console.WriteLine("H1輸出完"); Console.WriteLine(); Console.WriteLine("下面輸出H2"); H2.Display(); Console.WriteLine("H2輸出完"); Console.WriteLine(); Console.WriteLine("下面輸出K"); K.Display(); Console.WriteLine("K輸出完"); Console.WriteLine(); Console.WriteLine("下面輸出R"); R.Display(); Console.WriteLine("R輸出完"); Console.WriteLine(); Console.WriteLine("下面輸出temp"); foreach (double d in temp) Console.WriteLine(d); Console.WriteLine("temp輸出完"); Console.ReadLine();
四,聲明
1,我不是個專業的程序員,此類為本人自己在編程序需要時封裝的,不保證進行完全的異常測試,不保證結果的正確性,你可以隨意下載使用和復制,使用時請自行測試。本人不承擔任何法律責任,只作為學習和研究,不可用於商業用途。
2,我會在使用中逐漸完善此類並及時發布在這里,如果有什么使用上的問提或是Bug請反饋,我會盡量及時回復並改正后發布到這里。
五,下載
DLL:
版本1.0.0.0 發布時間20090410 初版 DLL 下載