1

我正在尝试对一个由三个微分方程组成的系统进行建模。这是一个液滴模型,参数化与弧长s 的关系。

方程为:
dx/ds=cos(theta)
dz/ds=sin(theta)
(theta)/ds=2*b+c*z-sin(theta)/x

初始条件是 x、z 和 theta 在 s=0 时都为 0。为了避免 d(theta)/ds 上的奇异性,我还有一个条件是,在s=0处,d(theta)/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 处为 theta 使用不同的方程。

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

谢谢。

4

1 回答 1

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
于 2013-04-15T22:53:19.223 回答