Учебная работа. Курсовая работа: Программирование и основы алгоритмизации
Тульский муниципальный институт
Кафедра «Системы автоматического управления»
ПОЯСНИТЕЛЬНАЯ ЗАПИСКА
к курсовой работе по дисциплине
«Программирование и базы алгоритмизации».
Разработал студент группы 120161
Матях Р.И.
Проверил доцент кафедры САУ:
Тула 2007 г.
ЗАДАНИЕ
По данной структурной схеме САУ составить систему ДУ, описывающих её функционирование.
Создать программку на языке Pascal для решения данной нам системы способом Эйлера.
Создать программку на языке Pascal для построения графиков переходных действий.
Провести исследование воздействия конструктивных характеристик на величину времени регулирования при подаче на вход системы единичного ступенчатого сигнала.
Вид многофункциональной схемы САУ
z
Обозначения:
СУ – суммирующее устройство;
УУП – устройство усиления и преобразования;
ИУ – исполнительное устройство;
ОУ – объект управления;
УОС – устройство оборотной связи;
– управляющее действие;
сигналрассогласования;
сигнал на выходе УУП;
координата исполнительного органа исполнительного устройства;
регулируемая величина;
сигнал оборотной связи.
Варианты УУП:
1. Пропорциональный регулятор
2. Пропорциональный интегральный регулятор
3. Пропорциональный дифференциальный регулятор
4.Интегрально-дифференциальный регулятор
5. Пропорциональный интегрально-дифференциальный регулятор
Варианты схем исполнительных устройств:
1. движок неизменной скорости
2. Автоматический привод
3. Автоматический привод
Варианты объектов управления:
W(p)=K4/((T4*p+1)*(T5*p+1)*(T6*p+1))
W(p)=K4/(T42
*p2
+2*η*T4*p+1)
W(p)=K4/(p*(T4*p+1)*(T5*p+1))
W(p)=K4/(p*(T42
*p2
+2*η*T4*p+1))
W(p)=K4/((T4*p+1) (T52
*p2
+2*η*T5*p+1))
W(p)=K4/((T4*p+1)*(T5*p+1))
W(p)=K4/(p*(T4*p+1))
Передаточная функция:
W(p)=K6
1. Решение дифференциальных уравнений способом Эйлера
1.1 Описание способа
Уравнения, содержащие производные от функции, появляются при решении почти всех научно-технических задач, при этом существует огромное обилие классов схожих уравнений. Для решения неких из их могут быть применены аналитические способы, рассматриваемые в курсах арифметики, но почти всегда приходится использовать численные способы.
Поначалу разглядим один из простых классов дифференциальных уравнений, на примере которого будут показаны индивидуальности использования численных способов.
Пусть задано дифференциальное уравнение первого порядка с исходным условием (задачка Коши)
(1)
У(x0
) = Уо
(2)
где
– данная функция 2-ух переменных
и
, x0
, у0
– известные числа. Требуется найти функцию
при
0
Уравнение
можно разглядывать как задание кривой через ее производную в координатной плоскости
, так как понятно как вычислить производную в каждой точке данной нам кривой через ее координаты. В общем случае уравнению
удовлетворяет целое семейство кривых; изначальное условие
дозволяет избрать из этого семейства одну определенную кривую, которая проходит через заданную точку
0
0
Для численного решения
,
заменим область непрерывного конфигурации аргумента
дискретным обилием точек, т.е. введем сетку. Положим, что величина
меняется от значения
0
до значения
Тогда, рассматривая равномерную сетку, получаем узловые точки x0
,
1
xk
находящиеся на расстоянии
друг от друга, т.е.
xk
+1
xk
(3)
где
шаг сетки. Надлежащие значения функции будем обозначать уk
, т.е.
yk
xk
Тут
функция, которая является приближенным решением
Для получения численного решения, дифференциальное уравнение
заменяется уравнениями относительно значений функций
в узловых точках. Эти уравнения именуются разностными. Простейшее разностное уравнение для
имеет вид
yk
+1
yk
xk
yk
(4)
Уравнение
следует из
если производную
приближенно представить через значения функции
в примыкающих узлах.
Соотношения (2.12.4) можно записать в виде
Yk
+1
yk
xk
yk
(5)
Тогда, беря во внимание
при помощи формулы
можно поочередно найти значения у1
,y2
.… Этот способ приближенного решения
именуется способом Эйлера.
Геометрическая интерпретация данной нам схемы дана на
, где изображено поле интегральных кривых. Внедрение лишь первого члена формулы Тейлора значит движение не по интегральной кривой, а по касательной к ней. На любом шаге мы поновой находим касательную; как следует, линия движения движения будет ломаной линией. Из-за этого способ Эйлера время от времени именуют способом ломаных.
Рис.1
Доказывается, что если шаг сетки
стремится к нулю, то приближенное решение, определяемое
стремится к четкому решению
т.е. имеется факт сходимости приближенного решения к четкому при
®0. Но в критериях настоящих вычислений на компе при конечном шаге целенаправлено знать как приобретенное приближенное решение близко к четкому. В качестве меры отличия (нормы ошибки) нередко употребляют величину
xk
yk
(6)
тут
серьезное решение
, yk
приближенное xk
приобретенное методом решения разностных уравнений, к примеру
Для разностных уравнений величина
оценивается формулой
Chm
(7)
тут
зависящая от длины отрезка, на котором ищется решение, и метода дискретизации
,
параметр, который именуется порядком точности решения. порядок точности способа Эйлера — малый, т.е.
= 1, что соединено с достаточно грубым методом аппроксимации дифференциального уравнения разностным. Как правило, чем выше порядок точности, тем наиболее желаемым является численный способ.
Можно утверждать, что хоть какое верно составленное разностное уравнение аппроксимирует начальное дифференциальное с той либо другой точностью. Свойство аппроксимации обычно оценивают по точности, с которой решение начальной задачки удовлетворяет разностному уравнению, т.е. по формуле
xk
+1
xk
xk
xk
Chm
где
— const, т
—
порядок аппроксимации разностного уравнения.
Сопоставление (1) и (4) указывает, что способ Эйлера имеет 1-ый порядок аппроксимации, так же как и точность решения. Но в общем случае утверждение о равенстве порядков точности решения и аппроксимации разностного уравнения не является естественным и просит подтверждения. способ Эйлера является одним из самых старенькых и обширно узнаваемых способов численного решения дифференциальных уравнений. К огорчению, этот способ может приводить к неприемлимо огромным ошибкам, а не считая того, он нередко оказывается неуравновешенным — малая ошибка (происходящая при округлении либо из-за некорректности начальных данных) значительно возрастает с ростом
1.2
программка для решения дифференциальных уравнений состоит из 3-х частей:
Основная программка.
Процедуры, реализующие способ Эйлера.
Процедуры вычисления правых частей.
Процедура вычисления правых частей
имеет вид:
procedure R( var y0,F: mass);
begin
F[1]:=y0[2];
F[2]:=(ft-k2*y0[2]-k1*y0[1])/Mm
end;
где:
F – массив значений правых частей системы, приведенной к обычной форме Коши;
y0 – массив значений исходных критерий системы;
k1,k2 … kn – коэффициенты;
ft – f(t), т.е. сигнал (действие), подаваемый на вход системы;
Процедура, реализующая способ Эйлера:
procedureEu(vart0,t,h: real; varm:integer; vary0,y:mass);
var i: integer;
begin
R(y0,F);
for i:=1 to m do
y[i]:=y[i]+h*F[i];
t:=t+h;
end;
где:
t0,tk – изначальное и конечное
m – порядок системы;
h – шаг сетки;
Опосля задания всем переменным определенных значений происходит последовательное вычисление значений функции
while t0<=tk do
begin
Eu(t0,t,h,g,y0,y);
writeln(t,y[1],y[2]);
for i:=1 to g do
y0[i]:=y[i];
end;
readln;
end.
Для приведённой выше схемы составим систему дифференциальных уравнений:
Выразим неведомые величины через данные исходных критерий
1. Но
Итак,
2. Аналогично
3.
4.
5. Пусть
тогда
Таковым образом имеем систему из 5 дифференциальных уравнений:
Итак, составим программку для решения дифференциальных уравнений и построения графиков переходных действий.
Поначалу создадим некие переобозначения:
F — массив значений правых частей
F[1]=dZ1
/dt
F[2]=X6
F[3]=dα/dt
F[4]=dX4
/dt
F[5]=dX6
/dt
Y0 — исходные значения переменных системы уравнений
Y — массив переменных системы уравнений
Y[1]=Z1
Y[2]=X5
Y[3]= α
Y[4]=X4
Y[5]=X6
2. Листинг программки
Входные характеристики:
* T0 * 0
* TK * 30
* h * 0.01
* Y0 * 0 0 0 0 0
* T * 1 2 1 1 1
* k * 1 1 1 1 1
* g * 1
* n * 0.5
********
2.1. Основная программка
programEler;
uses mdd, graph;
begin
start(ymin,ymax,t0,tk,t,k1,k2,k3,k4,t1,t2,t3,h,g,y0,y);
output1;
while t<=tk do
begin
Eu(g,k1,k2,k3,k4,k6,t1,t2,t3,t4,d,t,h,m,y0,F,y,Gr);
abc (Gr, ymin, ymax);
output(t,y)
end;
readln;
begline;
start2(t0,t,y0,y);
top(ymin,ymax,t0,tk,shg,hi,bx,by);
while t<=tk do
begin
Eu(g,k1,k2,k3,k4,k6,t1,t2,t3,t4,d,t,h,m,y0,F,y,Gr);
draw(Gr,t,shg,hi,bx,by,h);
end;
finish(t0,tk,ymin,ymax,shg,hi,bx,by);
readln
end.
2.2
.
Модуль
unit MDD;
interface
{описание структуры программки}
usesgraph;
const m=5;
m2=5;
type mass=array [1..m] of real; {массивдифференциалов}
mass2=array [1..m2] of real; {массивпереходныхпроцессов}
var
y0, y, F: Mass;
Gr: Mass2;
f1,e: text;
i,grdriver,grmode:integer;
g,n,u4,k3,k4,t1,t2,t3,T4,T5,d,k6,k1,k2,h,ymin,ymax,t0,tk,t, shg,hi,bx,by,i1:real;
s:string[8];
(var ymin, ymax,t0, tk, t,k1,k2,k3,k4,t1,t2, t3,h,g:real;var y0,y:mass);
(var t0,t: real; var y0,y: mass);
(var g,k1, k2,k3,k4,t1,t2,t3, u4, k, d, t, h: real; m:integer; var y0, F, y: mass; var Gr: mass2);
(var y0, F: mass; g,k1,k2,k3,k4,k6,t1,t2,t3,t4,n: real);
(var Gr: mass2; y, y0: mass; g,k1,k2,k3,k4,k6,T1,T2,T3,T4,n: real);
(Gr: mass2; var ymin,ymax:real);
(ymin,ymax,t0,tk: real; var shg,hi,bx,by: real);
(Gr: mass2; t,shg,hi,bx,by,h: real);
(t0,tk,ymin,ymax,shg,hi,bx,by: real);
(t: real; y: mass);
implementation
(var ymin,ymax,t0,tk,t,k1,k2,k3,k4,t1,t2,t3,h,g:real;var y0,y:mass); {начальныеприсвоения}
begin
assign (f1, ‘C:nu.txt’);
assign (e, ‘C:Result.txt’);
reset (f1);
readln(f1);
readln(f1);
readln(f1,s, T0);
readln(f1,s, TK);
readln(f1,s, h);
read(f1,s);
for i:=1 to m do begin
read(f1, y0[i]);
y[i]:=y0[i];
end;
readln(f1);
readln(f1, s, t1, t2, t3, t4, t5);
readln(f1,s, k1, k2, k3, k4, k6);
readln(f1,s, g);
readln(f1,s, n);
ymin:=y0[1];
ymax:=y0[1];
T:=t0;
close(f1);
end;
(var t0,t: real; var y0,y: mass);
{начальныеприсвоения2}
begin
reset (f1);
readln(f1);
readln(f1);
readln(f1);
readln(f1);
readln(f1);
read(f1,s);
for i:=1 to m do begin
read(f1, y0[i]);
y[i]:=y0[i];
end;
close(f1);
T:=t0;
end;
(varg,k1, k2,k3,k4,t1,t2,t3, u4, k, d, t, h: real; m:integer; vary0, F, y: mass; varGr: mass2);
var i: integer;
begin
R (y0,F,g,k1,k2,k3,k4,k6,T1,T2,T3,T4,n);
for i:=1 to m do for i:=1 to m do
y[i]:=y0[i]+h*F[i];
graphiks(Gr,y,y0,g,k1,k2,k3,k4,k6,T1,T2,T3,T4,n);
t:=t+h;
for i:=1 to m do
y0[i]:=y[i];
end;
(var y0, F: mass; g,k1,k2,k3,k4,k6,T1,T2,T3,T4,n: real);
begin
F[1]:=((g-y0[2]*k6-y0[1])*k2)/T2;
F[2]:=y0[5];
F[3]:=(k3*(y0[1]+y0[2])-y0[3])/T3;
F[4]:=(k4*y0[1]-y0[4])/T4;
F[5]:=(y0[4]-2*n*T5*y0[5]-y0[2])/(T5*T5);
end;
(varGr: mass2; y, y0: mass; g,k1,k2,k3,k4,k6,T1,T2,T3,T4,n: real);
begin
Gr[1]:=g-k6*y[2];
Gr[2]:=(g-y[2]*k6y[1])*k2+k1*(g-y[2]*k6);
Gr[3]:=y[3];
Gr[4]:=y[2];
Gr[5]:=y[2]*k6;
end;
begin
grdriver:=detect;
initgraph(grdriver, grmode, ‘d:bpbgi’);
setfillstyle(1,11);
bar(0,0,640,480);
setcolor(15);
rectangle(40,460,600,40);
i:=40;
while i<600 do
begin
setcolor(15);
line(i,40,i,460);
i:=i+56;
end;
i:=40;
while i<460 do
begin
line(40,i,600,i);
i:=i+42
end;
end;
(Gr: mass2; var ymin,ymax: real);
begin
for i:=1 to m2 do begin
if ymin>Gr[i] then ymin:=Gr[i];
if ymax<Gr[i] then ymax:=Gr[i];
end;
end;
(ymin,ymax,t0,tk: real; var shg,hi,bx,by: real);
begin
shg:=560/(tk-t0);
hi:=420/(ymax-ymin);
bx:=600-tk*shg;
by:=440-ymax*hi;
end;
(Gr: mass2; t,shg,hi,bx,by,h: real);
{процедурапостроенияграфиков}
begin
for i:=1 to m2 do begin
moveto(round((t-h)*shg+bx),round(GetMaxY-Gr[i]*hi-by));
SetColor(11+i);
SetLineStyle(0,1,3);
lineto(trunc(t*shg+bx),trunc(GetMaxY-Gr[i]*hi-by));
end;
end;
(t0,tk,ymin,ymax,shg,hi,bx,by: real);
begin
setfillstyle(1,11);
bar(40,475,600,461);
setfillstyle(1,11);
bar(40,5,635,39);
setfillstyle(1,15);
setcolor(12);
SetLineStyle(0,1,3);
setcolor(5);
i1:=t0;
while i1<=tk do
begin
str(i1:5:2,s);
settextstyle(0,0,1);
outtextxy(round(i1*shg+bx)-10,GetMaxY-30,s);
i1:=i1+(tk-t0)/10;
end;
setcolor(12);
line(50,30,60,30);
settextstyle(0,0,2);
outtextxy(70,20,’E’);
setcolor(13);
line(170,30,180,30);
outtextxy(190,20,’U’);
setcolor(14);
line(280,30,290,30);
outtextxy(300,20,’A’);
setcolor(15);
line(390,30,400,30);
outtextxy(410,20,’Y’);
setcolor(16);
line(500,30,510,30);
outtextxy(520,20,’Z’);
setcolor(4);
settextstyle(1,0,2);
outtextxy(round(i1*shg+10),getMaxY-40,’T(c)’);
setcolor(5);
i1:=ymin;
while i1<=ymax do
begin
str(i1:5:3,s);
settextstyle(0,0,1);
outtextxy(10,round(GetMaxY-i1*hi-by),s);
i1:=i1+(ymax-ymin)/10;
end;
setfillstyle(1,1);
bar(0,0,5,480);
bar(0,0,640,5);
bar(640,0,635,480);
bar(640,480,5,475);
end;
begin
rewrite(e);
writeln(e,’ Результаты решение системы ДУ’);
writeln(e,’****************************************************’);
writeln(e,’* T (c) * D(z1) * D(x5) * D(A) * D(x4) * D(x6) *’);
writeln(e,’***************************************************’);
writeln(‘ Результаты решение системы ДУ’);
writeln(‘*****************************************************’);
writeln(‘* T (c) * D(z1) * D(x5) * D(A) * D(x4) * D(x6) *’);
writeln(‘*****************************************************’);
end;
(t: real; y: mass); {Вывод на экран результатов решения системы уравнений и их запись во наружный файл}
begin
write (e, t:3:2,’ ‘);
write (t:3:2,’ ‘);
for i:=1 to m do begin write (e, y[i]:5:4,’ ‘);
write (y[i]:5:4,’ ‘); end;
writeln(e);
writeln
end;
END.
3. Графики переходных действий
Зависимость сигнала на выходе УУП от времени
Зависимость сигнала рассогласования от времени
Зависимость от времени координаты исполнительного органа ИУ
Регулируемая величина
График сигнала оборотной связи
Вид решения
]]>