ODE 솔버가 훌륭하고 부드럽게 작동하지만 모든 것을 한자리에 플롯해야합니다. 그림 (1) + (3)과 그림 (2) + (4)를 연결하면 시작 및 정지 조건을 설정해야하지만, 그것은 나를 위해 작동하지 않습니다. 나는 결과없이 x_m에 의해 끝 조건을 설정하려고 시도하고있다. 나는 내가 당신의 문제를 복제하지 못할 같은 대답을 잘 모르겠어요 (코드 나던 실행 ...) 그리고 어떤 이유로 난 아직 말씀 드릴 수 없습니다 :ODE 함수의 연속 플롯
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];
연결하여 어떤 의미입니까? – HebeleHododo
@HebeleHododo 코멘트와 비슷하게 모든 것을 단일 플롯에서 그리거나 4 개의 서브 플롯을 원하십니까? –
연속 기능. ph1이 끝나면 한 플롯에서 ph2가 시작됩니다. – user2401142