封裝了 C# 矩陣計算類CMarix


項目中用到矩陣計算,在網上沒有搜到合適的矩陣運算類,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 下載


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM