Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Архив2 / курсач docx180 / Kursach(186).docx
Скачиваний:
48
Добавлен:
07.08.2013
Размер:
340.41 Кб
Скачать

Перетворення рівнянь:

Спочатку, для підготовки диференційних рівнянь до чисельного інтегрування, необхідно привести ці рівняння до нормальної форми Коші. Бажано подати також їх у безрозмірному вигляді.

Спочатку введемо позначення: y1 = φ; у2 =

Тоді початкове рівняння маятника можна подати у вигляді двох диференційних рівнянь 1-го порядку:

Порівнюючи одержану систему з загальною формою рівнянь Коші, можна зробити висновок, що

Саме обчислення цих двох функцій і повинно відбуватися у процедурі правих частин.

Вихідною змінною у ній буде параметр z=[z1 z2]

Вхідними - момент часу t та вектор-рядок у=[у1 у2]

Винесемо обчислення моментів зовнішніх дій у окрему обчислювану процедуру для того щоб зробити процедуру правих частин більш загальною, а також для більшої зручності, оскільки дозволяє скоротити кількість параметрів.

Згрупуємо разом обчислювання зовнішніх моментів сил, окрім моменту сил тяжіння. Для цього спочатку дещо перетворимо початкове рівняння, записуючи його у вигляді:

де крапка - позначення похідної за безрозмірним часом τ=ω0t

а через S(τ,φ,) позначено деяку задану функцію безрозмірного часу, кута повороту маятника та його безрозмірної швидкості

У нашому випадку ця функція набуває вигляду:

причому безрозмірні величини ζ і ν визначаються виразами:

ζ= та ν=

Схема алгоритму програми моделювання руху маятникового датчика кута у загальному вигляді:

Лістинг програми:

%FizMayatnik

k=menu('Що далі робити?','Закінчити роботу','Продовжити роботу');

if k==1,

while k==1

k=menu('Що далі робити?','Закінчити роботу','Продовжити роботу');

end

end

clear global

clear

%zastav

sprogram='Курсач.m';

sname='Al1n04ka';

KM1=[0 0 0 0 0 0]

MPFUN='MomFm1';

global KM1 MPFUN

tfinal=2*pi*5;

fi0=pi/180;

fit0=0.8;

%Діалогова зміна даних

k=1

while k<10

disp('')

disp('Зараз встановлено')

disp([sprintf('Початковий кут,град=%g',...

fi0*180/pi),...

sprintf('початкова швидкість=%g',fit0)]),...

disp(sprintf('Число періодів=%g',tfinal/2/pi))

KM1

k=menu('Що змінювати?',...)

sprintf('Відносний коеф.затухання=%g',KM1(1)),...

sprintf('Перезавантаження вертикаль=%g',KM1(2)),...

sprintf('Перезавантаження-горизонталь=%g',KM1(3)),...

sprintf('Відносна частота=%g',KM1(4)),...

sprintf('fфаза-вертикаль=%g',KM1(5)),...

sprintf('фаза-горизонталь=%g',KM1(6)),...

sprintf('Початковий кут,град=%g',fi0*180/pi),...

sprintf('Початкова швидкість=%g',fit0),...

sprintf('кіл.періодів=%g',tfinal/2/pi),...

'Нічого не змінювати.');

disp('')

if k<7,

KM1(k)=input(['сейчас KM1',num2str(k),sprintf('=%g',KM1(k)),...

'Введіть нове значення=']);

%fi0=fi0*180/pi),...

%j 'Введіть нове значення=');

elseif k==8, fit0=input([sprintf('Зараз fit0=%g',fit0),'Нове значення=']);

elseif k==9, tfinal=input([sprintf('Зараз кількість періодів=%g',tfinal/2/pi),'Нове значення=']);

tfinal=tfinal*2*pi;

end

end

%fizmatglav

%1, Підготовка початкових умов

t=0;

tf=tfinal;

y0=[fi0 fit0];

options=odeset('RelTol',1e-8,'AbsTol',[1e-10]);

%2.Організація циклу інтегрування

[t,y]=ode45('iks1',[0 tf], y0, options);

%3. Вивід графіків

subplot(2,1,2);

plot(t/2/pi,y(:,1)*180/pi),grid;

title('Відхилення від вертикалі','FontSize',16);

xlabel('Час в періодах малих власних коливань','Fontsize',14);

ylabel('Кут в градусах','FontSize',14);

subplot(2,4,1:2);

plot(y(:,1)*180/pi,y(:,2)),grid on;

title('Фазова траєкторія','FontSize',16);

xlabel('Кут в градусах','FontSize',14);

ylabel('Швидкість','FontSize',14);

subplot(2,4,3:4);

axis('off');

h1=text(0,1.1,'Моделювання руху фізичного маятника','FontSize',16,'FontWeight','Bold')

h1=text(0.15,1,'з рівняння','FontSize',14);

h1=text(0,0.9,'fi"+2*dz*fi`+[1+nmy*sin(nu*t+ey)]*sin(fi)=','FontSize',16);

h1=text(0.375,0.8,'=-nmx*sin(nu*t+ex)*cos(fi)','FontSize',16);

h1=text(0,0.7,'з таких значень параметрів:','FontSize',14);

h1=text(0.4,0.1,sprintf('dz=%g',KM1(1)),'FontSize',14);

h1=text(0,0.5,sprintf('nmy=%g',KM1(2)),'FontSize',14);

h1=text(0.7,0.5,sprintf('nmx=%g',KM1(3)),'FontSize',14);

h1=text(0,0.4,sprintf('ey=%g',KM1(5)),'FontSize',14);

h1=text(0.7,0.4,sprintf('ex=%g',KM1(6)),'FontSize',14);

h1=text(0.45,0.3,sprintf('nu=%g',fit0),'FontSize',14);

h1=text(0,0.2,'з початкових умов KM1(6)','FontSize',14);

h1=text(0,0.1,[sprintf('fi(0)=%g',fi0*180/pi),'градусів'],'FontSize',14);

h1=text(0.7,0.1,sprintf('fi''(0)=%g',KM1(4)),'FontSize',14);

function z=iks1(t,y)

global MPFUN

z(1)=y(2)

z(2)=-sin(y(1))+feval(MPFUN,t,y);z=z'

function m=MomFm1(t,y)

global KM1

m=-2*KM1(1)*y(2)-KM1(3)*sin(KM1(4)*t+KM1(6))...

*cos(y(1))-KM1(2)*sin(KM1(4)*t+KM1(5))*sin(y(1))

Соседние файлы в папке курсач docx180