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#语言的 ...
随机推荐
- centos7-DNS(主从)
一.安装DNS. 本机ip:192.168.1.3 [root@localhost ~]# yum -y install bind bind-utlis 二.编辑配置文件. [root@localho ...
- Linux学习打卡20200214
- Charles下载与破解方法
文章参考:charles4.2下载与破解方法以及配置https 1.Charles官网下载 地址:https://www.charlesproxy.com/latest-release/downloa ...
- Angular表单 (一)表单简介
Angular 表单 angular提供了两种不同的方法来通过表单处理用户输入:响应式表单和模板驱动表单.二者都从视图中捕获用户输入事件.验证用户输入.创建表单模型.修改数据模型,并提供跟踪这些更改的 ...
- Codeforces Round #620 (Div. 2)F2
题意:给出n,和m表示有n天,m块区域,每块区域都有一定数论的动物数量,k表示可以在这一天中观察[x,max(x+k-1,m)]的区域内的动物,有俩台相机,一台只能在偶数天用,另一台则是在奇数天用,每 ...
- 解决 urxvt “unknown terminal type.”
登录到远程服务器上后,有时执行某些命令会提示unknown terminal type. 这是因为远程ssh不支持urxvt,执行 export TERM=xterm-256color 或者在远程主机 ...
- MyBatis中foreach传入参数为数组
一.当只有一个参数,并且这个参数是数组时 接口方法的参数不需要添加@Param注释,collection="array" 示例 接口的方法 void deleteMulti(Str ...
- 运营商何时会取消40G或100G流量封顶呢?短期内有望实现吗?
一直以来,运营商的不限流量套餐就饱受人们的诟病.因为说是不限流量,但其实运营商故意设置了"封顶"!最常见的封顶限制,就是流量超过40G网速会降速到1Mbps--实际下载速度为128 ...
- CENTOS YUM更新源
网络yum源和制作本地光盘yum源 配置CENTOS YUM更新源 yum安装rpm包安装后本地不清除的方法 sed -i 's#keepcache=0#keepcache=1#g' /etc/yum ...
- 深入分析Java反射(七)-简述反射调用的底层实现
前提 Java反射的API在JavaSE1.7的时候已经基本完善,但是本文编写的时候使用的是Oracle JDK11,因为JDK11对于sun包下的源码也上传了,可以直接通过IDE查看对应的源码和进行 ...