многочленом Ньютона другого степеня на кожному проміжку довжиною 2h. Тоді чисельне значення визначеного інтеграла на відрізку [a,b] визначається із такої наближеної рівності
де . Остання рівність називається формулою Сімпсона.
5.2. Графічний алгоритм числового інтегрування функцій
5.3. Опис графічного алгоритму числового інтегрування функцій
Блок 1. Заходимо в функцію Simpson.
Блок 2. Підключаємо функцію RunKut.
Блок 3. Обчислення значення змінної in - значення інтегралу функції y=f(t).
Блок 4. Задаємо умову накопичення змінної і.
Блок 5. Обчислюємо нові значення змінної in.
Блок 11. Повернення із функції.
7. Аналіз результатів виконання програми
Виконуючи цю курсуву роботу я дослідила коливний процес системи автоматизованого регулювання (САР). Програмою, яка складена на мові програмування Сі було розв’язано систему диференціальних рівнянь, яка описує коливний процес даної САР. Також було розв’язано коливний процес САР, коли змінний коефіцієнт настройки С0 рівний коефіцієнту, який відповідає коливній границі стійкості САР. Ці розв’язки не задовільняють постановку задачі про їх стійкість. Одже було зроблено оптимізацію коефіцієнта настройки і було отримано стійкі розв’язки коливної системи при С0=С0опт.
Отже, стійкість системи забезбечена підбором коефіцієнта настройки, і умову постановки задачі забезпечено.
Додаток А. Текст головної програми і підпрограм
# include<stdio.h>
# include<bios.h>
# include<graphics.h>
void grafik( char * ), RunKut(float);
float Zolper(void);
float Simpson( void );
float yb[101],y[3],z[3],f[3],a[3],b[3],c[3],d[3];
float twst=2.0,t1=0.1,t2=0.01,t3=0.2;
float k1=3,k2=5,a0,b0,b1,h,min,in,c0k,c0o,c0,a1,a2,a3;
int i,j,m=3,n=100;
/* Головна програма */
main()
{
char mas[15],*c=mas;
h=twst/n;
a1=t1+t3,a2=t2+t1*t3,a3=t1*t2;
c0k=a1*a2/(k1*k2*a3)-1/(k1*k2);
fprintf(stdout,"Результати розрахункiв:\n");
fprintf(stdout,"Коливне c0=%f\n",c0k);
RunKut(c0k);
fprintf(stdout,"Коливний перех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",yb[i],yb[i+1],yb[i+2],yb[i+3],yb[i+4]);
bioskey(0);c="коливного";
grafik(c);
c0o=Zolper();
fprintf(stdout,"Оптимальне c0=%f\n",c0o);
fprintf(stdout,"\nОптимальний перехiдний процес,");
fprintf(stdout," масив значень вихiдної величини \n");
RunKut(c0o);
for(i=1;i<=n;i+=5)
fprintf(stdout,"%f\t%f\t%f\t%f\t%f\n",yb[i],yb[i+1],yb[i+2],yb[i+3],yb[i+4]);
bioskey(0);
c="оптимального";
grafik(c);
}
/* Система дифрiвнянь */
void systema(void)
{
f[0]=(b0-a0*y[2]-a1*y[1]-a2*y[0])/a3;
f[1]=y[0];
f[2]=y[1];
return;
}
/*Побудова графiка*/
void grafik(char *c)
{
int col=EGA_WHITE;
int j,i,gmode,gdriver=DETECT;
initgraph(&gdriver,&gmode,"\BGI");
fprintf(stdout,"\nГрафiк %s процесу\n",c);
for(i=0;i<100;i++)
line(4*i+100,300-100*yb[i],4*(i+1)+100,300-100*yb[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[0]=y[1]=y[2]=0; b0=c0*k1*k2;a0=1+b0;yb[0]=0;
for(i=1;i<=n;i++)
{
for(j=0;j<m;j++)z[j]=y[j];
systema();
for(j=0;j<m;j++){a[j]=f[j]*h;y[j]=z[j]+a[j]/2;}
systema();
for(j=0;j<m;j++){b[j]=f[j]*h;y[j]=z[j]+b[j]/2;}
systema();
for(j=0;j<m;j++){c[j]=f[j]*h;y[j]=z[j]+c[j];}
systema();
for(j=0;j<m;j++){d[j]=f[j]*h;y[j]=z[j]+(a[j]+2*(b[j]+c[j])+d[j])/6;}
yb[i]=y[2];
}
return;
}
/* Метод золотого перерiзу */
float Zolper( void )
{
float a=0,b=c0k,c,d,y1,y2,eps=1e-1,u;
c=a+0.38*b;
c0=c;
y1=Simpson();
d=b-0.38*b;
c0=d;
y2=Simpson();
while( b-a>eps )
if( y1<y2 ){b=d;d=c;c=a+0.38*(b-a);c0=c;y2=y1;y1=Simpson();u=c;}
else {a=c;c=d;d=b-0.38*(b-a);c0=d;y1=y2;y2=Simpson();u=d;}
return u;
}
/* Метод Сiмпсона */
float Simpson( void )
{
RunKut( c0 );
in=(1-yb[0])*(1-yb[0])+(1-yb[n])*(1-yb[n])+(1-yb[n-1])*(1-yb[n-1]);
for( i=1;i<=n-3;i++,i++ )
in+=4*(1-yb[i])*(1-yb[i])+2*(1-yb[i+1])*(1-yb[i+1]);
return(in*h/3);
}
Додаток Б. Таблиця ідентифікаторів
Ім’я
змінної | Ідентифікатор у програмі мовою
Сі |
Значення
y | yb[101] | Масив значень величини у (для графіка)
y[3] | Масив правих частин системи дифрівнянь
z[3] | Допоміжний масив правих частин системи дифрівнянь
f[3] | Масив правих частин системи дифрівнянь у підпрограмі
k1 | k1 | =3 – заданий коефіцієнт дифрівняння
k2 | k2 | =5 – заданий коефіцієнт дифрівняння
а0 | a0 | = 1+b0
а1 | a1 | =T1 + T3
а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 | =2.0 час припинення коливань системи
Т1 | t1 | =0.1 – заданий коефіцієнт дифрівняння
Т2 | t2 | =0.01 – заданий коефіцієнт дифрівняння
Т3 | t3 | =0.2 – заданий коефіцієнт дифрівняння
i,j | Цілі змінні, параметри циклів
m | =3 – кількість дифрівнянь системи
n | =100 – число відрізків при інтегруванні
c | Адреса типу сhar (для графіка)
a[3],b[3],c[3], d[3] | Коефіцієнти формули Руннге-Кута
Mas[15] | Текстове повідомлення
Додаток В. Результати виконання програми та їх пояснення
Коливне c0=0.533333
Коливний перехiдний процес, масив значень вихiдної величини
0.000000 0.054400 0.179968 0.374952 0.623338
0.899163 1.171071 1.406969 1.578456 1.664620
1.654802 1.550043 1.363049 1.116696 0.841252
0.570677 0.338444 0.173401 0.096192 0.116680
0.232685 0.430213 0.685144 0.966175 1.238665
1.468904 1.628282 1.696844 1.665790 1.538599
1.330646 1.067343 0.781036 0.507028 0.279232
0.125969 0.066452 0.108373 0.246917 0.465308
0.736839 1.028141 1.303281 1.528192 1.674894
1.724975 1.671896 1.521846 1.293022 1.013424
0.717426 0.441556 0.219983 0.080289 0.040035
0.104555 0.266250 0.505486 0.792971 1.093347
1.369533 1.587306 1.719538 1.749578 1.673346
1.499879 1.250270 0.955096 0.650676 0.374603
0.161102 0.036786 0.017344 0.105554 0.290902
0.550828 0.853475 1.161588 1.437105 1.645854
1.761794 1.770260 1.669819 1.472494 1.202325
0.892442 0.581005 0.306501 0.102992 -0.004113
-0.001228 0.111685 0.321068 0.601387 0.918250
1.232625 1.505646 1.703418 1.801227 1.786623
Оптимальне c0=0.302222
Оптимальний перехiдний процес, масив значень вихiдної величини
0.000000 0.030827 0.102108 0.213934 0.359665
0.528256 0.706269 0.879631 1.035136 1.161657
1.251026 1.298578 1.303340 1.267879 1.197876
1.101449 0.988331 0.868963 0.753590 0.651429
0.569988 0.514561 0.487944 0.490373 0.519682
0.571639 0.640437 0.719280 0.801003 0.878691
0.946231 0.998756 1.032964 1.047285 1.041887
1.018550 0.980410 0.931604 0.876869 0.821107
0.768972 0.724506 0.690845 0.670026 0.662889
0.669094 0.687228 0.714992 0.749449 0.787313
0.825240 0.860107 0.889255 0.910674 0.923126
0.926196 0.920266 0.906435 0.886373 0.862154
0.836051 0.810336 0.787099 0.768083 0.754564
0.747282 0.746413 0.751595 0.761990 0.776392
0.793344 0.811280 0.828658 0.844088 0.856432
0.864885 0.869015 0.868775 0.864482 0.856762
0.846484 0.834664 0.822380 0.810674 0.800468
0.792500 0.787273 0.785033 0.785759 0.789193
0.794868 0.802165 0.810375 0.818760 0.826620
0.833344 0.838455 0.841644 0.842777 0.841901
Список використаної літератури
1.
Гаврилюк І.П., Макаров В.Л. Методи обчислень. — К.:Вища школа, 1995 — т.1,2
2.
Ляшенко М.Я., Головань М.С. Чисельні методи. — К.: Либідь, 1996
3.
Турчак Л.І. Основы численных методов. — М.: Наука, 1987
4.
Бочков С.О., Субботин Д.М. Язык программирования Си для персо---нального компютера. - М.: Радио и связь, 1990
5.
Трой Д. Программирование на языке Си для персонального компютера IBM PC. - М.: Радио и связь, 1991
6.
Методичні вказівки до виконання лабораторних робіт, практичних занять та самостійної роботи для студентів всіх спеціальностей з програмування мовою Сі. ІФНТУНГ, ДОП. –Івано-Франківськ, 1995
7.
Лабораторний практикум з програмування мовою Сі для студентів спеціальності 7.091401 – АУ. ІФНТУНГ, ДОП. –Івано-Франківськ, 1996
8.
«Основы численных методов». Турчак Л. И.