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("\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#的矩阵运算)的更多相关文章
- Matlab高级教程_第二篇:Matlab相见恨晚的模块_02_并行运算-2
1 MATLAB并行计算-从个人桌面到远程集群和云(陈伟/魏奋)视频摘录笔记 https://cn.mathworks.com/videos/parallel-computing-with-matla ...
- Matlab高级教程_第二篇:Matlab相见恨晚的模块_02_并行运算-1
1 更高级的算法牵扯到更多重的循环和复杂的计算,尤其是现在人工智能的算法尤其如此.有些历史知识的人能够了解到,人工智能的很多基本算法其实近百年之前就有了,但是当时的计算机技术达不到去实现这些算法的要求 ...
- Matlab高级教程_第二篇:关于MATLAB转C#过程中遇到输出两组参数的问题
1. 在matlab的m函数很可能遇到原函数[a,b] = func(a); 这样的两个输出参数. 2. 在观察C#生成后定义中我们发现: public MWArray HP(); public MW ...
- Matlab高级教程_第二篇:Matlab相见恨晚的模块_01_定时器
MATLAB的定时器功能(timer函数): 1 从MATLAB6.5版本开始,MATLAB开始支持定时器.相对于传统的pause函数来说,定时器要强大的多,不仅可以等效实现pause的功能,还可以显 ...
- Matlab高级教程_第二篇:MATLAB和C#一些常用的矩阵运算方法的转换
1.相关方法已经生产引用,直接调用的结果如下: 2. 相关调用代码如下: using System; using System.Collections.Generic; using System.Li ...
- Matlab高级教程_第二篇:Matlab相见恨晚的模块_02_并行运算-关于parfor的问题
1 我们知道MATLAB支持并行运行一般有四种模式: 第一种模式:本机调用多核CPU性能并行运算 第二种模式:本机调用GPU性能并行运算 第三种模式:多计算机组成集群,调用集群CPU性能并行运算 第四 ...
- Matlab高级教程_第二篇:关于MATLAB转C#过程中MWArray到C#数组,C#数组到MWArray相互转换
Matlab传递数据时使用的方法,那么Matlab计算完成后在C#中应该怎么获取它的计算数据呢? 需要遵循两个基本步骤: 弄清楚Matlab函数传回的数据到底是什么格式?struct?cell?cha ...
- Matlab高级教程_第二篇:一个简单的混编例子
1. 常用的混编是MATLAB和VS两个编辑器之间的混编方式. 2. 因为MATLAB的核是C型语言,因此常见的混编方式是MATLAB和C型语言的混编. 3. 这里介绍一个简单的MATLAB语言混编成 ...
- Matlab高级教程_第二篇:Matlab2016a和VS2013混合
1. 首先把VS2017的XML两个配置文件放到 2. 然后一步一步的进行选择: 3. 2016版本的deploytool工具已经改版了,具体详细使用如下 4. 编写一个测试函数 我们编译成C#语言的 ...
随机推荐
- UE手游如何应对CPU帧率瓶颈和卡顿?
如何高效准确详细的对性能进行剖析?腾讯游戏学院专家Leonn将归纳总结在UE下对每一性能指标的剖析方法,本文重点讲解如何应对CPU帧率瓶颈和卡顿? CPU上帧率低和卡顿是性能优化中最易出现的一部分,尤 ...
- ucosiii 学习笔记
OSTaskCreate 的参数中有一个 void *p_ext,这个参数用来传递额外的信息,可以用来传递数组,结构体等等. AppTaskStart --> CPU_Init --> C ...
- part9 公用图片画廊组件拆分
1.src中创建 common 再创建 gallery.然后gallery.vue 2.build 中webpack.base.conf 中配置更短路径 module.exports {}中 reso ...
- 每天一点点之vue框架开发 - axios拦截器的使用
<script> import axios from 'axios' export default { name: 'hello', data () { return { msg: 'We ...
- POJ 1017:Packets
Packets Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 47513 Accepted: 16099 Descrip ...
- oracle (6)---SQL 数据关联查询
SQL 数据关联查询 Structure Query Language 从多(n)张表查询对应记录信息,必须有至少n-1个关联条件,否则会出现笛卡尔积的情况.1. 等值连接:没有连接关系的数据不会被查 ...
- dll hook 共享内存数据
unit UnitDll; interface uses Windows; * ; // 文件映射到内存的大小 const HOOK_MEM_FILENAME = 'MEM_FILE'; // 映像文 ...
- Java数据的存储
在JAVA中,有六个不同的地方可以存储数据: 1. 寄存器(register).这是最快的存储区,因为它位于不同于其他存储区的地方——处理器内部.但是寄存器的数量极其有限,所以寄存器由编译器根据需求进 ...
- linux常用命令及小知识点
网络跟踪: 1.mtr 2.tractroute 3.ping 下载命令 curl -O /path/xx wget 直接下载,将文件下载至当前目录 2.linux非22端口进行双机互信时候pu ...
- POJ 1860 Currency Exchange【bellman-Ford模板题】
传送门:http://poj.org/problem?id=1860 题意:给出每两种货币之间交换的手续费和汇率,求出从当前货币s开始交换回到s,能否使本金增多. 思路:bellman-Ford模板题 ...