У нас: 141825 рефератів
Щойно додані Реферати Тор 100
Скористайтеся пошуком, наприклад Реферат        Грубий пошук Точний пошук
Вхід в абонемент


з часом буде зменшуватися i в певний момент ча---су tвст вона стане настiльки малою, що нею можна знехтувати. Та---ким моментом слiд вважати той, коли максимальне вiдхилення амплi---туди коливань не буде перевищувати 5% вiд нового встановленого стану, тобто 0.05 (5% вiд 1 = 0.05). Рекомендоване значення tвст для даного варiанту подано в таблицi 1.

Отже, дифpiвняння pозв'язуємо на вiдтинку часу 0 <= t <= tвст, а обмеженням для задачі оптимiзацiї є 0 <= C0 < C0k.

3. Алгоритм головної програми

В головний алгоритм включені такi дiї:

присвоєння всiм константам їхніх значень;

обчислення C0k;

звернення до пiдпрограми розв'зку диференцiальних рiвнянь, одержання масиву значень величини y при C0=C0k;

друкування масиву y пpи C0=C0k;

звернення до пiдпрограми побудови графiка функцiї y=f(t) – розв’язку заданого дифрівняння при C0=C0k;

звернення до пiдпрограми оптимiзацiї, обчислення C0о – оптимального значення C0;

звернення до пiдпрограми розв'язку диференцiальних рiвнянь, одержання масиву значень величини y при C0=C0o;

роздрук масиву y пpи C0=C0o;

звернення до пiдпрограми побудови графiка функцiї y=f(t) при C0=C0o.

Текст головної програми лінійного типу разом з пiдпpогpамами пpиведено в додатку А. Таблиця ідентифікаторів програми приведена в додатку Б. Графіки рішення задачі для коливного та оптимального процесів подані в додатку В.

 

4. Перетворення дифрівняння в систему дифрiвнянь

Для перетворення заданого дифрiвняння в систему рiвнянь першого по---рядку застосуємо таку пiдстановку:

y=x3;

y'=x3'=x2;

y''=x3''=x2'=x1.

Система дифрiвнянь прийме вигляд

x1'=(b0-a0*x3-a1*x2-a2*x1)/a3;

x2'=x1;

x3'=x2.

Початковi умови: x1=x2=x3=0 при t=0. Вихiдна величина y=x3.

5. Алгоритм оптимізації функції

Постановка задачі має вигляд iнтегра---льного критерiя

де t0 - момент початку коливного процесу, секунд (t0=0);

tвст - момент закiнчення коливного процесу, секунд,

при обмеженнях на управляючу змінну

0 <= C0 < C0k,

де С0 – коефіцієнт дифрівняння;

С0k – коливна межа стійкості.

Суть покрокового методу полягає в тому, що відрізок [C0 , C0k] ділять на n частин та одержують значення C00, C01, C02, ..., C0n. Потім обчислюють всі значення функції U(С0і) і вибирають найменше шляхом їх порівняння між собою. Алгоритм методу представляє собою цикл з розгалуженням всередині циклу.

 

6. Алгоритм розв’язування системи дифрівнянь

Постановка задачі розв’язування рівняння має вигляд задачі Коші

y ' = f(t,y), y = 0 при t=0.

При використанні методу Рунге-Кута в циклі обчислюють коефіцієнти

ai=h*f(ti, yi);

bi=h*f(ti+h/2, yi+a/2);

ci=h*f(ti+h/2, yi+b/2);

di=h*f(ti+h, yi+c);

Тоді формула Рунге-Кута має вигляд

yi+1=yi+ (ai+2*bi+2*ci+di)/6.

Тут i = 1,n;

n – кількість елементарних відрізків діапазону [0 <= t <= tвст] (n=100);

h – крок інтегрування дифрівняння (h = tвст/n);

t0 = 0, ti+1 = ti+h.

Алгоритм методу представляє собою один цикл з параметром i = 1,n. В циклі накопичується сума за формулою Рунге-Кута.

7. Алгоритм обчислення означеного інтегралу

Постановка задачі інтегрування функції має вигляд

За методом Сімпсона використовується формула

I = [y(t0) + 4y(t1) + 2y(t2) +4y(t3) + ... + 4y(tn-1)+ y(tn)]*h/3,

де t0=0, tn= tвст, n – кількість елементарних відрізків (n=100).

Алгоритм методу Сімпсона являє собою цикл з накопиченням суми.

Перелiк використаних лiтературних джерел

Данилина Н.И. и др. Вычислительная математика. - М.: Высшая школа, 1985 Калиткин Н.Н. Численные методы. - М.: Наука, 1976. Бахвалов Н.С., Жидков Н.П., Кобельков Г.М. Численные методы. - М.: Наука, 1987 Гаврилюк І.П., Макаров В.Л. Методи обчислень. — К.:Вища школа, 1995 — т.1,2 Ляшенко М.Я., Головань М.С. Чисельні методи. — К.: Либідь, 1996 Турчак Л.І. Основы численных методов. — М.: Наука, 1987 Бочков С.О., Субботин Д.М. Язык программирования Си для персо---нального компютера. - М.: Радио и связь, 1990 Трой Д. Программирование на языке Си для персонального компютера IBM PC. - М.: Радио и связь, 1991 Методичні вказівки до виконання курсової роботи. ІФНТУНГ, Факел. –Івано-Франківськ, 2003 Лабораторний практикум з програмування мовою Сі для студентів спеціальності 7.091401 – АУ. ІФНТУНГ, ДОП. –Івано-Франківськ, 1996

Додаток А. Текст програми

# include <stdio.h>

# include <bios.h>

# include <graphics.h>

