Помощью решателей ode15,ode45

m-фа M-file f1.m:

function F1=pli(t,y)

mu=0.018; //динамическая вязкость воздуха

p1=800; //плотность шарика

p2=1.29; //плотность воздуха

c=0.4; //лобовое сопротивление шарика

g=9.8;

k=1000; //число разбиений

r=0.005; //радиус шарика

F1=[-y(2);9.8-9*mu/(r*r*p1*2)*y(2)-3*c*y(2)*y(2)*p2/(8*r*p1)];

m-файл для решения ДУ с помощью программы на языке программы MatLab M-file Sambo.m:

mu=0.018; //динамическая вязкость воздуха

p1=800; //плотность шарика

p2=1.29; //плотность воздуха

c=0.4; //коэффициент лобового сопротивления для шарика

g=9.8; //ускорение свободного падения

k=1000; //число разбиений

y(2)=0;y(1)=10;//начальные условия

x0=0;xk=5;//границы изменения времени

dx=(xk-x0)/k; //шаг интегрирования

r=0.005; //радиус шарика

x=x0;

subplot(2,1,1); //деление формы на 2 граф. окна

hold on; //обеспечивает продолжение вывода графиков в окно

for i=0:k-1

if y(1)<0 break,end;йл для решения ДУ с помощью решетелей

// вычисление коэффициентов для метода Рунге - Кутта

k11=-dx*y(2);k21=dx*(9.8-3*mu/(r*r*p1*2)-c*pi*y(2)*y(2)*p2/(8*r*p1));

k12=-dx*(y(2)+k21/2);

k22=dx*(9.8-3*mu/(r*r*p1*2)-c*pi*(y(2)+k21/2)*(y(2)+k21/2)*p2/(8*r*p1)); k13=-dx*(y(2)+k22/2); k23=dx*(9.8-3*mu/(r*r*p1*2)-c*pi*(y(2)+k22/2)*(y(2)+k22/2)*p2/(8*r*p1));

k14=-dx*(y(2)+k23);k24=dx*(9.8-3*mu/(r*r*p1*2)-c*pi*(y(2)+k23)

*(y(2)+k23)*p2/(8*r*p1)); //расчёт разности

d1=(k11+2*k12+2*k13+k14)/6; d2=(k21+2*k22+2*k23+k24)/6;

//вычисление новых значений у1 и у2

y(11)=y(1)+d1; y(21)=y(2)+d2;

plot([x x+dx],[y(1) y(11)],’r’);plot([x x+dx],[y(2) y(21)],’b’),

x=x+dx; //новое значение х

y(1)=y(11); y(2)=y(21);

end;

grid on; //добавляет сетку к текущему графику

title(“Kpuvue v(t) u h(t) npu r = 5mm”); //установка на

графике титульной надписи

legend(“vucota”,’ckopoct’); //добавление к текущему графику xlabel('t');ylabel('v,h');

plot([0 5],[0 0],'k');axis tight;hold off; y(2)=0;y(1)=10;x0=0;xk=10;dx=(xk-x0)/k;

r0=0.002;rk=0.005;dr=(rk-r0)/3;

n=2;x=x0;r=r0;

subplot(2,1,2);hold on;

while r<=rk

for i=0:k-1

if y(1)<0 break,end;

k11=-dx*y(2);

k21=dx*(9.8-3*mu/(r*r*p1*2)-c*pi*y(2)*y(2)*p2/(8*r*p1));

k12=-dx*(y(2)+k21/2);

k22=dx*(9.8-3*mu/(r*r*p1*2)-c*pi*(y(2)+k21/2)*(y(2)+k21/2)*p2/(8*r*p1)); k13=-dx*(y(2)+k22/2);

k23=dx*(9.8-3*mu/(r*r*p1*2)-c*pi*(y(2)+k22/2)*(y(2)+k22/2)*p2/(8*r*p1)); k14=-dx*(y(2)+k23);

k24=dx*(9.8-3*mu/(r*r*p1*2)-c*pi*(y(2)+k23)*(y(2)+k23)*p2/(8*r*p1));

d1=(k11+2*k12+2*k13+k14)/6; d2=(k21+2*k22+2*k23+k24)/6;

y(11)=y(1)+d1; y(21)=y(2)+d2;

plot([x x+dx],[y(1) y(11)],'r'); plot([x x+dx],[y(2) y(21)],'b');

x=x+dx; y(1)=y(11); y(2)=y(21); end;

x=x0; y(2)=0; y(1)=10;

r=r+dr; end;grid on;

title('Cemeuctvo v(t) u h(t): 2mm < r < 5mm');

legend('vucota','ckopoct');xlabel('t');ylabel('v,h');

plot([0 5],[0 0],'k');axis tight;hold off;

Графики зависимостей v(t),h(t) при r=5 mm и

семейство графиков для 2mm<R<5mm

Simulink


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: