封装了 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 下载

posted @ 2012-12-20 19:59  璇星  阅读(4056)  评论(1编辑  收藏  举报