float x4[101],y[4],z[4],f[4],a[4],b[4],c[4],d[4];

float k1=3,k2=5,a0,a1,a2,a3,b0,b1,h,min,in,c0k,c0o,c0;

float c1=0.2,twst=0.5,t1=0.1,t2=0.01,t3=0.2;

int i,j,m=3,n=100;

/*Grafik*/

grafik(char *c)

{int col=EGA_WHITE;

int j,i,gmode,gdriver=DETECT;

initgraph(&gdriver,&gmode,"\BGI");

fprintf(stdout,"\nGrafik %s procesu\n",c);

for(i=0;i<100;i++)line(4*i+100,300-100*x4[i],4*(i+1)+100,300-100*x4[i+1]);

line(100,200,500,200);

line(100,300,500,300);line(100,100,100,500);

outtextxy(80,200,"1");outtextxy(80,300,"0");

bioskey(0);

closegraph();return;

}

/* Метод Рунге-Кутта */

void RunKut(float c0)

{void systema(void);

y[1]=y[2]=y[3]=0; b0=c0*k1*k2;a0=1+b0;x4[0]=0;

for(i=1;i<=n;i++)

{ for(j=1;j<=m;j++)z[j]=y[j];

systema();

for(j=1;j<=m;j++){a[j]=f[j]*h;y[j]=z[j]+a[j]/2;}

systema();

for(j=1;j<=m;j++){b[j]=f[j]*h;y[j]=z[j]+b[j]/2;}

systema();

for(j=1;j<=m;j++){c[j]=f[j]*h;y[j]=z[j]+c[j];}

systema();

for(j=1;j<=m;j++){d[j]=f[j]*h;

y[j]=z[j]+(a[j]+2*(b[j]+c[j])+d[j])/6;}

x4[i]=b0*y[3]+b1*y[2];}

return;}

/* Система дифрiвнянь */

void systema(void)

{f[1]=(1-a0*y[3]-a1*y[2]-a2*y[1])/a3;

f[2]=y[1];

f[3]=y[2];

return;}

/* Метод покроковий */

void Krok(void)

{float Simpson(void);int l=30,p;

c0=0;min=Simpson();

for(p=1;p<=l;p++)

{c0=c0k*p/30;

in=Simpson();

if(in<min){min=in;c0o=c0;}}

return;}

/* Метод Сiмпсона */

float Simpson(void)

{RunKut(c0);

in=(1-x4[0])*(1-x4[0])+(1-x4[n])*(1-x4[n])+(1-x4[n-1])*(1-x4[n-1]);

for(i=1;i<=n-3;i++,i++)

in+=4*(1-x4[i])*(1-x4[i])+2*(1-x4[i+1])*(1-x4[i+1]);

return(in*h/3);}

/* Головна програма */

main()

{char mas[15],*c=mas;

void RunKut(float);h=twst/n;

b1=c1*k1*k2;a1=b1+t1+t3;a2=t2+t1*t3;a3=t1*t2;

c0k=a1*a2/(k1*k2*a3)-1/(k1*k2);

fprintf(stdout,"\n Курсова робота\n\n");

fprintf(stdout,"Результати розрахункiв:\n");

fprintf(stdout,"Коливне c0=%f\n\n",c0k);bioskey(0);

RunKut(c0k);

fprintf(stdout,"\nКоливний перехiдний процес,");

fprintf(stdout," масив значень вихiдної величини\n\n");

for(i=1;i<=n;i+=5)

fprintf(stdout,"%f\t%f\t%f\t%f\t%f\n",

x4[i],x4[i+1],x4[i+2],x4[i+3],x4[i+4]);

c="коливного";

grafik(c);

Krok();

fprintf(stdout,"Оптимальне c0=%f\n",c0o);bioskey(0);

fprintf(stdout,"\nОптимальний перехiдний процес,");

fprintf(stdout," масив значень вихiдної величини\n\n");

RunKut(c0o);

for(i=1;i<=n;i+=5)

fprintf(stdout,"%f\t%f\t%f\t%f\t%f\n",

x4[i],x4[i+1],x4[i+2],x4[i+3],x4[i+4]);

c="оптимального";

grafik(c);

}

Додаток Б. Таблиця ідентифікаторів

Ім’я

змінної | Ідентифікатор у програмі |

Значення

y | x4[101] | Масив значень величини у (для графіка)

y[4] | Масив правих частин системи дифрівнянь

z[4] | Допоміжний масив правих частин системи

f[4] | Масив правих частин системи дифрівнянь

k1 | k1 | =3 – заданий коефіцієнт дифрівняння

k2 | k2 | =5 – заданий коефіцієнт дифрівняння

а0 | a0 | = 1+b0

а1 | a1 | =b1+T1T3

а2 | a2 | =T2+T1T3

а3 | a3 | =T1T2

b0 | b0 | =C0k1k2

b1 | b1 | =C1k1k2

h | h | H=tвст/n – крок інтегрування

min | Мінімальне значення інтегралу функці

in | Значення інтегралу функції y=f(t)

Cок | c0k | Коливна межа стійкості рішення

Сопт | c0o | Оптимальне значення C0

С0 | c0 | Коефіцієнт дифрівняння

С1 | c1= | =0.2 – заданий коефіцієнт дифрівняння

tвст | twst=0.5 | =0.5 час припинення коливань системи

Т1 | t1= | =0.1 – заданий коефіцієнт дифрівняння

Т2 | t2= | =0.01 – заданий коефіцієнт дифрівняння

Т3 | t3= | =0.2 – заданий коефіцієнт дифрівняння

i,j | Цілі змінні, параметри циклів

m | =3 – кількість дифрівнянь системи

n | =100 – число відрізків


Сторінки: 1 2 3