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("\n");
//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("\n"); 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("\n"); //加法
Console.WriteLine("矩阵的加法的结果");
var result = matrix + matrix1;
result.Print();
Console.WriteLine("\n"); //减法
Console.WriteLine("矩阵的减法的结果");
var result2 = matrix - matrix1;
result2.Print();
Console.WriteLine("\n"); //乘法
Console.WriteLine("矩阵的乘法的结果");
var result3 = matrix * matrix2;
result3.Print();
Console.WriteLine("\n"); //除法没有

  

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.元组的自己看吧

  

Matlab高级教程_第二篇:MATLAB和C#对应数据类型的讲解(多讲一点儿C#的矩阵运算)的更多相关文章

  1. Matlab高级教程_第二篇:Matlab相见恨晚的模块_02_并行运算-2

    1 MATLAB并行计算-从个人桌面到远程集群和云(陈伟/魏奋)视频摘录笔记 https://cn.mathworks.com/videos/parallel-computing-with-matla ...

  2. Matlab高级教程_第二篇:Matlab相见恨晚的模块_02_并行运算-1

    1 更高级的算法牵扯到更多重的循环和复杂的计算,尤其是现在人工智能的算法尤其如此.有些历史知识的人能够了解到,人工智能的很多基本算法其实近百年之前就有了,但是当时的计算机技术达不到去实现这些算法的要求 ...

  3. Matlab高级教程_第二篇:关于MATLAB转C#过程中遇到输出两组参数的问题

    1. 在matlab的m函数很可能遇到原函数[a,b] = func(a); 这样的两个输出参数. 2. 在观察C#生成后定义中我们发现: public MWArray HP(); public MW ...

  4. Matlab高级教程_第二篇:Matlab相见恨晚的模块_01_定时器

    MATLAB的定时器功能(timer函数): 1 从MATLAB6.5版本开始,MATLAB开始支持定时器.相对于传统的pause函数来说,定时器要强大的多,不仅可以等效实现pause的功能,还可以显 ...

  5. Matlab高级教程_第二篇:MATLAB和C#一些常用的矩阵运算方法的转换

    1.相关方法已经生产引用,直接调用的结果如下: 2. 相关调用代码如下: using System; using System.Collections.Generic; using System.Li ...

  6. Matlab高级教程_第二篇:Matlab相见恨晚的模块_02_并行运算-关于parfor的问题

    1 我们知道MATLAB支持并行运行一般有四种模式: 第一种模式:本机调用多核CPU性能并行运算 第二种模式:本机调用GPU性能并行运算 第三种模式:多计算机组成集群,调用集群CPU性能并行运算 第四 ...

  7. Matlab高级教程_第二篇:关于MATLAB转C#过程中MWArray到C#数组,C#数组到MWArray相互转换

    Matlab传递数据时使用的方法,那么Matlab计算完成后在C#中应该怎么获取它的计算数据呢? 需要遵循两个基本步骤: 弄清楚Matlab函数传回的数据到底是什么格式?struct?cell?cha ...

  8. Matlab高级教程_第二篇:一个简单的混编例子

    1. 常用的混编是MATLAB和VS两个编辑器之间的混编方式. 2. 因为MATLAB的核是C型语言,因此常见的混编方式是MATLAB和C型语言的混编. 3. 这里介绍一个简单的MATLAB语言混编成 ...

  9. Matlab高级教程_第二篇:Matlab2016a和VS2013混合

    1. 首先把VS2017的XML两个配置文件放到 2. 然后一步一步的进行选择: 3. 2016版本的deploytool工具已经改版了,具体详细使用如下 4. 编写一个测试函数 我们编译成C#语言的 ...

随机推荐

  1. Relu激活函数的优点

    Relu优点: 1.可以使网络训练更快. 相比于sigmoid.tanh,导数更加好求,反向传播就是不断的更新参数的过程,因为其导数不复杂形式简单. 2.增加网络的非线性. 本身为非线性函数,加入到神 ...

  2. Linux 正则表达式与文本处理器 三剑客

    Linux 正则表达式与文本处理器 三剑客 一.正则表达式 正则就是用一些具有特殊含义的符号组合到一起(称为正则表达式)来描述字符或者字符串的方法.或者说:正则就是用来描述一类事物的规则. 在linu ...

  3. SQL COOKBOOK SQL经典实例代码 笔记第一章代码

    -- SQL COOKBOOK CHAPTER1 -- 查看所有内容 select * from emp; -- 可以单列 select empno,ename,job,sal,mgr,hiredat ...

  4. nginx 4层代理配置

    1.nginx 从1.9.0版本开始支持四层代理,但做四层代理时 编译需要添加  --with-stream模块 # ./configure --prefix=/usr/local/nginx--us ...

  5. C++基础--重载、重写、隐藏

    1.重载(overload) 重载的概念是在同一作用域内,函数名相同,函数输入参数个数.数据类型不同,但是不能是函数名.参数个数.数据类型完全相同但返回值不同的情况.最直接的例子是常见的构造函数重载, ...

  6. nginx反向代理和负载均衡的实现

    反向代理和负载均衡的关系可以理解为,一个ip的负载均衡就是反向代理. 反向代理使用的是:proxy_pass指令   负载均衡使用的是:proxy_pass指令+upstream指令 负载均衡的3中方 ...

  7. MSE(均方误差)、RMSE (均方根误差)、MAE (平均绝对误差)

    1.MSE(均方误差)(Mean Square Error) MSE是真实值与预测值的差值的平方然后求和平均. 范围[0,+∞),当预测值与真实值完全相同时为0,误差越大,该值越大. import n ...

  8. VCPU的解释

    vCPU,顾名思义,是虚拟CPU. 创建虚拟机时,需要配置vCPU资源. 因此vCPU是虚拟机的部件. 因此脱离VM,谈论vCPU是没有意义的. 虚拟化管理系统如何调度vCPU,取决于系统内的虚拟机数 ...

  9. JS获取当前时间往后一天的时间

    (图片来自W3school) let myDate = new Date(); myDate.setDate(myDate.getDate() + 1); let year = myDate.getF ...

  10. qt使用了qstackedwidget里面放置了widget后对该子widget设置的样式无效

    关键字:子窗口样式无效 QStackedwidget 问题: 我有一个对话框,里面放了一个qstackedwidget,qstackedwidget放了N个子窗口,使用addwidget添加上去了: ...