我有一个 ODE 求解器运行良好且流畅,但我需要将所有内容绘制在一个图中。连接图(1)+(3)和图(2)+(4),我必须设置开始和停止条件,但这对我不起作用,我在死胡同。我正在尝试通过 x_m 设置结束条件,但没有结果。
options = odeset('Events',@events);
[t,y] = ode45(@ph1,[0,w_max],[0,0], options);
figure(1),plot(t,y(:,1));
x_n = y(:,1);
v_n = y(:,2);
x_m = x_n(end);
v_m = v_n(end);
q = max (t);
d_v1 =diff(y(:,2));
%d_t1 = diff(t);
%a_c1 = d_v1./d_t1;
t_c1 = t(1:end-1);
%t_h1 = d_t1./2;
figure (2)
plot((t_c1),d_v1,'r')
set(gca,'FontName','Times New Roman CE')
title('Rychlost')
xlabel('\it t\rm [s]')
ylabel('\it v_n\rm [m*s^{-1}]')
hold on
[t,y] = ode45(@ph2,[0,w_max],[0,0], options);
figure(3),plot(t,(y(:,1)));
d_v =diff(y(:,2));
%d_t = diff(t);
%a_c = d_v./d_t;
t_c = t(1:end-1);
%t_h = d_t./2;
figure(4),plot((t_c),(d_v), 'g' );
% d_v2 =diff(d_v);
% d_t2 = diff(d_t);
% a_c2 = d_v2./(d_t2.*d_t2);
% t_c2 = t(1:end-2);
% figure(5),plot((t_c2),a_c2 , 'r');
function [value,isterminal,direction] = events(t,y)
global ch
value = y(1) - ch;
isterminal = 1;
direction = 0;
function dx = ph1(tt,x)
global F1 c m_c Ff p w s ln f_t sig dstr Ren pn Fex Fzmax xz xn l Fz m_n
Fpp = F1 + c*x(1);
if pn<0
pn=abs(pn);
end
if x(1)<ln
pn=spline(w,p,tt)-((2*sig)/dstr*Ren);
Fex=3.1416.*f_t.*pn.*(ln-x(1));
end
if x(1)<42e-5
Fz = Fzmax*(1-(1/xz)*(x(1)+l));
end
if x(1)>44e-3
m_c=m_c-m_n;
end
dx=[x(2);((spline(w,p,tt)*s)-Fpp-Ff-Fex-Fz)./m_c];
function dx=ph2(tt,x)
global Fv Ft m_z g f Fzp alfa m_nbp c
Ft=m_z*g*f;
Fv = 2*f*(Fzp/cos(alfa));
if x(1)>0.44
m_z=m_z+m_nbp
end
dx = [x(2);((x(1)*c)-Ft-Fv)/m_z];