【原创】Matlab.NET混编技巧之——找出Matlab内置函数

 

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函数的信息:

1 >> exist plot
2
3 ans =
4
5 5

可以看到,值为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中。代码如下:

 1 using System;
2 using System.Text ;
3 using System.IO ;
4
5 namespace FunctionNameProcess
6 {
7 class Program
8 {
9 public static void Main(string[] args)
10 {
11 string fileName = @"funcname.txt" ;
12 string saveName = @"result.txt";
13 TextWriter tw = new StreamWriter (saveName ,false );
14 using (TextReader tr = new StreamReader (fileName ))
15 {
16 string temp ;
17 while ((temp = tr.ReadLine ())!=null )
18 {
19 tw.WriteLine (GetBulidInFunction (temp ));
20 }
21 }
22 tw.Close ();
23 Console.Write("Press any key to continue . . . ");
24 Console.ReadKey(true);
25 }
26
27 public static string GetBulidInFunction(string name)
28 {
29 if (name !="") {
30 string[] names = name.Split ('\t');
31 if (names!=null && names [0]!= "") {
32 return names [0];
33 }
34 }
35 return "";
36 }
37 }
38 }

5.最后在matlab中编写一个简单的批处理代码,循环验证result.txt中的函数名的信息,是否属于内置函数即可。matlab代码如下:

 1 %导入数据后是cell类型的数据类型
2 %要进行转换为字符串数组然后调用exist函数进行计算
3 %最终结果也应该是字符串数组,需要声明,添加过程中类型不一样会有错误
4 clc;clear;
5 newData = importdata('result.txt');
6 vars = fieldnames(newData);
7 for i = 1:length(vars)
8 assignin('base', vars{i}, newData.(vars{i}));%在命名空间声明变量
9 end
10 result = {};%声明一个空的cell数组类型
11 for i = 1:size(textdata,1)
12 temp =cell2mat(textdata(i,1));
13 resultNo = exist(temp);
14 if resultNo == 5 %返回5说明为内置函数
15 len = size(result,1);
16 result(len+1,1) = mat2cell(temp);
17 end
18 end

OK,可以在result中看到属于内置函数的名称了。剩下的怎么办看你的了,本来想把这些函数都一一翻译出来,可惜太大了,有1000多个,最后放弃了,把这个技巧分享给大家,“授人以鱼不如授人以渔”,大家掌握了方法,其实也不难了。

备注:上面也提到了,其实也有可能其他工具箱也有一些内置函数,但工作量太大,没有全部测试,只是猜测一下,大家以后混编的时候,可以先用exist检测一下即可。至于这些核心组件中的内置函数,我也只测试了其中几个,理论上应该都是可以直接调用的,也不排除有些函数由于其他原因不能用啊,大家对症下药吧。

下次将分享如何在C#中直接调用这些内置函数,而不需要封装。

编程爱好者,关注.NET软件开发,Matlab编程及网络技术

http://www.cnblogs.com/asxinyu/

E-mail:1287263703@qq.com

 

