【原创】Matlab.NET混合编程技巧之找出Matlab内置函数
本博客所有文章分类的总目录:【总目录】本博客博文总目录-实时更新
Matlab和C#混合编程文章目录 :【目录】Matlab和C#混合编程文章目录
Matlab与.NET的混合编程,掌握了基本过程,加上一定的开发经验和算法基础,肯定不难。反之,有时候一个小错误,可能抓破脑袋,加班几个晚上,调试才能解决。同样,由于Matlab.NET混编的特殊性,加上MathWorks的原因,英文文档和没有披露一些详细的细节(甚至不允许反编译MWArray.dll,呵呵,它不允许,不代表你不会哦)。经过很多项目,和大量的实验,也发现了一些小技巧和小秘密,今天就分享其中一个,先做一个简单的铺垫,下一篇将写一个实际例子。
1.Matlab.NET混编小技巧
常规混编时,比如我们要调用plot函数进行绘图,肯定是先自己写一个m函数,把plot封装一下,根据自己的需要,传递数据和参数。实际上,对于Matlab的内置函数,是不需要这么做的。也就是说,对于Matlab的内置函数,是可以直接在C#中进行调用的,只要传递的参数符合要求,就可以得到结果。
2.什么是Matlab的内置函数
本文所说的Matlab内置函数,就是Matlab所谓的"built-in MATLAB function"。
在Matlab中,可以使用exist返回一个名称或者函数的状态,比如是工作区的变量,搜索路径的m函数,dll文件或者内置函数。
比如,我们可以使用exist 来查看plot函数的信息:
>> exist plot ans =
可以看到,值为5,返回5说明就是"built-in MATLAB function"。从Matlab的组成来看,这些built-in MATLAB function应该都是matlab的核心函数,因此,也应该都包含在MCR中,因此这是一个直接可以调用的理由吧。
3.Matlab有哪些内置函数
在发现上述小技巧之后,本人亲自对其中几个内置函数进行了测试,证明其是可以在C#中直接调用,然后,我就想,到底有Matlab有多少个内置函数,函数名称有是什么?在把Matlab Help翻了很久之后,依旧没有结果。只是猜测,可能太多了,Matlab也没有特别说明吧。那怎么办,只能自己动手了(自己动手丰衣足食)。
说说找出内置函数集合的过程吧。
1.首先内置函数应该在核心的计算引擎中,外部工具箱的函数应该不属于(不排除其他工具箱中有部分函数也是内置函数)。
2.使用Matlab Help浏览器,打开核心组件Matlab的Functions节点,可以看到下面这些函数分类:

