Matlab 输入参数不足
我试图创建一个SIR模型(用两个参数求解3个微分方程),并在MATLAB上绘制解决方案,我不断得到错误“输入参数不足”。我真的看不出我错在哪里。代码如下:Matlab 输入参数不足,matlab,ode,differential-equations,Matlab,Ode,Differential Equations,我试图创建一个SIR模型(用两个参数求解3个微分方程),并在MATLAB上绘制解决方案,我不断得到错误“输入参数不足”。我真的看不出我错在哪里。代码如下: function dx = sir(t,x) dx=[0; 0; 0]; beta = .003; delta = 1; dx(1)= -beta *x(1)*x(2); dx(2)=beta*x(1)*x(2)-delta*x(2); dx(3)=delta*x(2); %options = odeset('RelTol', 1e
function dx = sir(t,x)
dx=[0; 0; 0];
beta = .003;
delta = 1;
dx(1)= -beta *x(1)*x(2);
dx(2)=beta*x(1)*x(2)-delta*x(2);
dx(3)=delta*x(2);
%options = odeset('RelTol', 1e-4, 'NonNegative', [1 2 3]);
[t,x] = ode45('sir', [0 10], [1000 1 0], options);
plot(t,x);
%legend('S', 'I', 'R');
end
我认为您对函数调用和递归如何工作有严重的误解,或者您可能只是不熟悉编程。你需要两件不同的事情:
sir.m
。这定义了你的颂歌。它应该包含:函数dx=sir(t,x)
β=0.003;
δ=1;
dx(1)=-β*x(1)*x(2);
dx(2)=β*x(1)*x(2)-δ*x(2);
dx(3)=δ*x(2);
sir.m
在您的路径或当前目录中,options=odeset('RelTol',1e-4,'NonNegative',[1 2 3]);
[t,x]=ode45('sir',[010],[100010],选项);
图(t,x);
图例('S','I','R');
请注意,步骤1定义了
sir
功能,步骤2使用该功能。这需要分两个单独的步骤来防止sir
调用自身(或者更准确地说,在您的情况下,调用一个函数,ode45
,它再次调用sir
)。这就是所谓的递归,而不是您在这里应该做的。首先,为什么不复制问题中的代码?第二,你能说明你如何调用函数sir(t,x)代码>?问题中的代码:函数dx=sir(t,x)dx=[0;0;0];β=0.003;δ=1;dx(1)=-βx(1)*x(2);dx(2)=βx(1)*x(2)-deltax(2);dx(3)=deltax(2);%选项=odeset('RelTol',1e-4,'NonNegative',[1 2 3]);[t,x]=ode45('sir',[010],[100010],选项);绘图(t,x);%图例('S','I','R');有人告诉我,我必须在函数外部调用,才能绘制出我的解决方案-我该怎么做?谢谢,请注意ode45行('sir',[010],[100010],options);将无限次地回忆起您的函数,因为使用的名称是sir,您需要重命名它。