ODE系统,具有差分初始条件的IVP

时间:2013-04-15 19:49:39

标签: matlab ode

我正在尝试建模三个微分方程组。这是一个液滴模型,参数化为弧长, s

方程式为:
    DX / DS = COS(THETA)
    DZ / DS = SIN(THETA)
    (θ)/ ds = 2 * b + c * z-sin(θ)/ x

初始条件是在s = 0时x,z和θ都为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))];

这产生了一个螺旋式的解决方案。它创建了许多,而不是创建一个Droplet配置文件。当然,这里我没有正确地初始化方程式,因为我不确定如何在s = 0时使用不同的方程式。

所以问题是:如何在s = 0时包含d(theta)/ ds = b而不是通常的初始条件?这可以使用matlab上的内置求解器吗?

感谢。

1 个答案:

答案 0 :(得分: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