zoukankan      html  css  js  c++  java
  • Matlab高级教程_第二篇:MATLAB和C#对应数据类型的讲解(多讲一点儿C#的矩阵运算)

    1. MATLAB对应C#的数据类型主要在引入的父类库MWArray当中。有如下对应规则

    .NET TYPE      MWArrayTYPE    MATLAB Type

    System.Double     MWNumericArray    double

    System.Number    MWNumericArray    double

    System.Float     MWNumericArray     single

    System.Byte      MwNumbericArray    int8

    System.Short     MWNumbericArray     int16

    System.int32      MWNumbericArray     int32

    system.int64      MWNumbericArray     int64

    System.Char     MWCharArray          char

    System.String       MWCharArray         char

    System.Boolean    MWLogicArray       logical

    N/A           MWStructArray      structure

    N/A          MWCellArray       cell

    2. MWArray是MathWorks公司专门为.Net开发的一个.Net组件,用于条用MCR进行m函数进行计算。是.Net和matlab混编的桥梁之一。

    3. C#怎么向MATLAB传递参数?怎么把MATLAB计算好的结果,转换到C#中?

               //混合编程传递参数测试
                //1. 假设M函数已经写好,并且编译完成
                //传递参数之前要搞清楚什么问题?
                //要传递的参数实际类型:N=5,double[] 
                //MWArray,怎么把.net中的数据传递给MWArray?
    
                //2.要传递数值类型:double,int,byte...
                //单个值可以隐式转换
                MWArray m1 = 5;
                int N = 5;
                MWArray m2 = N;
                MWArray str = "my name is matlab.net";
    
    
                //3.如果M函数需要一个数组(一维数组)
                //多个值不能通过隐式转换,因此这个是错误的,也不能强制转换!!
                //MWArray m3 = new int[] {1,2,3,4 };
                //因此!要通过子类的MWNumericArray的数组类型先要进行转换。
                //因此!.net数值类型的数组可以隐式转换为MWNumericArray。
                //MWNumericArray他是MWArray的子类
                MWNumericArray array1 = new int[] { 112, 22, 44, 88 };
                //通过做子类型再转换成父类型。
                MWArray array2 = array1;
                //因此!可以通过用子类型的数组进行强制转换
                MWArray array3 = (MWNumericArray)new int[] { 112, 22, 44, 88 };
    
    
                //4.如果M函数需要一个多维数组
                MWNumericArray array4 = new int[,] { {112, 22}, {44, 88} };
                MWArray array5 = array4;
                //或者
                MWArray array6 = (MWNumericArray)new int[,] { { 112, 22 }, { 44, 88 } };
                //Console.WriteLine(array5);
    
                //5. MWNumericArray的构造函数
                MWNumericArray array7 = new MWNumericArray(new int[] { 2, 35, 6 }); //全0
                MWNumericArray array8 = new MWNumericArray(2,3,new double[] { 1, 3, 5, 4, 5, 6 }); //两行2列的double数组
                //Console.WriteLine(array8);
                //1 3 5
                //4 5 6
    

    4. 矩阵运算导入类Matrix,这个有现成的写好的类,可以联系作者要(不过写的有问题,后面生成MATLAB的矩阵运算方式)

                //6. 矩阵运算
                //6.1 实例化矩阵,并规定是几行几列的矩阵
                //注意:矩阵维度是从0开始的
                Console.WriteLine("这是第一个矩阵");
                Matrix matrix = new Matrix(2,2);  //2行 2列
                //赋值方式
                matrix[0, 0] = 3;
                matrix[0, 1] = 4;
                matrix[1, 0] = 8;
                matrix[1, 1] = 6;
                //Console.WriteLine(matrix[0, 0]);
                //Console.WriteLine(matrix[0, 1]);
                //Console.WriteLine(matrix[1, 0]);
                //Console.WriteLine(matrix[1, 1]);
                //6.2打印矩阵
                matrix.Print();
                Console.WriteLine("
    ");
                //6.3 矩阵的四则运算
                Console.WriteLine("这是第二个矩阵");
                Matrix matrix1 = new Matrix(2, 2);  //2行 2列
                //赋值方式
                matrix1[0, 0] = 4;
                matrix1[0, 1] = 40;
                matrix1[1, 0] = 80;
                matrix1[1, 1] = 60;
                matrix1.Print();
                Console.WriteLine("
    ");
    
                Console.WriteLine("这是第三个矩阵");
                Matrix matrix2 = new Matrix(3, 3);  //3行 3列
                //赋值方式
                matrix2[0, 0] = 4;
                matrix2[0, 1] = 40;
                matrix2[0, 2] = 40;
                matrix2[1, 0] = 30;
                matrix2[1, 1] = 10;
                matrix2[1, 2] = 60;
                matrix2[2, 0] = 80;
                matrix2[2, 1] = 50;
                matrix2[2, 2] = 60;
                matrix2.Print();
                Console.WriteLine("
    ");
    
                //加法
                Console.WriteLine("矩阵的加法的结果");
                var result = matrix + matrix1;
                result.Print();
                Console.WriteLine("
    ");
    
                //减法
                Console.WriteLine("矩阵的减法的结果");
                var result2 = matrix - matrix1;
                result2.Print();
                Console.WriteLine("
    ");
    
                //乘法
                Console.WriteLine("矩阵的乘法的结果");
                var result3 = matrix * matrix2;
                result3.Print();
                Console.WriteLine("
    ");
    
                //除法没有
    

      

    5.继续进行讲解

                //6. 定义字符
                MWCharArray ch = "Hello Matlab";
                MWCharArray ch1 = new MWCharArray(new string[] { "Hellow","World!"}); //传递一个字符串数组
    
                //7. 定义struct结构体
                MWStructArray stru = new MWStructArray(new int[] { 2, 2 }, new string[] { "Name", "Age" });
                stru["Name", new int[] { 1, 1 }] = "Tom";
                stru["Age", new int[] { 1, 1 }] = 18;
                Console.WriteLine(string.Format("Name:{0},Age:{1}",stru["Name",new int[] { 1,1}].ToString(),stru["Age",new int[] {1,1 }]));
                //MWArray下标访问方式跟MATLAB一样。
    
                //8.元组的自己看吧
    

      

  • 相关阅读:
    性能测试系列(1)-性能测试基本概念
    性能篇综合汇总
    【CTFHUB】Web技能树
    Flash XSS
    绕过CDN找到⽬标站点真实IP
    【网鼎杯2020白虎组】Web WriteUp [picdown]
    【网鼎杯2020朱雀组】Web WriteUp
    【网鼎杯2020青龙组】Web WriteUp
    利用DNSLog实现无回显注入
    Cobalt Stike使用教程
  • 原文地址:https://www.cnblogs.com/noah0532/p/9841037.html
Copyright © 2011-2022 走看看