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. python复习——字符串

    1.字符串:用双引号括起的内容 2.title()——首字母大写:print(变量名.title()) upper()——全部大写:print(变量名.upper()) lower()——全部小写:p ...

  2. java使用BigDecimal 实现随机金额红包拆分算法

    原创代码,引用注明出处:https://www.cnblogs.com/guangxiang/p/12218714.html @Servicepublic class SplitRedPacketsS ...

  3. JavaSE--Arrays.copyof

    背景: 想偷懒一次数组赋值下面多个例子复制下数组就好了.. 以为 Arrays.copyof(Arrays.copyof内部调用的是 System.copy, 所以同 Arrays.copy)拷贝出来 ...

  4. bzoj4316小C的独立集(dfs树/仙人掌+DP)

    本题有两种写法,dfs树上DP和仙人掌DP. 先考虑dfs树DP. 什么是dfs树?其实是对于一棵仙人掌,dfs后形成生成树,找出非树边(即返祖边),然后dfs后每条返祖边+其所覆盖的链构成了一个环( ...

  5. Ubuntu系统下QEMU环境搭建

    (这篇文章是在搭建QEMU环境时,在网上找到了一些教程资料,并在实际操作中遇到的一些问题的整理) 下载Linux内核 下载内核有两种方法,一种是用git直接下载内核代码树,方便后面的内核开发.另一种是 ...

  6. JS-语句二

    for循环的4个要素: 1.初始值        2.条件判断        3.状态改变        4.循环体 for循环的写法: for(var i=0;i>10;i++)        ...

  7. 从结构和数字看OO——面向对象设计与构造第一章总结

    不知不觉中,我已经接触OO五周了,顺利地完成了第一章节的学习,回顾三次编程作业,惊喜于自身在设计思路和编程习惯已有了一定的改变,下面我将从度量分析.自身Bug.互测和设计模式四个方向对自己第一章的学习 ...

  8. CodeForces 1000A Codehorses T-shirts(STL map、思维)

    https://codeforces.com/problemset/problem/1000/A 题意: 有n个人,给出每个人的衣服的尺码,现在,将这n件衣服的尺码换成另外的n种尺码,如果有尺码一样的 ...

  9. 技术沙龙|京东云区块链进校园-京东云&深圳大学线下沙龙分享回顾

    在刚刚结束的京东云&深圳大学技术沙龙活动中,多位京东云的技术大咖针对京东云BDS产品技术细节.开源计划,与深圳大学的同学和参会者进行了深入探讨,干货满满反响深刻,获得了在场同学与参会者的一致好 ...

  10. js对象属性名和属性值生成新数组时都作为属性值

    const obj = { id:1, name:'zhangsan', age:18 } const arr = []; Object.getOwnPropertyNames(obj).forEac ...