2013-11-01 42 views
1

我有以下ODE:求解一個ODE給出功能時作爲離散值-matlab-

x_dot = 3*x.^0.5-2*x.^1.5 % (Equation 1) 

我使用ode45來解決它。我的解作爲dim(k x 1)的向量給出(通常k = 41,它由tspan給出)。另一方面,我做了一個近似於(1)模型的模型,但爲了比較第二個模型的準確性,我想通過ode45來解決它(解決第二個ODE) 。我的問題是,這第二賦被給定的離散:

x_dot = f(x) % (Equation 2) 

f是離散的,在不是這樣的連續函數(1)。我有f值是:

0.5644 
0.6473 
0.7258 
0.7999 
0.8697 
0.9353 
0.9967 
1.0540 
1.1072 
1.1564 
1.2016 
1.2429 
1.2803 
1.3138 
1.3435 
1.3695 
1.3917 
1.4102 
1.4250 
1.4362 
1.4438 
1.4477 
1.4482 
1.4450 
1.4384 
1.4283 
1.4147 
1.3977 
1.3773 
1.3535 
1.3263 
1.2957 
1.2618 
1.2246 
1.1841 
1.1403 
1.0932 
1.0429 
0.9893 
0.9325 
0.8725 

我現在想的是解決使用ode45本次頌。希望我會得到與(1)中非常相似的解決方案。我該如何解決申請ode45的離散頌歌?是否可以使用ode45?否則,我可以使用Runge-Kutta,但我想比較兩種方法,這意味着我必須以相同的方式解決它們。

回答

3

您可以使用interp1創建插值查找表功能:

fx = [0.5644 0.6473 0.7258 0.7999 0.8697 0.9353 0.9967 1.0540 1.1072 1.1564 ... 
     1.2016 1.2429 1.2803 1.3138 1.3435 1.3695 1.3917 1.4102 1.4250 1.4362 ... 
     1.4438 1.4477 1.4482 1.4450 1.4384 1.4283 1.4147 1.3977 1.3773 1.3535 ... 
     1.3263 1.2957 1.2618 1.2246 1.1841 1.1403 1.0932 1.0429 0.9893 0.9325 0.8725]; 
x = 0:0.25:10 
f = @(xq)interp1(x,fx,xq); 

那麼你應該能夠使用ode45正常:

tspan = [0 1]; 
x0 = 2; 
xout = ode45(@(t,x)f(x),tspan,x0); 

請注意,您沒有指定值是什麼x你的功能(fx這裏)被評估過,所以我選擇了零到十。您當然也不希望從命令窗口使用複製粘貼的值,因爲它們只有四位小數的精度。此外,請注意,由於ode45需要輸入t,然後x,我使用f創建了一個單獨的匿名函數,但如果需要,可以使用未使用的t輸入創建f

+0

嗨horchler,非常感謝你的回答!我會試一下! –

+0

你好再次horchler。你的建議完美的作品!我近似的解決方案是有希望的!我的主管會很高興。再次感謝你! –

+0

我現在的問題是: 對於我的x值(對於fx函數)我使用的是相同的域x(t)has,x(t)是我的第一個方程(1的解)(ode45之後)。 - )。現在我已經改變了tspan和x0,看看我的模型如何近似解決這個第一個ODE的問題,並且對於某些tspan和x0我有很好的結果,但是對於其他我從interp1中獲得NAN。我知道x(t)的域隨着tspan和x0的變化而相應變化。我將這些更改應用於我的x值,但我仍然在爲interp1獲得NAN。你明白我的問題@horchler? 在此先感謝! –