查看: 28134|回复: 7|关注: 1

[已解决] MATLAB中为什么会错误Not enough input arguments.

[复制链接]

新手

10 麦片

财富积分


050


16

主题

25

帖子

0

最佳答案
书里面的一个FM0编码的m文件,文件名fm0code.m,编译出错:
Error using fm0code (line 2)
Not enough input arguments.
帮看看怎么回事
代码:
function [sys,x0,str,ts]=fm0code(t,x,u,flag,p)
switch flag,                                     %判断仿真状态
    case 0,[sys,x0,str,ts]=mdlInitializeSizes(p); %初始化
    case 1,sys=mdlDerivatives(t,x,u);             %导数计算
    case 2,sys=mdlUpdate(t,x,u);                  %更新离散状态
    case 3,sys=mdlOutputs(t,x,u);                 %计算输出
    case 4,sys=mdlGetTimeOfNextVarHit(t,x,u);     %计算下一个采样时间
    case 9,sys=mdlTerminate(t,x,u);               %仿真结束
    otherwise
        error(['Unhandlede flag=',num2str(flag)]);%错误处理
end
function [sys,x0,str,ts]=mdlInitializeSizes(p)      %定义基本属性
sizes=simsizes;                                  %返回空的SIZE结构
sizes.NumContStates=0;                            %连续状态数目
sizes.NumDiscStates=2;                           %离散状态数目
sizes.NumOutputs=1;                              %输出端口数目
sizes.NumInputs=1;                               %输入端口数目
sizes.DirFeedthrough=1;                          %是否直通
sizes.NumSampleTimes=1;                          %采样周期数目
sys=simsizes(sizes);
x0=[0;0];                                        %初始化离散状态
str=[];
ts=[p 0];
function sys=mdlDerivatives(t,x,u)               %计算连续状态变量的导数
sys=[]
function sys=mdlUpdate(t,x,u)       %更新离散状态变量、采样时间和最大步长
x(1)=x(1)+1;
if rem(x(1),2)==0
    if x(2)==1
        x(2)=0
    else x(2)=1;
    end
else
    if u==0
        if x(2)==0
            x(2)=1;
        else x(2)=0;
        end
    end
end
sys=x;
function sys=mdlOutputs(t,x,u)                 %计算S函数输出
sys=x(2);
function sys=mdlGetTimeOfNextVarHit(t,x,u)     %计算下一次绝对时间
sampleTime=1;
sys=t+sampleTime
function sys=mdlTerminate(t,x,u)               %仿真结束
sys=[];
书里说,运行时将MATLAB主窗口中的路径修改为M文件存放的路径,并在MATLAB命令窗口中输入p=0.5即可调用本m文件。可是就是出错
回复主题 已获打赏: 0 积分

举报

MATLAB 基础讨论
版块优秀回答者

入门

93 麦片

财富积分


50500


5

主题

288

帖子

17

最佳答案
  • 关注者: 1
发表于 2013-11-19 21:47:36 | 显示全部楼层 |此回复为最佳答案
这是一个子函数,你需要用其他函数调用,否则不能直接使用。也可以在命令窗口中直接输入fm0code(t,x,u,flag,p),其中,t,x,u,flag,p必须赋予相应的值,少一个都不行!
回复此楼 已获打赏: 0 积分

举报

新手

5 麦片

财富积分


050


4

主题

32

帖子

0

