Matlab.NET混编技巧之——找出Matlab内置函数
原文 http://www.cnblogs.com/asxinyu/p/3295309.html
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与.N ...
- 【原创】Matlab.NET混合编程技巧之直接调用Matlab内置函数
本博客所有文章分类的总目录:[总目录]本博客博文总目录-实时更新 Matlab和C#混合编程文章目录 :[目录]Matlab和C#混合编程文章目录 在我的上一篇文章[ ...
- Matlab.NET混合编程技巧之——直接调用Matlab内置函数(附源码)
原文:[原创]Matlab.NET混合编程技巧之--直接调用Matlab内置函数(附源码) 在我的上一篇文章[原创]Matlab.NET混编技巧之——找出Matlab内置函数中,已经大概的介绍了mat ...
- Matlab内置函数
[原创]Matlab.NET混编技巧之——找出Matlab内置函数 Matlab与.NET的混合编程,掌握了基本过程,加上一定的开发经验和算法基础,肯定不难.反之,有时候一个小错误,可能抓破脑袋, ...
- 非线性方程(组):MATLAB内置函数 solve, vpasolve, fsolve, fzero, roots [MATLAB]
MATLAB函数 solve, vpasolve, fsolve, fzero, roots 功能和信息概览 求解函数 多项式型 非多项式型 一维 高维 符号 数值 算法 solve 支持,得到全部符 ...
- 找出10000内的素数 CSP
"Problem: To print in ascending order all primes less than 10000. Use an array of processes, SI ...
- C#快速找出磁盘内的所有文件
本文只针对NTFS格式化的磁盘文件快速检索,速度不是非常快,是让你震惊. 一般用文件遍历的方法检索一个50G的文件夹需要几十分钟甚至一个小时的时间,而用本方法只需几秒. using System; u ...
- C#实现根据传入时间段,找出时间段内日期,并生成相对应文件路径
[1]获取固定日期范围内的所有日期,以数组形式返回 /// <summary> /// 获取固定日期范围内的所有日期,以数组形式返回 /// </summ ...
随机推荐
- php的DOMDocument 如何判断xml是否存在某节点
在做xml解释时,需要判断是否存在某个节点,查了手册函数,硬是没有发现那个函数有这个功能(如果你知道的话,请留言,博主感激涕零). 下面,就说下博主,经过N多博文,论坛查阅后,得到的一种方法(看到的博 ...
- 初学swift笔记 继承(十)
import Foundation /* 继承 class childClass: FatherClass{ } 优点 代码重用 缺点 增加程序的藕合度 父类的改变会影响子类 只能单继承 */ cla ...
- python socket 编程之三:长连接、短连接以及心跳
长连接:开启一个socket连接,收发完数据后,不立刻关闭连接,可以多次收发数据包. 短连接:开启一个socket连接,收发完数据后,立刻关闭连接. 心跳:长连接在没有数据通信时,定时发送数据包(心跳 ...
- javascript 事件设计模式
http://plkong.iteye.com/blog/213543 1. 事件设计概述 事件机制可以是程序逻辑更加清晰可见,在JavaScript中很多对象都有自己的事件,如:button有onc ...
- C#尝试读取或写入受保护的内存。这通常指示其他内存已损坏。
安装VS2013后,win7 + .net 4 + c#程序无法连接到SQL Server2000的实例 SQLServer2012在登录远程服务器实例时报错:尝试读取或写入受保护的内存. “尝试读取 ...
- 【UVA 10307 Killing Aliens in Borg Maze】最小生成树, kruscal, bfs
题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=20846 POJ 3026是同样的题,但是内存要求比较严格,并是没有 ...
- Tortoise-SVN 出现“unable to connect to a repository at url no element found”解决办法
安装要SVN server服务器后,建立自己的Repositories,创建自己的项目文件夹 如,https://xxxxxxxxxx.com:8443/ 安装Tortoise-svn进行设置目标链接 ...
- flex——将Sprite控件添加到FLEX UI中
在Flex的帮助文档里,有很多例子都是扩展Sprite类的.如果想把这些实例添加到你的s:Application中,如:addChild(DisplayObject ),肯定会出错.错误的大致意思是: ...
- Hadoop 5、HDFS HA 和 YARN
Hadoop 2.0 产生的背景Hadoop 1.0 中HDFS和MapReduce存在高可用和扩展方面的问题 HDFS存在的问题 NameNode单点故障,难以用于在线场景 NameNode压力过大 ...
- ROS Node/Topic/Message/Service的一些问题
1.Node http://blog.exbot.net/archives/1412 (摘自老王说ros) node干的什么活?callback queue里的活.这个callback queue里的 ...