МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ «ЛЬВІВСЬКА ПОЛІТЕХНІКА»
ІКТА
кафедра захисту інформації
КУРСОВА РОБОТА
з курсу:
«Комп’ютерні методи дослідження інформаційних процесів і систем»
на тему:
«АВТОМАТИЧНИЙ ПОТЕНЦІОМЕТР З ДИФЕРЕНЦІЮЮЧИМ КОНТУРОМ»
Варіант№7
Зміст
Рисунок, схема, рівняння.
Короткі відомості про методи.
Перетворення рівнянь, зведення рівнянь до нормальної форми.
Лістинги програми
Результати.
Графік.
Список літератури.
Рисунок, схема, рівняння
АВТОМАТИЧНИЙ ПОТЕНЦІОМЕТР З ДИФЕРЕНЦІЮЮЧИМ КОНТУРОМ
Рівняння ланок :
вимірювальна схема
диференціюючий контур
підсилювач
двигун
редуктор
1. Звести систему алгебро-диференціальних рівнянь до системи трьох диференціальних рівнянь першого порядку, представити її у нормальній формі та розв’язати цю систему вказаними методами. Початкові умови - =1 радіан, решта початкових умов – нульові. Числові значення сталих параметрів, заданих в таблиці, слід зобразити з допомогою одиниць системи СІ. Методи: Ейлера/Рунге-Кутта.
2. Побудувати графік зміни величини
Параметри
7
і - пер. число
30
(m (рад)
5
Us (мв)
200
Cu (г.см.в)
8
C( (г.см.сек/рад)
2
Id (г.см.сек2)
0,02
Іn (г.см.сек2)
2
к
0,2
Т (сек)
0,03
Короткі теоретичні відомості
Метод Ейлера
Метод Ейлера є найпростішим методом розв’язування задачі Коші. Він дозволяє інтегрувати ДР першого порядку виду.
(4)
Метод Ейлера базується на розкладі функції в ряд Тейлора в околі точки
(5)
Якщо мале, то, знехтувавши членам розкладу, що містять в собі і т.д. отримаємо
(6)
Похідну знаходимо з рівняння (4), підставивши в нього початкову умову. Таким чином можна знайти наближене значення залежної змінної при малому зміщенні від початкової точки. Цей процес можна продовжувати, використовуючи співвідношення.
,
роблячи як завгодно багато кроків.
Похибка методу має порядок , оскільки відкинуті члени, що містять в другій і вище степенях.
Недолік методу Ейлера - нагромадження похибок, а також збільшення об’ємів обчислень при виборі малого кроку з метою забезпечення заданої точності.
В методі Ейлера на всьому інтервалі тангенс кута нахилу дотичної приймається незмінним і рівним . Очевидно, що це призводить до похибки, оскільки кути нахилу дотичної в точках та різні. Точність методу можна суттєво підвищити, якщо покращити апроксимацію похідної.
Метод Рунге-Кутта з автоматичною зміною кроку
Після обчислення з кроком всі обчислення виконуються повторно з кроком . Після цього порівнюються результати, отримані в точці хn+1 з кроком і . Якщо модуль різниці менший , то обчислення продовжуються з кроком , в іншому випадку крок зменшують. Якщо нерівність дуже сильна, то крок збільшують.
Маємо
- значення незалежної змінної в точці
- значення функції в точці
- значення функції в точці , обчислене з кроком
- значення функції в точці , обчислене з кроком
- значення функції , обчислене з кроком
1) Якщо
обчислення повторюються з кроком і т.д., доки не виконається умова .
2) Якщо виконується ця умова, то можливі два варіанти, в залежності від значення K, де K – ознака поділу кроку.
Початкове значенняі залишається таким після першого поділу кроку на два. Надалі, якщо крок ділиться, то K приймає значення одиниці.
а) Якщо , то навіть коли виконалась умова , крок не змінюється, тобто лишається тим самим (обчислення далі проводяться з попереднім кроком).
б) Якщо і виконалась умова , тоді .
В обох випадках а) і б) результат виводиться на друк.
Перетворення рівнянь, зведення рівнянь до нормальної форми.
1)
2)
3)
Лістинги програм
Ейлера з автоматичною зміною кроку
program ME_automat;
const n=3;a=0;b=19;
type vector=array[1..n] of real;
var i,kk,j:integer; ks:longint;
x, x0 , St, Ct, dS, dC, h, hh,eps:real;
II,TM,UP,CU,CW,Jd,Jn,K,T,JJ,KU:real;
f,y,y0,y1,y2:vector; ff:text;
procedure dy; begin
f [1] :=UP/(TM*T)*(1-Y[2])-Y[1]/(K*T)-UP*Y[3]/(TM*II);
f [2] :=Y[3]/II;
f [3] :=(CU*KU*Y[1]-CW*Y[3])/JJ; end;
procedure rkm;
var kl,k2,k3,k4,z:vector;
begin
dy;
for i:=1 to n do
begin
kl[i] :=h*f [i];
z[i] :=y[i] ;
y [i] :=z [i]+kl [i];
end;
x:=x+h;
end;
procedure aut_step(var y,yO,yl,y2,f:vector);
label 1,2,6;
begin
for i:=1 to n do yO[i]:=y[i];
kk:=0;x0:=x;hh:=h;
rkm;
for i:=1 to n do begin
yl [i] :=y [i] ; y [i] :=y0 [i] ; end;
{writeln('1•,• h=1,h);
read (j);}
6: x:=x0;h:=hh/2;
rkm;
for i:=1 to n do y2[i]:=y[i];
rkm;
for i:=1 to n do if abs(y[i]-yl[i])>eps then goto 1;
for i:=1 to n do yl [i] :=y[i] ; goto 2; 1: hh:=h; kk:=1;
for i:=1 to n do begin
y[i]:=y0[i];
y1[i]:=y2 [i] ;
end;
{ writeln('2',' h=',h);
read (j); }
goto 6;
2: h:=hh;
if kk=0 then h:=2*hh; end;
BEGIN
assign (ff,'D:3.txt');
rewrite(ff) ;
writeln(ff,' ');
writeln(' rk4');
y[1]:=0;y[2]:=0;y[3]:=0;x:=a;h:=1; eps:=1e-3;
II:=30;TM:=5;UP:=200e-5;CU:=8e-5;CW:=2e-5;JD:=0.02e-5;JN:=2e-5;K:=0.2;
T:=0.03;KU:=100000; JJ:=Jd+Jn/(II*II);
repeat ks:=ks+1;
aut_step(y,y0,y1,y2,f);
if ks=10 then begin
writeln (ff,' x=',x,' Q_out=',y[2]);
ks:=0 ;
end;
until x>b;
close(ff);
end.
Рунге-Кутта з автоматичною зміною кроку
program r_k_m;
const n=3; a=0; b=19;
type vector=array[1..n] of real;
var i,kk,j:integer;
ks:longint;
x,x0,St,Ct,dS,dC,h,hh,eps:real;
II,TM,UP,CU,CW,Jd,Jn,K,T,JJ,KU:real;
f,y,y0,y1,y2:vector;
ff:text;
procedure dy;
begin
f[1]:= UP/(TM*T)*(1-Y[2])-Y[1]/(K*T)-UP*Y[3]/(TM*II);
f[2]:= Y[3]/II;
f[3]:= (CU*KU*Y[1]-CW*y[3])/JJ;
end;
procedure rkm;
var k1,k2,k3,k4,z:vector;
begin
dy;
for i:=1 to n do
begin
k1[i]:=h*f[i];
z[i]:=y[i];
y[i]:=z[i]+k1[i]/2;
end;
x:=x+h/2;
for i:=1 to n do
begin
k2[i]:=h*f[i];
y[i]:=z[i]+k1[i]/2;
end;
dy;
for i:=1 to n do
begin
k3[i]:=h*f[i];
y[i]:=z[i]+k3[i];
end;
x:=x+h/2;
dy;
for i:=1 to n do
begin
k4[i]:=h*f[i];
y[i]:=z[i]+(k1[1]+2*k2[i]+2*k3[i]+k4[i])/6;
{writeln(' y[1]=', ' h=',h);
read(j); }
end;
end;
procedure aut_step(var y,y0,y1,y2,f:vector);
label 1,2,6;
begin
for i:=1 to n do y0 [i]:=y[i];
kk:=0;x0:=x; hh:=h;
rkm;
for i:=1 to n do
begin
y1[i]:=y[i];
y[i]:=y0[i];
end;
{writeln('1',' h=', h);
read (j); }
6: x:=x0; h:=hh/2;
rkm;
for i:=1 to n do y2[i]:=y[i];
rkm;
for i:=1 to n do if abs (y[i]-y1[i])>eps then goto 1;
for i:=1 to n do y1[i]:=y[i];
goto 2;
1: hh:=h;
kk:=1;
for i:=1 to n do
begin
y[i]:=y0[i];
y1[i]:=y2[i];
end;
{ writeln('2',' h=', h);
read(j); }
goto 6;
2: h:=hh;
if kk=0 then h:=2*hh;
end;
BEGIN
assign(ff, 'D:2.txt');
rewrite(ff);
writeln(ff, ' ');
writeln(' rk4');
y[1]:=0; y[2]:=0; y[3]:=0; x:=a; h:=1; eps:=1e-3;
II:=30; TM:=5;UP:=200e-5;CU:=8e-5; CW:=2e-5; JD:=0.02e-5;
JN:=2e-5; K:=0.2; T:=0.03;KU:=50000; JJ:=Jd+Jn/(II*II);
repeat
ks:=ks+1;
aut_step(y,y0,y1,y2,f);
if ks=10 then
begin
writeln (ff,' x=',x,' Q_out=', y[2]);
ks:=0;
end;
until x>b;
close(ff);
end.
Результати
Ейлера з автоматичною зміною кроку
x= 6.1035156250E-04 Q_out= 5.0148072744E-07
x= 1.2207031250E-03 Q_out= 4.1809861081E-06
x= 1.8310546875E-03 Q_out= 1.3935503131E-05
x= 2.6855468750E-03 Q_out= 4.2148540246E-05
x= 3.9062500000E-03 Q_out= 1.2132599071E-04
x= 5.1269531250E-03 Q_out= 2.5649255701E-04
x= 6.9580078125E-03 Q_out= 5.7758944264E-04
x= 1.0375976563E-02 Q_out= 1.5777820799E-03
x= 1.2817382813E-02 Q_out= 2.6213567125E-03
x= 1.5258789063E-02 Q_out= 3.9085076884E-03
x= 1.7700195313E-02 Q_out= 5.4098144777E-03
x= 2.0141601563E-02 Q_out= 7.0946303608E-03
x= 2.2583007813E-02 Q_out= 8.9337350921E-03
x= 2.5024414063E-02 Q_out= 1.0900651877E-02
x= 2.7465820313E-02 Q_out= 1.2972163158E-02
x= 2.9907226563E-02 Q_out= 1.5128364423E-02
x= 3.2348632813E-02 Q_out= 1.7352468139E-02
x= 3.4790039063E-02 Q_out= 1.9630487832E-02
x= 3.7231445313E-02 Q_out= 2.1950879704E-02
x= 4.1625976563E-02 Q_out= 2.6204490297E-02
x= 4.6508789063E-02 Q_out= 3.1007443230E-02
x= 5.1391601563E-02 Q_out= 3.5854140095E-02
x= 5.8715820313E-02 Q_out= 4.3153932422E-02
x= 6.8481445313E-02 Q_out= 5.2874282411E-02
x= 9.3872070313E-02 Q_out= 7.7817780640E-02
x= 1.7980957031E-01 Q_out= 1.5770398629E-01
x= 2.5793457031E-01 Q_out= 2.2428471892E-01
x= 3.3605957031E-01 Q_out= 2.8560246342E-01
x= 4.1418457031E-01 Q_out= 3.4207324167E-01
x= 4.9230957031E-01 Q_out= 3.9408019042E-01
x= 5.7043457031E-01 Q_out= 4.4197616073E-01
x= 6.4855957031E-01 Q_out= 4.8608611194E-01
x= 7.2668457031E-01 Q_out= 5.2670931643E-01
x= 8.6730957031E-01 Q_out= 5.9202142598E-01
x= 1.0235595703E+00 Q_out= 6.5408873527E-01
x= 1.1798095703E+00 Q_out= 7.0671351222E-01
x= 1.3360595703E+00 Q_out= 7.5133228465E-01
x= 1.4923095703E+00 Q_out= 7.8916303602E-01
x= 1.6485595703E+00 Q_out= 8.2123845343E-01
x= 1.8048095703E+00 Q_out= 8.4843411738E-01
x= 1.9610595703E+00 Q_out= 8.7149240307E-01
x= 2.1641845703E+00 Q_out= 8.9634853257E-01
x= 2.4766845703E+00 Q_out= 9.2558956990E-01
x= 2.7579345703E+00 Q_out= 9.4477369668E-01
x= 3.0391845703E+00 Q_out= 9.5901186679E-01
x= 3.3204345703E+00 Q_out= 9.6957922070E-01
x= 3.6173095703E+00 Q_out= 9.7780410472E-01
x= 3.9454345703E+00 Q_out= 9.8434191599E-01
x= 4.2266845703E+00 Q_out= 9.8838370972E-01
x= 4.5704345703E+00 Q_out= 9.9194047409E-01
x= 4.8829345703E+00 Q_out= 9.9421904754E-01
x= 5.1641845703E+00 Q_out= 9.9571127800E-01
x= 5.5079345703E+00 Q_out= 9.9702441173E-01
x= 5.8204345703E+00 Q_out= 9.9786567534E-01
x= 6.1641845703E+00 Q_out= 9.9851981106E-01
x= 6.4766845703E+00 Q_out= 9.9893828522E-01
x= 6.7891845703E+00 Q_out= 9.9923844731E-01
x= 7.1329345703E+00 Q_out= 9.9947185180E-01
x= 7.4766845703E+00 Q_out= 9.9963352351E-01
x= 7.8204345703E+00 Q_out= 9.9974582365E-01
x= 8.1329345703E+00 Q_out= 9.9981771048E-01
x= 8.4454345703E+00 Q_out= 9.9986931946E-01
x= 8.7891845703E+00 Q_out= 9.9990937062E-01
x= 9.1016845703E+00 Q_out= 9.9993499348E-01
x= 9.4454345703E+00 Q_out= 9.9995491692E-01
x= 9.7969970703E+00 Q_out= 9.9996897720E-01
x= 1.0132934570E+01 Q_out= 9.9997827809E-01
x= 1.0476684570E+01 Q_out= 9.9998491730E-01
x= 1.0789184570E+01 Q_out= 9.9998921417E-01
x= 1.1132934570E+01 Q_out= 9.9999251705E-01
x= 1.1476684570E+01 Q_out= 9.9999480725E-01
x= 1.1789184570E+01 Q_out= 9.9999627988E-01
x= 1.2101684570E+01 Q_out= 9.9999733234E-01
x= 1.2461059570E+01 Q_out= 9.9999817459E-01
x= 1.2804809570E+01 Q_out= 9.9999873094E-01
x= 1.3132934570E+01 Q_out= 9.9999906663E-01
x= 1.3476684570E+01 Q_out= 9.9999933324E-01
x= 1.3789184570E+01 Q_out= 9.9999954942E-01
x= 1.4101684570E+01 Q_out= 9.9999968164E-01
x= 1.4445434570E+01 Q_out= 9.9999977873E-01
x= 1.4757934570E+01 Q_out= 9.9999984197E-01
x= 1.5101684570E+01 Q_out= 9.9999989032E-01
x= 1.5453247070E+01 Q_out= 9.9999990688E-01
x= 1.5789184570E+01 Q_out= 9.9999990638E-01
x= 1.6132934570E+01 Q_out= 9.9999991683E-01
x= 1.6445434570E+01 Q_out= 9.9999996749E-01
x= 1.6789184570E+01 Q_out= 9.9999997463E-01
x= 1.7132934570E+01 Q_out= 9.9999997920E-01
x= 1.7445434570E+01 Q_out= 9.9999998965E-01
x= 1.7757934570E+01 Q_out= 9.9999999331E-01
x= 1.8117309570E+01 Q_out= 9.9999998860E-01
x= 1.8461059570E+01 Q_out= 9.9999998899E-01
x= 1.8789184570E+01 Q_out= 9.9999995410E-01
Рунге-Кутта з автоматичною зміною кроку
x= 2.4414062500E-03 Q_out= 1.5995106556E-05
x= 4.8828125000E-03 Q_out= 8.8179745353E-05
x= 9.7656250000E-03 Q_out= 5.0832625053E-04
x= 2.0019531250E-02 Q_out= 2.6322814393E-03
x= 4.1503906250E-02 Q_out= 1.0259089955E-02
x= 7.6660156250E-02 Q_out= 2.5080549491E-02
x= 1.5869140625E-01 Q_out= 5.9702264241E-02
x= 2.3681640625E-01 Q_out= 9.1558131315E-02
x= 3.1494140625E-01 Q_out= 1.2233482403E-01
x= 3.9306640625E-01 Q_out= 1.5206884717E-01
x= 4.7119140625E-01 Q_out= 1.8079552474E-01
x= 5.4931640625E-01 Q_out= 2.0854898413E-01
x= 6.2744140625E-01 Q_out= 2.3536219658E-01
x= 7.0556640625E-01 Q_out= 2.6126701628E-01
x= 7.8369140625E-01 Q_out= 2.8629421827E-01
x= 8.6181640625E-01 Q_out= 3.1047353495E-01
x= 9.3994140625E-01 Q_out= 3.3383369145E-01
x= 1.0180664063E+00 Q_out= 3.5640243974E-01
x= 1.0961914063E+00 Q_out= 3.7820659157E-01
x= 1.1743164063E+00 Q_out= 3.9927205035E-01
x= 1.2524414063E+00 Q_out= 4.1962384196E-01
x= 1.3305664063E+00 Q_out= 4.3928614438E-01
x= 1.4086914063E+00 Q_out= 4.5828231651E-01
x= 1.4868164063E+00 Q_out= 4.7663492589E-01
x= 1.5649414063E+00 Q_out= 4.9436577548E-01
x= 1.6430664063E+00 Q_out= 5.1149592960E-01
x= 1.7211914063E+00 Q_out= 5.2804573895E-01
x= 1.8227539063E+00 Q_out= 5.4872566255E-01
x= 1.9321289063E+00 Q_out= 5.6998422257E-01
x= 2.0336914063E+00 Q_out= 5.8882646097E-01
x= 2.1352539063E+00 Q_out= 6.0684306201E-01
x= 2.2446289063E+00 Q_out= 6.2536383675E-01
x= 2.3461914063E+00 Q_out= 6.4177947607E-01
x= 2.4477539063E+00 Q_out= 6.5747580779E-01
x= 2.5571289063E+00 Q_out= 6.7361138316E-01
x= 2.7133789063E+00 Q_out= 6.9535308504E-01
x= 2.8696289063E+00 Q_out= 7.1564648728E-01
x= 3.0258789063E+00 Q_out= 7.3458808795E-01
x= 3.1821289063E+00 Q_out= 7.5226793444E-01
x= 3.3383789063E+00 Q_out= 7.6877007579E-01
x= 3.4946289063E+00 Q_out= 7.8417296231E-01
x= 3.6508789063E+00 Q_out= 7.9854981851E-01
x= 3.8071289063E+00 Q_out= 8.1196899121E-01
x= 3.9633789063E+00 Q_out= 8.2449427444E-01
x= 4.1196289063E+00 Q_out= 8.3618521273E-01
x= 4.2758789063E+00 Q_out= 8.4709738419E-01
x= 4.4321289063E+00 Q_out= 8.5728266470E-01
x= 4.5883789063E+00 Q_out= 8.6678947454E-01
x= 4.7446289063E+00 Q_out= 8.7566300860E-01
x= 4.9008789063E+00 Q_out= 8.8394545117E-01
x= 5.0571289063E+00 Q_out= 8.9167617656E-01
x= 5.2133789063E+00 Q_out= 8.9889193623E-01
x= 5.3696289063E+00 Q_out= 9.0562703351E-01
x= 5.5258789063E+00 Q_out= 9.1191348669E-01
x= 5.6821289063E+00 Q_out= 9.1778118125E-01
x= 5.8383789063E+00 Q_out= 9.2325801190E-01
x= 5.9946289063E+00 Q_out= 9.2837001519E-01
x= 6.1508789063E+00 Q_out= 9.3314149333E-01
x= 6.3071289063E+00 Q_out= 9.3759512966E-01
x= 6.4633789063E+00 Q_out= 9.4175209653E-01
x= 6.6196289063E+00 Q_out= 9.4563215596E-01
x= 6.7758789063E+00 Q_out= 9.4925375353E-01
x= 6.9321289063E+00 Q_out= 9.5263410613E-01
x= 7.0883789063E+00 Q_out= 9.5578928378E-01
x= 7.2446289063E+00 Q_out= 9.5873428602E-01
x= 7.4008789063E+00 Q_out= 9.6148311324E-01
x= 7.5571289063E+00 Q_out= 9.6404883321E-01
x= 7.7133789063E+00 Q_out= 9.6644364325E-01
x= 7.8696289063E+00 Q_out= 9.6867892814E-01
x= 8.0258789063E+00 Q_out= 9.7076531430E-01
x= 8.1821289063E+00 Q_out= 9.7271272032E-01
x= 8.3383789063E+00 Q_out= 9.7453040406E-01
x= 8.4946289063E+00 Q_out= 9.7622700668E-01
x= 8.6508789063E+00 Q_out= 9.7781059375E-01
x= 8.8071289063E+00 Q_out= 9.7928869356E-01
x= 8.9633789063E+00 Q_out= 9.8066833291E-01
x= 9.1196289063E+00 Q_out= 9.8195607053E-01
x= 9.2758789063E+00 Q_out= 9.8315802828E-01
x= 9.5258789063E+00 Q_out= 9.8491696962E-01
x= 9.8383789063E+00 Q_out= 9.8685961714E-01
x= 1.0150878906E+01 Q_out= 9.8855205770E-01
x= 1.0463378906E+01 Q_out= 9.9002651717E-01
x= 1.0775878906E+01 Q_out= 9.9131107083E-01
x= 1.1088378906E+01 Q_out= 9.9243017797E-01
x= 1.1400878906E+01 Q_out= 9.9340514757E-01
x= 1.1713378906E+01 Q_out= 9.9425454411E-01
x= 1.2025878906E+01 Q_out= 9.9499454102E-01
x= 1.2338378906E+01 Q_out= 9.9563922861E-01
x= 1.2650878906E+01 Q_out= 9.9620088244E-01
x= 1.2963378906E+01 Q_out= 9.9669019700E-01
x= 1.3275878906E+01 Q_out= 9.9711648937E-01
x= 1.3588378906E+01 Q_out= 9.9748787659E-01
x= 1.3900878906E+01 Q_out= 9.9781143030E-01
x= 1.4213378906E+01 Q_out= 9.9809331129E-01
x= 1.4525878906E+01 Q_out= 9.9833888688E-01
x= 1.4838378906E+01 Q_out= 9.9855283310E-01
x= 1.5150878906E+01 Q_out= 9.9873922371E-01
x= 1.5463378906E+01 Q_out= 9.9890160779E-01
x= 1.5807128906E+01 Q_out= 9.9905612525E-01
x= 1.6088378906E+01 Q_out= 9.9916634087E-01
x= 1.6432128906E+01 Q_out= 9.9928363243E-01
x= 1.6713378906E+01 Q_out= 9.9936728111E-01
x= 1.7057128906E+01 Q_out= 9.9945630140E-01
x=