我正在尝试建模三个微分方程组。这是一个液滴模型,参数化为弧长, 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上的内置求解器吗?
感谢。
答案 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