Тема: MATLAB/Simulink
Показать сообщение отдельно
тёмаё
Я испытатель дубликатора
Аватар для тёмаё
Сообщения: 8,345
Регистрация: 05.01.2004
Старый пост, нажмите что бы добавить к себе блог 1 февраля 2013, 21:07
  #14 (ПС)
Всем привет надо запрограммировать Bungee Jump, тоесть прыжок с верёвкой.
Работаем с "ODE Solver".

естъ две ODE между которыми матлаб переключается. Тоесть 2 случая когда верёвка натянутая и не натянутая. (переключается на метке 50 метров)

вот functions (тут всё правильно)
верёвка не натянута
-
function dz = dgl1(t,z)

global m c h l g


x=z(1); %x
dx=z(2); %dx
Fl=z(2)+z(2)^2*sign(z(2));

ddx=-g-Fl/m; %ddx



dz=[dx;ddx];



% z=[z1;z2]=[x;dx]
% dz=[dx;ddx] = [dx; -g-Fl/m]
верёвка натянута
-
function dz = dgl2(t,z)

global m c h l g

x=z(1);
dx=z(2);




Fl=z(2)+z(2)^2*sign(z(2));

ddx=-g-Fl/m+c*(h-l-x)/m;

dz=[dx;ddx];
переключатель для первой function
-
function [q,isterminal,direction]=seilngesp(t,z)
global m c h l g
q=z(1)-l; % x<50
isterminal=1; % Integration abbrechen, wenn q durch 0
direction=-1; % Nur sinkende Nullstellen erkennen
переключатель для 2 function (верёвка натянута)
-
function [q,isterminal,direction]=seilgesp(t,z)
global m c h l g
q=z(1)-l; % x>=50
isterminal=1; % Integration abbrechen, wenn q durch 0
direction=1; % Nur sinkende Nullstellen erkennen
а вот теперь скрипт для решения. тут проблема в петле

-
% Initialisieren c=[10 25 35 45 55 70 100 200 300
% h=80m l=30m
clear;

global m c h l g
m=84; h=80; l=30; c=300; g=9.81;


tstart=0; tmax=120;
xstart=[0;0];



tges=[]; xges=[];
s=0; % Schleifenzähler

% Seil gespannt bei dgl1
% Seil nicht gespannt bei dgl2

options1=odeset('Events',@seilgesp,'Refine',1,'Max Step',2);
options2=odeset('Events',@seilngesp,'Refine',1,'Ma xStep',2);

% Berechnen in Schleife

tic
while s==0 || tges(end)<tmax
s=s+1;
[t1,x1]=ode45(@dgl1,[tstart tmax],xstart,options1);

в это месте проблема
% ПЕРЕХОД на вторую ODE как замутить??? Петля нужна вобще??

[t2,x2]=ode45(@dgl2,[t1(end) tmax],x1(end,: ),options2);

tstart=t2(end);
xstart=x2(end,: );


tges=[tges;t1;t2];
xges=[xges;x1;x2];
end
toc;

 
Фотографии:
(15.6 Кбайт / 164 просм.)
(18.8 Кбайт / 164 просм.)
 
offline
Ответить с цитированием