我正在尝试使用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
我们很高兴你们中的任何人都可以帮我解决这个问题。
答案 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 范围的结果。