Embeded Matlab Function使用介绍
来源:互联网 发布:fluent软件代理 编辑:程序博客网 时间:2024/05/08 21:13
所有的工作都是基于matlab 2010版本。
一.对embedded matlab function的简要介绍
Embedded MATLABFunction模块位于Simulink/User-Defined Functions模块库中。该模块工作于matlab语言的一个子集(称为 embedded matlab subset,不在此子集的函数,需要用eml.extrinsic声明或采用feval才能使用,后面介绍),该模块能够提供高效的代码(编译后高效)。它适用于某些用文字语言比用图形语言方便的算法描述。
二.一个简单例子
模型如下:
其中Constant中是[2 3 4 5].
本实例是计算输入的期望和标准差。代码如下:
1. function [mean,stdev]=stats(vals)
2. %#eml
3. % calculates a statistical mean and standard deviation fo the values vals.
4. eml.extrinsic('plot');
5. len=length(vals);
6. mean=avg(vals,len);
7. stdev=sqrt(sum(((vals-mean).^2))/len);
8. plot(vals,'-+');
9. function mean=avg(array,size)
10. mean=sum(array)/size;
三.对改代码的解释。
1.函数头部
1. function [mean,stdev]=stats(vals)
函数头部可以定义模块的输入、输出和参数(parameter),本例子中只有输入和输出。例如,在本例子中:mean和stdev是输出,vals是输入,并且可以很明显地在模块中显示出来。
2.编译提示(Compilation Directive,pragma)
1. %#eml
我个人认为%#eml这个编译提示是明确地告诉编辑器,下面的代码是按embedded matlabsubset的语法编写的,编译器也应该按这种语法规则来编译。根据help文档,添加这个编译提示有两个目的:
1. 如果编译成功,可以提供明显地提示函数是按embedded matlab subset语法编译的;
2. 如果编译失败,可以提供详细的错误信息以帮助纠错。
3.外部函数声明
1. eml.extrinsic('plot');
如前文所述,embedded matlab subset是matlab语言的一个子集,所以有一些matlab函数是embedded matlab subset中没有的(如plot函数)。若想使用这些函数,有两种方法:
1. eml.extrinsic来声明。例如eml.extrinsic('plot'),声明之后就可以在函数中使用plot函数。运行时plot会自动在matlab中运行,而不是在embedded matlab subset中运行;
2. 使用feval函数。embedded matlab function自动将feval函数当做外部函数(即交予matlab执行,就好像天然进行过eml.extrinsic('feval')声明过一样)。例如feval('min',4,5)。
4.子函数
1. function mean=avg(array,size)
2. mean=sum(array)/size;
其实子函数的写法和普通的m语言的子函数写法是相同的(在同一个文件中的子函数)。
5.变量的使用特点
embedded matlab中的变量使用和matlab的m语言是不同的,这一点要尤其注意。在matlab中,变量几乎是可以任意使用的,例如变量x可以使vector、matrix或者scaler,x可以是实数或者复数等等,不限制其数据类型、大小和complexity(表明是实数还是复数)。然而在embedded matlab中,除了输入数据的变量,几乎所有的变量的使用都要经过隐性的赋值声明。例如:如果输出变量y是一个256×1的vector,那么在使用y必须有一个类似的声明y=ones(256,1),这个声明就决定了y必须是个256×1的vector,而且数值必须是实数,double类型,这个在函数中就不能再改变了,否则会报错。下面在看一个我曾经犯过错的例子:
1. function Y = fcn(H,U)
2. %#eml
3. Y=complex(ones(256,1));
4. k=0:255;
5. W=exp(-2j*pi/256).^k';
6. Y=U.*W./H;
这里由于输出Y要求是个256×1的vector,所以隐性赋值声明是Y=complex(ones(256,1)),若用Y=ones(256,1)则报错,因为此时的Y限定为实数,而非复数,这一点要谨记。
四.参考help文档位置
embedded matlab subset中可用的与matlab中同名、同参的函数列在help文档Embedded MATLAB\User's Guide\Working withthe Embedded MATLAB Subset\Embedded MATLAB Function Library Reference
总的索引help文档Simulink\User's Guide\ManagingBlocks\Using the Embedded MATLAB Function Block
- Embeded Matlab Function使用介绍
- matlab function的使用
- QT QT/embeded qtopia介绍
- QT 和 QT/Embeded 介绍
- Matlab function如何使用全局变量
- MATLAB使用及介绍
- Interpreted MATLAB Function 与 MATLAB Function 区别
- 使用embeded tomcat进行嵌入式tomcat-启动tomcat
- MATLAB Function Reference - Sparse
- matlab s function(转)
- Embedded MATLAB Function
- matlab isnan function
- roots function in MATLAB
- matlab----image function
- isnan function in matlab
- find function in matlab
- Matlab function lorenzgui
- function handle in MATLAB
- python命令行解析模块optionparser
- 网页设计中利用CSS实现背景图片平铺的技巧
- Flex一些例子
- 设计模式之Singleton(单态)
- jquery实现自由落体
- Embeded Matlab Function使用介绍
- 关于Visual Studio 配色方案
- 【Android】短信管理代码
- HQL遇上的问题
- Oracle RMAN备份脚本
- hash算法及应用
- python学习笔记之二---object
- hadoop进程pid文件问题
- MFC DLL 中宏AFX_MANAGE_STATE的作用