2016-03-15 97 views
0

我想解决两个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 

这将是我们很高兴你可以帮助我这个代码。

+1

在哪一行?编辑以包含整个错误消息。我假设'endfunction'后面的代码位于不同的文件中或粘贴到命令窗口中? – horchler

+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并执行它。它不绘制任何内容,但给出了一个输出结果,其中包含您提供的范围的结果。