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

我试图创建一个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-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);
    

  • 运行代码以解决ODE问题。只要
    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,您需要重命名它。