对旧的MATLAB脚本进行故障诊断:“没有足够的输入参数”

时间:2017-04-21 01:21:21

标签: matlab ode

我目前正在回顾旧的MATLAB大学作业。自从我使用MATLAB以来已经有一段时间了,而且我很难用这个脚本搞清楚这个错误,当我写这个并且提交它时大概运行了〜4年前 - 我提交的代码下面的代码是正确的输出。也许MATLAB语法略有改变?

该任务使用ODE求解器运行SIR(传染病)模拟。这是下面的代码:

%%FUNCTION:
function rhs = SIR_rhs_seasonal(t,u,p,D,G)
%Right-hand side of SIR model
%Assumes 52 weeks in a year

B=((15*(1/7))/3000000)*(1+p*cos(2*pi*t/365));

S = u(1);
E = u(2);
I = u(3);
R = u(4);

rhs = [ -B*S*I; (B*S*I)-(D*E); (D*E)-(G*I); G*I ];

%%ODE SOLVER:
%% parameters
tend = 700;
D=1/7;
G=1/7;
p=.1;
N=3000000

%% initial condition
u = [ N*.99; N*0; N*.01; N*0 ];

%% solve ODE
[T,U] = ode45(@(t,u) SIR_rhs_seasonal(t,u,p,D,G),[0:0.1:tend],u);

%% plot results
figure(1);
plot(T,U(:,1),'b',T,U(:,2),'r',T,U(:,3),'k',T,U(:,4),'g');
axis([0 10 0 3000000]);
xlabel('time = weeks');
ylabel('population');
title('susceptibles (blue), latent (red), infectious (black), recovered/removed (green)');

figure(2);
plot(T,U(:,2)./(U(:,2)+U(:,3)),'b')
axis([0 tend -.25 1]);
xlabel('time = days');
ylabel('E(t)/(E(t)+I(t))');
title('Latent proportion of infectives');

目前获得的错误是:

  

SIRmodel2没有足够的输入参数。

     

SIRmodel2出错(第6行)   B =((15 *(1/7))/ 3000000)*(1 + P * cos(2 * PI * T / 365));

非常感谢任何见解!

1 个答案:

答案 0 :(得分:0)

首先要验证一件事:

  • 错误消息表明您使用的是函数SIRmodel2,但帖子中打印的函数称为SIR_rhs_seasonal。该文件名为SIRmodel2.m,即这是否真的是正在执行的函数?

如果这是正在执行的函数,那么错误将在第6行抛出,因为它是第一行使用了函数的一些输入参数,即pt 。可能你没有指定这些输入就调用了函数。

你怎么称呼这个功能?

您还可以通过在第6行放置一个断点(将光标移动到第6行并按F12)并运行代码来验证情况。它将在执行该行之前停止。现在将鼠标悬停在变量pt上。其中至少有一个不会被定义。