最佳答案
发表于 2015-4-28 02:26:54 | 显示全部楼层
killerzheng 发表于 2013-11-19 21:47
这是一个子函数,你需要用其他函数调用,否则不能直接使用。也可以在命令窗口中直接输入fm0code(t,x,u,flag ...

你好,我也有个问题想问你,这是我编的一个S-函数
function [sys,x0,str,ts]=f(t,x,u,flag)
A=[-0.0046 0;1.0000 0];
B=[1;0];
C=[0 0.0022];
D=[0];
switch flag,
    case 0,
        [sys,x0,str,ts]=mdlInitializeSizes(A,B,C,D);
    case 1,
        sys=mdlDerivatives(t,x,u);
    case 2,
        sys=mdlUpdate(t,x,u,A,B,C,D);
    case 3,
        sys=mdlOutputs(x,u,A,B,C,D);
    case 4,
        sys=mdlGetTimeOfNextVarHit(t,x,u);
    case 9,
        sys=mdlTerminate(t,x,u);
    otherwise
        error(['Unhandled flag = ',num2str(flag)]);
end
function [sys,x0,str,ts]=mdlInitializeSizes(A,B,C,D)
sizes=simsizes;
sizes.NumContStates  =0;
sizes.NumDiscStates  =4;
sizes.NumOutputs     =2;
sizes.NumInputs      =5;
sizes.DirFeedthrough =1;
sizes.NumSampleTimes =1;
sys = simsizes(sizes);
x0 = ones(4,1);
str = [];
ts = [1 0];
function sys=mdlDerivatives(t,x,u)
sys=[];
function sys=mdlUpdate(t,x,u,A,B,C,D)
sys=A*x+B*u;
function sys=mdlOutputs(t,x,u,A,B,C,D)
sys=C*x+D*u;
function sys=mdlGetTimeOfNextVarhit(t,x,u)
sampleTime=1;
sys=t+sampleTime;
function sys=mdlTerminate(t,x,u)
sys=[];
然后运行的时候出现错误为
Error in 'll_2/Subsystem/S-Function' while executing MATLAB S-function 'ff1', flag = 3 (output), at time 0.0.

Caused by:
Not enough input arguments.
我不知道怎么解决,请帮我看一下好吗?谢谢
回复此楼 已获打赏: 0 积分

举报

MATLAB 基础讨论
版块优秀回答者

入门

93 麦片

财富积分


50500


5

主题

288

帖子

17

最佳答案
  • 关注者: 1
发表于 2015-4-30 10:24:36 | 显示全部楼层
落红尘 发表于 2015-4-28 02:26
你好,我也有个问题想问你,这是我编的一个S-函数
function [sys,x0,str,ts]=f(t,x,u,flag)
A=[-0.0046 0 ...

t,x,u,simsizes参数不知道,这边我没法帮你验证
回复此楼 已获打赏: 0 积分

举报

新手

5 麦片

财富积分


050


0

主题

19

帖子

0

最佳答案
发表于 2017-1-10 09:39:00 | 显示全部楼层
killerzheng 发表于 2013-11-19 21:47
这是一个子函数,你需要用其他函数调用,否则不能直接使用。也可以在命令窗口中直接输入fm0code(t,x,u,flag ...

你好,我也遇到了同样的问题,想问你处理好了吗?怎样解决的:)
回复此楼 已获打赏: 0 积分

举报

MATLAB 基础讨论
版块优秀回答者

入门

93 麦片

财富积分


50500


5

主题

288

帖子

17

最佳答案
  • 关注者: 1
发表于 2017-1-10 12:25:03 | 显示全部楼层
xuexizhilan 发表于 2017-1-10 09:39
你好,我也遇到了同样的问题,想问你处理好了吗?怎样解决的

函数的调用这样的基本规则,你得复习一下。这是基础知识
回复此楼 已获打赏: 0 积分

举报

新手

5 麦片

财富积分


050


0

主题

1

帖子

0

最佳答案
发表于 2018-10-22 18:29:03 | 显示全部楼层
killerzheng 发表于 2017-1-10 12:25
函数的调用这样的基本规则,你得复习一下。这是基础知识

您好,我也遇到同样的问题了,请问您能帮我看看吗
回复此楼 已获打赏: 0 积分

举报

MATLAB 基础讨论
版块优秀回答者

入门

93 麦片

财富积分


50500


5

主题

288

帖子

17

最佳答案
  • 关注者: 1
发表于 2018-10-25 14:25:00 | 显示全部楼层
marryjane1994 发表于 2018-10-22 18:29
您好,我也遇到同样的问题了,请问您能帮我看看吗

函数定义:function [sys,x0,str,ts]=fm0code(t,x,u,flag,p)
你在引用的时候:function [sys,x0,str,ts]=fm0code(t,x,u,flag),少了一个参数p
回复此楼 已获打赏: 0 积分

举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐上一条 /3 下一条

快速回复 返回顶部 返回列表