1. 概述
阅读此篇 matlab中s-function函数的使用的一点思考和帮助,并对最后一段代码进行解析,便于初学者更好的入门。
2. 代码解析
function [sys,x0]=dong(t,x,u,flag)
%一系统如下:
% dx1=x2
% dx2=9.81*sin(x(1))-2*x(2)+u
% 此系统的输出是 sys = [dx1;dx2]
% 根据 传入 flag 值的不同分别执行不同的程序,最终的输出一定是 sys 的值
if flag==0 %当 flag 的值为 0 ,直接输出 [2;0;2;1;0;0]
sys=[2;0;2;1;0;0];
x0=[0;0]; % 注意x0 = [0;0] 是不会输出的,输出一定是 dong函数的结果 sys
elseif flag==1
%当 flag 的值为 1 ,直接输出 [2;0;2;1;0;0],此时注意调用格式为:
% dong(t,[x1,x2],u,flag) 即 x 应该为 1*2 的向量
sys=[x(2);9.81*sin(x(1))-2*x(2)+u];
elseif flag==3 %当 flag 的值为 3 ,直接输出输入的变量值x1,x2
sys=[x(1);x(2)];
else %当 flag 的值为其他值时,输出为空
sys=[];
end
3. 运行解析
- 当在matlab编辑器中输入完上述代码后,若直接点击运行按钮会出现错误如下
图片左边是编辑器窗口的错误提示信息,右边是命令行窗口的错误提示信息,这是因为我们没有给这个函数设置输入参数,现在有两种输入方法 - 在编辑器输入
输入参数
,及在提示错误后,直接在编辑器中输入参数,下图蓝色部分,以为flag==0,因此命令行窗口中输出为 ans = [2 0 2 1 0 0]T
- 在命令窗口输入
dong(1,[1,1],1,0)
后回车,出现结果如下(和上面编辑器输入一样)
4. 思考
- 命令行窗口输入如下代码,观察结果并思考,更好的理解此m函数```
dong(1,[1,1],1,0)
dong(1,[1,1],1,1)
dong(1,[1,1],1,3)
dong(1,[1,1],1,2)
dong(1,[1,1],1,4)
dong(1,1,1,0)
dong(1,1,1,1)
dong(1,1,1,3)
dong(1,1,1,2)