使用Octave求解ODE系统

时间:2016-03-15 18:03:58

标签: octave ode

我正在尝试使用Octave解决两个ODE的系统,特别是函数lsode。

代码如下:

function xdot = f (x,t)

a1=0.00875;
a2=0.075;
b1=7.5;
b2=2.5;
d1=0.0001;
d2=0.0001;
g=4*10^(-8);
K1=5000;
K2=2500;
n=2;
m=2;

xdot = zeros(2,1);

xdot(1) = a1+b1*x(1)^n/(K1^n+x(1)^n)-g*x(1)*x(2)-d1*x(1);
xdot(2) = a2+b2*x(1)^m/(K2^m+x(1)^m)-d2*x(2);

endfunction

t = linspace(0, 5000, 200)';
x0 = [1000; 1000];
x = lsode ("f", x0, t);

set term dumb;
plot(t,x); 

我不断得到同样的错误," x"没有定义,我不知道为什么。错误如下:

warning: function name 'f' does not agree with function file name '/home /Simulation 1/sim.m'
error: 'x' undefined near line 17 column 17
error: called from
    sim at line 17 column 9

我们很高兴你们中的任何人都可以帮我解决这个问题。

1 个答案:

答案 0 :(得分:0)

您有两个错误。一,您没有使用正确的名称保存源代码。二,变量“x”是一个向量,脚本中没有任何内容表示这一点。你应该添加一行“x = zeros(1,2);”就在“xdot = zeros(2,1);”之后。

请尝试以下代码:

function ODEs
  t = linspace(0, 5000, 200);
  x0 = [1000; 1000];
  x = lsode (@f, x0, t);

  fprintf('t = %e \t\t x = %e\n',t,x);

endfunction

function xdot = f(x,t)

  a1=0.00875;
  a2=0.075;
  b1=7.5;
  b2=2.5;
  d1=0.0001;
  d2=0.0001;
  g=4*10^(-8);
  K1=5000;
  K2=2500;
  n=2;
  m=2;

  xdot = zeros(2,1);
  x = zeros(1,2);

  xdot(1) = a1+b1*x(1)^n/(K1^n+x(1)^n)-g*x(1)*x(2)-d1*x(1);
  xdot(2) = a2+b2*x(1)^m/(K2^m+x(1)^m)-d2*x(2);

endfunction

将其另存为 ODEs.m 并执行它。它不会绘制任何内容,但会为您提供一个输出,其中包含您提供的 t 范围的结果。