怎样在matlab function模块中实现多输入
你好,我的matlab function前后结构是这样的。那这个matlab function模块里面的程序要怎么写呢,谢谢。
我写的是这样:
function y=fcn(u)
y=[y1 y2 y3]
u=[ua ub uc]
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=u;
结果还是不正确啊。求解答,谢谢; 展开
1、打开matlab,新建一个空白的simulinik模型。
2、打开simulink的元件库,如图中红圈所示。
3、在搜索栏输入“matlab function”,开始搜索,就可以在右边找到对应的模块。
4、第一个和最后一个是一样的。选中后按住鼠标左键不放,拖到空白的simulink界面中。
5、为了示例使用方法,编一个加法器的功能。把两个正弦波发生器,一个示波器用同样的方法拖到界面中来。
6、双机matlab function模块,打开编辑代码的界面。
7、默认的函数名称是fcn,输入量是u,输出量是y,都可以按照需要修改名称。这里把函数名称改成fcn_add。
8、重新定义输入量,因为有两个输入口,所以在声明函数时,分别命名为source_1和source_2,
9、保存以后回到simulink界面,可以发现,之前只有一个输入端的matlab function模块现在有两个输入端了。
10、按照对应的端口连接这些模块。设置两个正弦波发生器的参数,一个设置成幅值为1,频率为1HZ,另外一个是幅值为1,频率为2HZ。双击波形发生器就可以设置参数了。
11、准备仿真,仿真按钮就是上面的播放键。
12、然后等仿真结束后,双击scope示波器查看结果。可以发现这个matlab function模块已经实现了加法器的作用。
代码写的很乱:
1、开始的时候y1、y2、y3都还没赋值,直接就 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)的必要,直接用Interpreted MATLAB 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);
下面的方框图示意了两种函数写法对应的模块(模型已作为附件上传)。
2014-06-04
你好,我把问题补充了一下,麻烦在帮忙解答一下,谢谢;