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#语言的 ...
随机推荐
- 带你探索关于飞机Wi-Fi服务的神奇科学
资料来源: Colin Anderson制片公司/ Getty图片社 在35000英尺的高空冲浪?哇哦,这当然是我们现在所期望的飞行方式了.根据2018年全球旅行者研究(2018 Global Tra ...
- torch文档学习笔记
下面为官方文档学习笔记 http://pytorch.org/docs/0.3.0/index.html 1.torch.Tensor from __future__ import print_ ...
- zabbix获取到的数值大于1000之后自动转换成1k
问题:zabbix在取到的值很大时会自动变成K,M,G 解决方法: 1.修改/var/www/html/zabbix/include/func.inc.php文件(这个文件不一定在这,自己find找下 ...
- Angular表单 (一)表单简介
Angular 表单 angular提供了两种不同的方法来通过表单处理用户输入:响应式表单和模板驱动表单.二者都从视图中捕获用户输入事件.验证用户输入.创建表单模型.修改数据模型,并提供跟踪这些更改的 ...
- 开源PLM软件Aras详解七 在Aras的Method中如何引用外部DLL
在实际的项目中,Aras内部的方法可能并不能完全满足我们,比如Office的组件,就必须引入,那么在Aras内部的Method中,我们如何引入外部Dll文件 首先,我们新建一个Dll文件,简单的Dem ...
- MySQL高负载优化
MySQL配置文件优化 [client] port = #客户端端口号为3306 socket = /data//mysql.sock # default-character-set = utf8 # ...
- HDU 2795 Billboard 线段树活用
题目大意:在h*w 高乘宽这样大小的 board上要贴广告,每个广告的高均为1,wi值就是数据另给,每组数组给了一个board和多个广告,要你求出,每个广告应该贴在board的哪一行,如果实在贴不上, ...
- 直击JDD | 陈生强:京东数科的底层是数字化操作系统
11月19日,由京东集团主办的JDD-2019京东全球科技探索者大会在京开幕,京东数字科技集团CEO陈生强作了题为"以科技为美,为价值而生"的主旨发言,再论"数字科技&q ...
- c语言中%s和%d的区别
/************************************************************************* > File Name: ptr_both. ...
- UML-GoF设计模式
我认为,本章是重点中的重点.并非23个模式都被广泛应用,其中常用和最为有效的大概有15个模式. 1.适配器(Adapter) 1).使用场景 使用一个已经存在的类,但如果他的接口,也就是他的方法和你的 ...