2013-04-15 30 views
1

我想模擬三個微分方程的系統。這是一個液滴模型,參數化爲弧長,sODE系統,具有微分初始條件的IVP

的公式爲:
DX/DS = COS(THETA)
DZ/DS = SIN(THETA)
(THETA)/ DS = 2 * B + C * Z-SIN(THETA)/ X

初始條件是x,z和theta在s = 0時都是0。爲了避免d(θ)/ ds上的奇異性,我還有條件:在s = 0,dθ/ ds = b。我已經寫了這個代碼:

[s,x]=ode23(@(s,x)drpivp(s,x,p),sspan,x0); 

%where p contains two parameters and x0 contains initial angle theta, x, z values. 
%droplet ODE function: 
function drpivp = drpivp(s,x,p); 
%x(1)=theta 
%x(2)=x 
%x(3)=z 
%b is curvature at apex 
%c is capillarity constant 
b=p(1); 
c=p(2); 
drpivp=[2/p(1)+p(2)*x(3)-sin(x(1))/x(2); cos(x(1)); sin(x(1))]; 

這產生了一個螺旋出來的解決方案。它創造了許多,而不是創建一個液滴配置文件。當然,在這裏我沒有正確初始化方程,因爲我不確定如何在s = 0時使用θ的不同方程。

所以問題是:我如何包含d(theta)/ ds = b的初始條件,而不是在s = 0時通常的?這可能使用matlab中的內置解算器嗎?

謝謝。

回答

1

有這樣做的幾種方法,最簡單的就是if語句簡單地添加到您的公式:

function drpivp = drpivp(s,x,p); 
%x(1)=theta 
%x(2)=x 
%x(3)=z 
%b is curvature at apex 
%c is capillarity constant 
b=p(1); 
c=p(2); 
if (s == 0) 
    drpivp=[b; cos(x(1)); sin(x(1))]; 
else 
    drpivp=[2/p(1)+p(2)*x(3)-sin(x(1))/x(2); cos(x(1)); sin(x(1))]; 
end 
+0

一種簡單,有效的解決方案!沒有想到頌歌解答者會接受 - 不知道爲什麼我認爲這是開始。謝謝! (你能簡單地描述一下其他方法嗎?) – Rstallard

+1

@Kud解決這個問題的另一種方法是將系統表達爲d2Theta/dt2,這意味着你將不得不擴大你的差分。 – Rasman