Matlab内置函数的更多相关文章

  1. 【原创】Matlab.NET混合编程技巧之找出Matlab内置函数

                  本博客所有文章分类的总目录:[总目录]本博客博文总目录-实时更新    Matlab和C#混合编程文章目录 :[目录]Matlab和C#混合编程文章目录 Matlab与.N ...

  2. 【原创】Matlab.NET混合编程技巧之直接调用Matlab内置函数

                  本博客所有文章分类的总目录:[总目录]本博客博文总目录-实时更新    Matlab和C#混合编程文章目录 :[目录]Matlab和C#混合编程文章目录 在我的上一篇文章[ ...

  3. Matlab.NET混编技巧之——找出Matlab内置函数

    原文 http://www.cnblogs.com/asxinyu/p/3295309.html Matlab与.NET的混合编程,掌握了基本过程,加上一定的开发经验和算法基础,肯 定不难.反之,有时 ...

  4. Matlab.NET混合编程技巧之——直接调用Matlab内置函数(附源码)

    原文:[原创]Matlab.NET混合编程技巧之--直接调用Matlab内置函数(附源码) 在我的上一篇文章[原创]Matlab.NET混编技巧之——找出Matlab内置函数中,已经大概的介绍了mat ...

  5. Matlab.NET混合编程技巧之——找出Matlab内置函数

    原文:[原创]Matlab.NET混合编程技巧之--找出Matlab内置函数 Matlab与.NET的混合编程,掌握了基本过程,加上一定的开发经验和算法基础,肯定不难.反之,有时候一个小错误,可能抓破 ...

  6. 非线性方程(组):MATLAB内置函数 solve, vpasolve, fsolve, fzero, roots [MATLAB]

    MATLAB函数 solve, vpasolve, fsolve, fzero, roots 功能和信息概览 求解函数 多项式型 非多项式型 一维 高维 符号 数值 算法 solve 支持,得到全部符 ...

  7. Entity Framework 6 Recipes 2nd Edition(11-12)译 -> 定义内置函数

    11-12. 定义内置函数 问题 想要定义一个在eSQL 和LINQ 查询里使用的内置函数. 解决方案 我们要在数据库中使用IsNull 函数,但是EF没有为eSQL 或LINQ发布这个函数. 假设我 ...

  8. Oracle内置函数:时间函数,转换函数,字符串函数,数值函数,替换函数

    dual单行单列的隐藏表,看不见 但是可以用,经常用来调内置函数.不用新建表 时间函数 sysdate 系统当前时间 add_months 作用:对日期的月份进行加减 写法:add_months(日期 ...

  9. python内置函数

    python内置函数 官方文档:点击 在这里我只列举一些常见的内置函数用法 1.abs()[求数字的绝对值] >>> abs(-13) 13 2.all() 判断所有集合元素都为真的 ...

随机推荐

  1. java_log4j----java 日志管理

    log4j 有三个主要组件: 类别Loggers------消息类型和优先级 附加目的地Appenders-------在哪里报告消息 布局Layouts------控制如何格式化消息 这三个组件共同 ...

  2. hdu 4864 Task(贪婪啊)

    主题链接:pid=4864">http://acm.hdu.edu.cn/showproblem.php?pid=4864 Task Time Limit: 4000/2000 MS ...

  3. jquery 调用wcf 的SOA架构,将三层架构运用到SOA的架构中来(第四天)

    经过前面3天的学习,我想大家应该对SOA的架构有了初步的了解,其实 SOA与三层架构并不冲突,而是三层架构的升级版. 来看下传统的三层架构! 一共可以分为4个层: 模型层(可有可无),客户端,服务端, ...

  4. Webserver管理系列:3、Windows Update

    微软的操作系统可以使用用户过程中发现了一些漏洞,因此,他们经常发布一些系统补丁.因此,我们需要自己主动安装更新功能后,打开系统. 默认的更新功能未开启自己主动: 开启自己主动更新功能后.Windows ...

  5. 加快XCode编译链接速度(200%+)—XCode编译慢液

    最近在一个大型项目的开发的时候遇到一个很头疼的问题,由于该项目的代码更,每次建立联系1纪要.浪费时间调试.因此,一些研究如何提高编译链接速度,这里给大家分享. 为了提高编译和链接的是以下三种方式的速度 ...

  6. JAVA异常处理、常用类、反射、集合

    异常 异常:在Java中是指被一个方法抛出的对象. 分类:检查异常.运行时异常.错误 运行时异常(uncheckd):RuntimeException和其子类 检查异常(checkd/搜检异常):指E ...

  7. 优秀个人免费私有云OwnCloud 8.0终于发布 - 亮眼新功能初探简介

    OwnCloud是一个基于Linux的私有云开源项目,用户可以免费使用它来搭建自己的私有云来进行文件和多媒体等的分享. 本人有幸在大概一年多前因为项目需要而接触和使用到OwnCloud,但不幸的是当时 ...

  8. installshield 32位打包和64位打包的注意事项

    原文:installshield 32位打包和64位打包的注意事项 32/64位问题要把握几点:1. 明确你的产品是否需要区分32/64位2. 明确你的产品中是否有32/64位的服务注册3. 了解In ...

  9. div、ul、li等无法居中问题,text-align无效 margin auto无效

    很简单.如果是div,直接把div换成: <table align="center">        <tr>            <td> ...

  10. Spring AspectJ的Execution表达式-备忘笔记

    Aspectj切入点语法定义 在使用spring框架配置AOP的时候,不管是通过XML配置文件还是注解的方式都需要定义pointcut"切入点" 例如定义切入点表达式  execu ...