使用八度解决ODE系统
问题描述:
我想解决两个ODE使用八度的系统,特别是函数lsode。使用八度解决ODE系统
的代码如下:
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
这将是我们很高兴你可以帮助我这个代码。
答
您有两个错误。一,你没有用正确的名字保存源代码。二,变量“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并执行它。它不绘制任何内容,但给出了一个输出结果,其中包含您提供的范围的结果。
在哪一行?编辑以包含整个错误消息。我假设'endfunction'后面的代码位于不同的文件中或粘贴到命令窗口中? – horchler
整个代码都在同一个文件中...这就是问题所在。谢谢,现在它工作! –