我已经反复检查该方程无误 但是在ode45求解这个微分方程组的时候解出来的值全是NAN,(以下是流程图)论文里说龙格库塔能解啊。

clear all
%输入参数
gam = 0.0728;
rou = 1000;
g = 9.8;
b = 0.006;
a = (gam/(rou*g))^(1/2);
theta = 90*pi/180;
V_0 = 25 *10^(-6);
p = 2*a/b;
c = 10^(-11);
D = 2*((3*V_0/(4*pi))^(1/3));
Bo =(rou*g*D^2)/gam;
%在theta小于135°以及Bo大于1的时候求解
if theta<135*pi/180&&Bo>1
%这个是要求解的方程
dxdt = @(t,y) y(1) * cos(t) / (y(1)*y(2) + p*y(1) - sin(t));
dzdt = @(t,y) y(2) * sin(t) / (y(1)*y(2) + p*y(1) - sin(t));
tspan = [0 theta];
x0 = 0;
z0 = 0;
%设置收敛条件 用V_final的一个范围,或者b已经降到了0下
flag = true;
while flag == true
[t, y] = ode45(@(t, y) [dxdt(t, y); dzdt(t, y)], [0, theta], [x0; z0]);
final_state = y(end,:);
final_time = t(end);
V_final = abs(pi*final_state(1)*(final_state(1) * final_state(2) + p * final_state(1) - 2 * sin(final_time)));
if (V_final > (0.9*V_0)/(a^3) && V_final < (1.1*V_0)/(a^3))||b<0
flag = false;
else
%如果这样的b无法满足上面的收敛条件,那么就微调b
b = b -0.00001;
flag = true;
end
end
%输出
X = a*y(:,1);
Y = a*final_state(2) -a*y(:,2);
plot (X,Y)
else
%下面应该这些没问题
R = (3*V_0/pi*((cos(theta)^3)-3*cos(theta)+2))^(1/3);
center = [0,R];
alpha = linspace(0, theta, 100);
X= a* R * sin(alpha) ;
Y = a*center(2) -a*R * cos(alpha);
axis equal;
plot (X,Y)
end
但是一旦给把初始值设成很小的量,就能解出结果,但是结果显然不正确(谁家水滴是分子量级的高度啊)愁死。。
以防万一我把方程贴上