3.手动将这些大类中的函数手动复制到一个txt文本中,当然格式可能有点乱,不用管。
4.使用C#编写一个简单的函数,将上述txt文本进行处理,把函数名都截取出来,放到一个新的result.txt中。代码如下:
using System;
using System.Text ;
using System.IO ; namespace FunctionNameProcess
{
class Program
{
public static void Main(string[] args)
{
string fileName = @"funcname.txt" ;
string saveName = @"result.txt";
TextWriter tw = new StreamWriter (saveName ,false );
using (TextReader tr = new StreamReader (fileName ))
{
string temp ;
while ((temp = tr.ReadLine ())!=null )
{
tw.WriteLine (GetBulidInFunction (temp ));
}
}
tw.Close ();
Console.Write("Press any key to continue . . . ");
Console.ReadKey(true);
} public static string GetBulidInFunction(string name)
{
if (name !="") {
string[] names = name.Split ('\t');
if (names!=null && names []!= "") {
return names [];
}
}
return "";
}
}
}
5.最后在matlab中编写一个简单的批处理代码,循环验证result.txt中的函数名的信息,是否属于内置函数即可。matlab代码如下:
%导入数据后是cell类型的数据类型
%要进行转换为字符串数组然后调用exist函数进行计算
%最终结果也应该是字符串数组,需要声明,添加过程中类型不一样会有错误
clc;clear;
newData = importdata('result.txt');
vars = fieldnames(newData);
for i = :length(vars)
assignin('base', vars{i}, newData.(vars{i}));%在命名空间声明变量
end
result = {};%声明一个空的cell数组类型
for i = :size(textdata,)
temp =cell2mat(textdata(i,));
resultNo = exist(temp);
if resultNo == %返回5说明为内置函数
len = size(result,);
result(len+,) = mat2cell(temp);
end
end
OK,可以在result中看到属于内置函数的名称了。剩下的怎么办看你的了,本来想把这些函数都一一翻译出来,可惜太大了,有1000多个,最后放弃了,把这个技巧分享给大家,“授人以鱼不如授人以渔”,大家掌握了方法,其实也不难了。
备注:上面也提到了,其实也有可能其他工具箱也有一些内置函数,但工作量太大,没有全部测试,只是猜测一下,大家以后混编的时候,可以先用exist检测一下即可。至于这些核心组件中的内置函数,我也只测试了其中几个,理论上应该都是可以直接调用的,也不排除有些函数由于其他原因不能用啊,大家对症下药吧。
下次将分享如何在C#中直接调用这些内置函数,而不需要封装。
【原创】Matlab.NET混合编程技巧之找出Matlab内置函数的更多相关文章
- Matlab.NET混合编程技巧之——找出Matlab内置函数
原文:[原创]Matlab.NET混合编程技巧之--找出Matlab内置函数 Matlab与.NET的混合编程,掌握了基本过程,加上一定的开发经验和算法基础,肯定不难.反之,有时候一个小错误,可能抓破 ...
- 【原创】Matlab.NET混合编程技巧之直接调用Matlab内置函数
本博客所有文章分类的总目录:[总目录]本博客博文总目录-实时更新 Matlab和C#混合编程文章目录 :[目录]Matlab和C#混合编程文章目录 在我的上一篇文章[ ...
- Matlab.NET混合编程技巧之——直接调用Matlab内置函数(附源码)
原文:[原创]Matlab.NET混合编程技巧之--直接调用Matlab内置函数(附源码) 在我的上一篇文章[原创]Matlab.NET混编技巧之——找出Matlab内置函数中,已经大概的介绍了mat ...
- Matlab.NET混编技巧之——找出Matlab内置函数
原文 http://www.cnblogs.com/asxinyu/p/3295309.html Matlab与.NET的混合编程,掌握了基本过程,加上一定的开发经验和算法基础,肯 定不难.反之,有时 ...
- Day07:常用模块,面向对象编程(对象&类)及内置函数
今日内容:1.常用模块2.面向对象编程(*****) 介绍面向对象编程 类 对象3.内置函数------------------------------1.面向过程编程 核心“ ...
- Matlab内置函数
[原创]Matlab.NET混编技巧之——找出Matlab内置函数 Matlab与.NET的混合编程,掌握了基本过程,加上一定的开发经验和算法基础,肯定不难.反之,有时候一个小错误,可能抓破脑袋, ...
- Matlab.NET混合编程调用Figure窗体
原文:[原创]Matlab.NET混合编程调用Figure窗体 1.前言 做Matlab.NET混合编程好几年了,虽然Matlab很多函数忘记得差不多了,但基本的东西还是能熟练使用.特别是在C#调用M ...
- C#和MatLab的混合编程(充分利用二者的优势)
C#和MatLab的混合编程,充分利用了winform的直观显示和matlab的强大计算能力.在此以一个小例子的形式给大家讲述一下二者混合编程的实现. 一.软件的配置说明 C#版本:VS2010:Ma ...
- python_08 函数式编程、高阶函数、map、filter、reduce函数、内置函数
函数式编程 编程方法论: 1.面向过程 找到解决问题的入口,按照一个固定的流程去模拟解决问题的流程 (1).搜索目标,用户输入(配偶要求),按照要求到数据结构内检索合适的任务 (2)表白,表白成功进入 ...
随机推荐
- java jdb命令详解
jdb - Java debugger 功能描述: 通过简单的命令行程序,对本地或远程jvm进程进行调试. 开启jdb会话: 有多种方式可以开启jdb会话. (1)常见的方式是采用Jdb命令打开一个新 ...
- iOS常用的忽略警告
在iOS开发过程中,偶尔会碰到一些编译器警告,如果能够确定该警告不会影响到程序的正常运行,则可以手动告诉编译器忽略掉这个警告 iOS常用的忽略警告类型: 1.方法弃用警告 #pragma clang ...
- ListView 加载更多列表 Load More mono forandroid 项目笔记
今天项目经理找我说Listview加载更多的时候会出现一些问题,主要表现在会顿一下.让我我就去找Java的方法看看.自己写出了mono 的加载更多功能.和大家分享一下 先看效果 首先是模型类ListI ...
- Jumony快速抓取网页 --- Jumony使用笔记--icode
作者:郝喜路 个人主页:http://www.cnicode.com 博客地址:http://haoxilu.cnblogs.com 时间:2014年6月26日 19:25:02 ...
- 首届Ignite China微软技术大会见闻
10.26-10.28,有幸参加微软在中国北京举办的首届Ignite China技术大会.世界那么大,技术那么多,我想去看看. 为期三天的技术大会在小汤山九华山庄举办,吐槽一下,太特么远了,每天要跑3 ...
- 我的ORM之十一 -- 缓存
我的ORM索引 对某一个查询频繁重复,应该使用缓存. 缓存应该是可以配置. 配置 Web.config: <configuration> <configSections> &l ...
- 设计模式之美:State(状态)
索引 意图 结构 参与者 适用性 效果 相关模式 实现 实现方式(一):由 ConcreteState 指定它的后继 State. 意图 允许一个对象在其内部状态改变时改变它的行为.对象看起来似乎修改 ...
- javascript中this指针探讨
javascript是一门类java语言有很多跟java相类似的特点,但也仅是类似而已,真正使用中还是有很大的差别.this指针常常让很多初学者抓狂,本人也曾为此困惑不解,查找过很多资料,今天在这里总 ...
- 一次外企QQ面试
无忧上挂了简历,让个外企的hr约好面试,今天刚面完,整理出来给大家看看.难度不是很大,基本就是Asp.net Mvc 用到的东西,没有问数据库方面的. Part I – Frontend 1. Tr ...
- 用手机访问本地环境的利器ngrok
我们在调试移动端页面,尤其是调试微信页面的时候,会遇到这样的情况,手机连着公司的wifi,开发环境(台式机)插着公司的网线,我们要用手机来访问开发环境下的页面.这个时候,如果网线和wifi是在同一个网 ...