我是靠谱客的博主 缥缈流沙,最近开发中收集的这篇文章主要介绍matlab function输入,怎样在matlab function模块中实现多输入,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

m文件对simulink的连接bai:1、在m文件du中首先打开zhimdl文件,用open_system('model');2、现在可以在m文件中用daoset_param()和get_param()函数改专变和获得simulink中模块属的参数值;把m函数封装成simulink模块(matlab7.0):1、可以应用user-DefinedFunctions里面的EmbeddedMATLABFunction;2、m函数为多输入与多输出时可直接改fcn函数输入与输出,保存就可以那;用sim()函数该函数的调用格式为:[t,x,y]=sim(f1,tspan,options,ut)其中f1为SIMULINK的模型名,tspan为仿真时间控制变量;参数options为模型控制参数;ut为外部输入向量,可以这样复做。首先打开.m文件(制matlab中一般左边会有一个2113文件5261路4102径,通过它1653找到并打开文件即可)。然后在打开的.m文件窗口的右上方,会有一个run按钮(就是一个三角形按钮),按下便可以运行.m中的所有程序,结果显示在commandwindow里。如果只想运行程序中的一部分,可以选中文件中的那部分,右键点击选中的部分,选择evaluatecells(好像是第一个选项),即可运行选中的部分了。不知道说没说清楚,欢迎追问~www.mh456.com防采集。

1、打开matlab,新建一个空白的simulinik模型。

建立一个function,然后在里面进行调用就行了

3f6a42193112610ba8d684727ec44afc.png

04e28851198a577fc4b8914f2c42abb9.png

2、打开simulink的元件库,如图中红圈所示e69da5e887aa3231313335323631343130323136353331333431376532。

1. 在Simulink中新建.mdl(或.slx)文件,假设名为“TestGlobal.slx”,将Matlab Function,拖入新建文件中; 2. 双击Matlab Function,进入MATLAB Function Block Editor,在此文本中声明所需用到全局变量(假设为变量名 A)形如 global A; 例如:

53ada8d9c56dc2d24aff8764bb1ff4ff.png

828602dab43386566d125fe10333522f.png

3、在搜索栏输入“matlab function”,开始搜索,就可以在右边找到对应的模块。

test定义两个参数,一个是函数,一个是函数的变量。 function [z]=test11(funname,x) z=funname(x); 调用方式如下 test11(@bestU,2)

6561fa2ba6f27bc0b9efe6f891b6b87d.png

62500ff88a247d40971bb39b7f6aae8e.png

4、第一个和最后一个是一样的。选中后按住鼠标左键不放,拖到空白的simulink界面中。

把y改成[y,z]就行了!

38f6ace679bc12575d5357be59106549.png

d89bba93f7f3e0d1518e991a524e769a.png

5、为了示例使用方法,编一个加法器的功能。把两个正弦波发生器,一个示波器用同样的方法拖到界面中来。

从图判断,你用的是Embedded MATLAB Function模块; MATLAB的switchcase语句和C语言不同,case的后面应该接逗号而不是冒号; 你的u1、u2、u3多处误写成u(1)、u(2)、u(3); 条件语句的最后一个分支 else(u1==0&&u2==-1) 到底有没有条件判断?

d6fc40df0df3e0afc2309145bde3b0dc.png

7fa261fd4dfb5f2600db90304a50a300.png

6、双机matlab function模块,打开编辑代码的界面。

cdcfef278a9d3c10739370b1c4dbdd27.png

7、默认的函数名称是fcn,输入量是u,输出量是y,都可以按照需要修改名称。这里把函数名称改成fcn_add。

ffb010c149293e6e8c51468a04c8e0f7.png

8、重新定义输入量,因为有两个输入口,所以在声明函数时,分别命名为source_1和source_2,

b3102882c8b28fc316f7c4e46ccf8f91.png

9、保存以后回到simulink界面,可以发现,之前只有一个输入端的matlab function模块现在有两个输入端了。

c5bf0a7a1cccfa9c62ddd6800b31db71.png

10、按照对应的端口连接这些模块。设置两个正弦波发生器的参数,一个设置成幅值为1,频率为1HZ,另外一个是幅值为1,频率为2HZ。双击波形发生器就可以设置参数了。

4dbf7f7c9b1201b44a9d5614d22e0e1c.png

11、准备仿真,仿真按钮就是上面的播放键。

d057c98c0d9aff94be58ea64be4ae6c6.png

12、然后等仿真结束后,双击scope示波器查看结果。可以发现这个matlab function模块已经实现了加法器的作用。

322e74cf2016e850b53015670917bda5.png

代码写的很乱:

1、开始的时候y1、y2、y3都还没赋值,直接e68a8462616964757a686964616f31333335323365就 y=[y1 y2 y3] 肯定会出错。

2、同样,ua、ub、uc也没有赋值就用了。而且u作为输入参数传进来,对u赋值就把输入给覆盖了。

3、变量x(1)、x(2)哪里来的?

按照你现在的模块,可以把代码改成:function y = fcn(x)y1=x(2)*cos(x(1));y2=x(2)*cos(x(1)-2*pi/3);y3=x(2)*cos(x(1)+2*pi/3);y=[y1 y2 y3];

不过,实现这样的功能似乎没有使用MATLAB Function模块(早期版本里叫Embedded MATLAB Function)的必要,直接用InterpretedMATLAB Function就可以了(早期版本里叫MATLAB Fcn)。

如果用MATLAB Function模块,可以利用其支持多输入多输出的特点,把函数改成:function [y1,y2,y3] = fcn(x1,x2)y1=x2*cos(x1);y2=x2*cos(x1-2*pi/3);y3=x2*cos(x1+2*pi/3);

下面的方框图示意了两种函数写法对应的模块(模型已作为附件上传)。

65bd0df68ea6ed5c7d9cd565285f1dfc.png

本回答被提问者采纳

fcn(ua,ub,uc)就是三个输入的追问你好,我把问题补充了一下,麻烦在帮忙解答一下,谢谢;

很可能你这个模块的输入信号是标量,但模块里面却把输入当向量用的(表达式里面有u(2)),什么问题 内容来自www.mh456.com请勿采集。

最后

以上就是缥缈流沙为你收集整理的matlab function输入,怎样在matlab function模块中实现多输入的全部内容,希望文章能够帮你解决matlab function输入,怎样在matlab function模块中实现多输入所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(78)

评论列表共有 0 条评论

立即
投稿
返回
顶部