2016-03-15 94 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並執行它。它不繪製任何內容,但給出了一個輸出結果,其中包含您提供的範圍的結果。