博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C# Matlab 相互调用
阅读量:5779 次
发布时间:2019-06-18

本文共 2513 字,大约阅读时间需要 8 分钟。

转自原文

测试环境

VisualStudio2013 / .net4.0

Matlab2015b

高版本的matlab对外接其它语言做得很方便了,并不需要一堆的配置。

其它语言与matlab的交互操作也类似。

C#调用Matlab

基本思路:将matlab函数打包成DLL文件,联合matlab数据支持DLL(MWArray.dll),交付给其它语言程序使用。

1、Matlab端的操作

编写matlab函数:

function [result,m,n] = GetSelfMultiplyResult(list)% 计算 矩阵与其转置矩阵的乘积% 测试返回多个结果result = list*list';[m,n] = size(result);end
function result = GetSelfSquareResult(list)% 计算 矩阵各元素平方后的结果result = list.^2;end

打包函数:

  1. 找到库编译器(LibraryCompiler)

    Matlab库编译器

  2. 打包函数

    如下图所示,
    1)选择目标类型(TYPE);
    2)添加需要打包的函数文件;
    3)重命名库名称。
    打包DLL库

  3. 重命名类名称,或者添加类,分配函数所属类。完成打包操作。

    打包类

在生成的文件中,找到“for_redistribution_files_only”文件夹,里面有

CalcMatResult.dll CalcMatResultNative.dll 两个dll文件,均可使用。
另外,MWArray.dll 在matlab安装目录中,参考路径:

X:\Program Files\MATLAB\R2015b\toolbox\dotnetbuilder\bin\win64\v2.0\

 

也可以直接使用Everything等软件直接搜索。

2、C#端的操作

C#端用到的就是 MWArray.dll 和 CalcMatResultNative.dll 这两个DLL文件。

    1. 添加DLL引用

      添加DLL引用

    2. 演示代码

 

using System;using CalcMatResultNative; //添加引用using MathWorks.MATLAB.NET.Arrays; //添加引用namespace CsharpMatlabDemo{    class Program    {        static void Main(string[] args)        {            int[,] list ={
{
1},{
2},{
3},{
4}}; //列向量 MWArray array = new MWNumericArray(list); CalcMatResultNative.Multiply multi = new Multiply(); object resultObj = multi.GetSelfMultiplyResult(3, array);// 3 表示返回的结果数量,要小于等于matlab对应函数实际的返回值数量 object[] resultObjs = (object[]) resultObj; double[,] calcResult = (double[,])resultObjs[0]; double[,] sizem = (double[,])resultObjs[1]; double[,] sizen = (double[,])resultObjs[2]; Console.ReadKey(); } }}

 

 

Matlab调用C#

matlab调用C#更加简单,先将C#代码编译成dll库,matlab中直接引用即可调用。

如果失败,注意检查使用的.net版本是否过高,平台(x64/86)是否匹配等问题。

注意选择Release版本的DLL(C#的Bebug版本也可以引用,但C++的不行)。

1、C#端操作

代码

namespace MatlabInterface{    public class Dialog    {        public static bool ShowSelectMsg(string msg, string title)        {            DialogResult r = MessageBox.Show(msg, title, MessageBoxButtons.YesNo, MessageBoxIcon.Question);            return r == DialogResult.Yes;        }        public string Msg { get; set; }        public void ShowMsg()        {            MessageBox.Show(Msg, "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);        }    }}

2、Matlab操作

% 调用C# dll% 引用绝对路径NET.addAssembly('R:\Users\GrassPhy\Desktop\MatlabCsharpDemo\MatlabInterface.dll');% 静态方法调用select = MatlabInterface.Dialog.ShowSelectMsg('请选择...','提示');if select    disp('yes');else    disp('no');end% 成员方法调用dialog = MatlabInterface.Dialog();dialog.Msg = '提示信息';dialog.ShowMsg();

 

参考:

 

你可能感兴趣的文章
oracle体系结构
查看>>
使用CocoaPods过程中的几个问题
查看>>
机房带宽暴涨问题分析及解决方法
查看>>
XP 安装ORACLE
查看>>
八、 vSphere 6.7 U1(八):分布式交换机配置(vMotion迁移网段)
查看>>
php5编译安装常见错误和解决办法集锦
查看>>
ORACLE配置,修改tnsnames.ora文件实例
查看>>
Workstation服务无法启动导致无法访问文件服务器
查看>>
我的友情链接
查看>>
JS中比较数字大小
查看>>
jQuery插件的开发
查看>>
基础,基础,还是基础之JAVA基础
查看>>
如何成为一个C++高级程序员
查看>>
我的友情链接
查看>>
显式锁(第十三章)
查看>>
看linux书籍做的一些重要笔记(2011.07.03更新)
查看>>
从案例学RxAndroid开发(上)
查看>>
Redis学习手册(内存优化)
查看>>
springboot系列十 Spring-Data-Redis
查看>>
excel进行矩阵计算
查看>>