Смекни!
smekni.com

Розвязок інтеграла методом Чебиша Гауса Сімпсона (стр. 3 из 4)

textattr(ct+ (15 << 4));

cprintf("1"); gotoxy(1,4);

cprintf("+ ----+",s); gotoxy(1,5);

cprintf("¦/2x+1 dx=%f;",s); gotoxy(1,6);

cprintf("+",s); gotoxy(1,7);

cprintf("0"); gotoxy(20,5);

ds=zrS-s;

e=fabs(ds/zrS)*100.0;

cprintf("табл. знач.=%f абс. пох.=%f вiдн. пох.=%f%%",zrS,ds,e);

}

}

void Chebyshev(int m){ /* Обчислення iнтегралу методом Чебишева */

const n=7;

int i,j;

float b0,b9,s,x;

float

t[7]={-0.883862,-0.529657,-0.321912,0.0,0.321912,0.529657,0.883862};

cls1();

textattr(ct+ (ctfp << 4));

gotoxy(1,2);

cprintf(" Метод Чебишева "); strcpy(NameM,"Чебишева");

if(m==0){

gotoxy(1,3);

cprintf("+-----------------+");gotoxy(1,4);

strcpy(s0,gcvt(K,3,&sb));

cprintf("¦ fi ¦ F(%3s,fi) ¦",s0);gotoxy(1,5);

cprintf("+-----+-----------¦"); gotoxy(1,6);

b0=0.0;

for(i=1;i<=12;i++){

b9=Pi*i/6.0;

s=0.0;

for(j=1;j<=n;j++){

x=(b9+b0)/2.0+(b9-b0)*t[j-1]/2.0;

s=s+F(m,x);

}

s=s*(b9-b0)/n; f[i-1]=s;

cprintf("¦%2dп/6¦ %f ¦",i,s); gotoxy(1,6+i);

if(i==1){

gotoxy(20,5+i);

ds=zr-s;

e=fabs(ds/zr)*100.0;

cprintf("табл. знач.=%f абс. пох.=%f вiдн. пох.=%f%%",zr,ds,e);

gotoxy(1,6+i);

}

}

cprintf("+-----------------+");

}

else{

b0=aS;

b9=bS;

s=0.0;

for(j=1;j<=n;j++){

x=(b9+b0)/2.0+(b9-b0)*t[j-1]/2.0;

s=s+F(m,x);

}

s=s*(b9-b0)/n; f[i-1]=s;

cprintf(" - тест"); gotoxy(1,3);

textattr(ct+ (15 << 4));

cprintf("1"); gotoxy(1,4);

cprintf("+ ----+",s); gotoxy(1,5);

cprintf("¦/2x+1 dx=%f;",s); gotoxy(1,6);

cprintf("+",s); gotoxy(1,7);

cprintf("0"); gotoxy(20,5);

ds=fabs(zrC-s);

e=fabs(ds/zrC)*100.0;

cprintf("табл. знач.=%f абс. пох.=%f вiдн. пох.=%f%%",zrC,ds,e);

}

}

void Gaus(int m1){ /* Обчислення iнтегралу методом Гауса */

const n=7,m=3;

int i,j,k;

float b0,b9,s,x,h;

float t[3]={-0.774597,0.0,0.774597};

float A[3]={5.0/9.0,8.0/9.0,5.0/9.0};

cls1();

textattr(ct+ (ctfp << 4));

gotoxy(1,2);

cprintf(" Метод Гауса"); strcpy(NameM,"Гауса ");

if(m1==0){

gotoxy(1,3);

cprintf("+-----------------+");gotoxy(1,4);

strcpy(s0,gcvt(K,3,&sb));

cprintf("¦ fi ¦ F(%3s,fi) ¦",s0);gotoxy(1,5);

cprintf("+-----+-----------¦"); gotoxy(1,6);

b0=0.0;

for(i=1;i<=12;i++){

b9=Pi*i/6.0;

h=(b9-b0)/n;

s=0.0;

for(j=0;j<=n-1;j++){

for(k=1;k<=m;k++){

x=b0+h*j;

s=s+A[k-1]*F(m,x+h/2.0+t[k-1]*h/2.0);

}

}

s=s*h/2.0; f[i-1]=s;

cprintf("¦%2dп/6¦ %f ¦",i,s); gotoxy(1,6+i);

if(i==1){

gotoxy(20,5+i);

ds=zr-s;

e=fabs(ds/zr)*100.0;

cprintf("табл. знач.=%f абс. пох.=%f вiдн. пох.=%f%%",zr,ds,e);

gotoxy(1,6+i);

}

}

cprintf("+-----------------+");

}

else{

b0=aS;

b9=bS;

h=(b9-b0)/n;

s=0.0;

for(j=0;j<=n-1;j++){

for(k=1;k<=m;k++){

x=b0+h*j;

s=s+A[k-1]*F(m,x+h/2.0+t[k-1]*h/2.0);

}

}

s=s*h/2.0; f[i-1]=s;

cprintf(" - тест"); gotoxy(1,3);

textattr(ct+ (15 << 4));

cprintf("1"); gotoxy(1,4);

cprintf("+ ----+",s); gotoxy(1,5);

cprintf("¦/2x+1 dx=%f;",s); gotoxy(1,6);

cprintf("+",s); gotoxy(1,7);

cprintf("0"); gotoxy(20,5);

ds=fabs(zrG-s);

e=fabs(ds/zrG)*100.0;

cprintf("табл. знач.=%f абс. пох.=%f вiдн. пох.=%f%%",zrG,ds,e);

}

}

void list(){ /* функцiя виводу результатiв на екран */

cls1();

textattr(ct+ (ctfp << 4));

gotoxy(1,2);

cprintf(" Метод %9s ",NameM);

gotoxy(1,3);

cprintf("+-----------------+");gotoxy(1,4);

strcpy(s0,gcvt(K,3,&sb));

cprintf("¦ fi ¦ F(%3s,fi) ¦",s0);gotoxy(1,5);

cprintf("+-----+-----------¦"); gotoxy(1,6);

for(i=1;i<=12;i++){

cprintf("¦%2dп/6¦ %f ¦",i,f[i-1]); gotoxy(1,6+i);

}

cprintf("+-----------------+");

}

void druk(){ /* функцiя виводу результатiв на друк */

cls1();

fp2=fopen("lpt1", "w+");

fprintf(fp2," Метод %9s &bsol;n",NameM);

fprintf(fp2,"+-----------------+&bsol;n");

strcpy(s0,gcvt(K,3,&sb));

fprintf(fp2,"¦ fi ¦ F(%3s,fi) ¦&bsol;n",s0);

fprintf(fp2,"+-----+-----------¦&bsol;n");

for(i=1;i<=12;i++){

fprintf(fp2,"¦%2dп/6¦ %f ¦&bsol;n",i,f[i-1]);

}

fprintf(fp2,"+-----------------+&bsol;n");

fclose(fp1);

}

void Vvod(){ /* функцiя введення початкових даних */

cls1();

gotoxy(17,7);

textattr(ct+ (ctf << 4));

cprintf("+------------------------+"); gotoxy(17,8);

cprintf("¦ Введiть значення K= ¦"); gotoxy(17,9);

cprintf("+------------------------+");

gotoxy(17+21,8);

scanf("%f",&K);

cls1();

gotoxy(17,7);

}

void main(void){ /* Головна функцiя */

char vibor,tab, c;

int short i,a,b,x,y,mi,mi1,mif,mi13,ls;

const nm=5,nm1=3,nm13=2;

int npm[4]={2,3,3,1};

char *m[5]={"Про програму","Моделювання","Тестування","Виведення результатiв","Вихiд"};

char *pm[4][3]={{"Про автора","Завдання "},{"Сiмпсон","Чебишев","Гаус "},

{"Тест1","Тест2","Тест3"},{"Читати файл"}};

char *m13[2]={"На екран","Друк "};

do{

l3:;textbackground(7);

clrscr();

l1:; cls1();

mi=1;

gotoxy(1,25);

textattr(ct+ (ctf << 4));

cprintf(" Alt-F4 Вихiд F1 Допомога");

do{

gotoxy(1,1);

textattr(ct+ (ctf << 4));

cprintf(" ");

ls=2;

for(i=0;i<=nm;i++){

gotoxy(ls,1);

if(mi==i+1) textattr(ct+ (ctfa << 4));

else textattr(ct+ (ctf << 4));

cprintf("%s",m[i]);

ls=ls+strlen(m[i])+3;

}

c=getch();

if(c==75) {if(mi==1) mi=nm; else mi--;}

if(c==77) {if(mi==nm) mi=1; else mi++;}

if(c==107) exit(0); /* Alt-F4 - Вихiд */

if(c==59) zavdannja(); /* F1 - Допомога */

if(c==13){

if(mi<=4){

mi1=1;

l2:; do{

if(c!=13) c=getch();

else c=32;

if(c==72) if(mi1==1) mi1=npm[mi-1]; else mi1--;

if(c==80) if(mi1==npm[mi-1]) mi1=1; else mi1++;

if(c==27) goto l1;

if(c==107) exit(0); /* Alt-F4 - Вихiд */

if(c==59) zavdannja(); /* F1 - Допомога */

ls=2;

for(i=0;i<mi-1;i++) ls=ls+strlen(m[i])+3;

gotoxy(ls,2);

textattr(cr+ (ctf << 4));

strcpy(s,"+");

for(i=0;i<strlen(pm[mi-1][0]);i++) strcat(s,"-");

strcat(s,"+");

cprintf(s);

for(i=0;i<npm[mi-1];i++){

gotoxy(ls,i+3);

textattr(cr+ (ctf << 4));

cprintf("¦");

if(mi1==i+1) textattr(ct+ (ctfa << 4));

else textattr(ct+ (ctf << 4));

cprintf(pm[mi-1][i]);

textattr(cr+ (ctf << 4));

cprintf("¦");

}

gotoxy(ls,npm[mi-1]+3);

textattr(cr+ (ctf << 4));

strcpy(s,"+");

for(i=0;i<strlen(pm[mi-1][0]);i++) strcat(s,"-");

strcat(s,"+");

cprintf(s);

}

while(c!=13);

if(mi==1){

if(mi1==1) about(); else zavdannja();

while(!kbhit());

getch();

goto l3;

}

if(mi==2){

Vvod();

if(mi1==1) Simpson(0);

if(mi1==2) Chebyshev(0);

if(mi1==3) Gaus(0);

getch(); goto l3;

}

if(mi==3){

if(mi1==1) Simpson(1);

if(mi1==2) Chebyshev(1);

if(mi1==3) Gaus(1);

getch(); goto l3;

}

if(mi==4){

mi13=1; ls=2+strlen(pm[3][0])+2;

for(i=0;i<mi-1;i++) ls=ls+strlen(m[i])+3;

do{

if(c!=13) c=getch();

else c=32;

if(c==72) if(mi13==1) mi13=nm13; else mi13--;

if(c==80) if(mi13==nm13) mi13=1; else mi13++;

if(c==27){

for(i=0;i<nm13+2;i++){

gotoxy(ls/*12*/,i+3);

textattr(15 + (0 << 4));

cprintf("__________");

}

mi1=3;

goto l2;

}

if(c==107) exit(0); /* Alt-F4 - Вихiд */

if(c==59) zavdannja(); /* F1 - Допомога */

gotoxy(ls,3);

textattr(cr+ (ctf << 4));

cprintf("+--------+");

for(i=0;i<nm13;i++){

gotoxy(ls,i+4);

textattr(cr+ (ctf << 4));

cprintf("¦");

if(mi13==i+1) textattr(ct+ (ctfa << 4));

else textattr(ct+ (ctf << 4));

cprintf(m13[i]);

textattr(cr+ (ctf << 4));

cprintf("¦");

}

gotoxy(ls,nm13+4);

textattr(cr+ (ctf << 4));

cprintf("+--------+");

}

while(c!=13);

if(mi13==1) list(); else druk();

getch();

c=32;

}

}

else {exit(0); c=32;}

}

}

while(c!=13);

mif=1;

}

while(1==1);

exit(0);

}


4 Розробка тестів та аналіз результатів дослідження

4.1 Класифікація експериментів

Усі експерименти умовно поділяються на:

1) натурні, які проводяться на експериментальних установках;

2) чисельні, які проводяться за допомогою моделювання на ЕОМ.

4.2 Опис експериментальних досліджень

В даній курсовій роботі ми проводимо чисельний експеримент, який полягає у обчисленні значення еліптичного інтеграла за допомогою різних чисельних методів: Сімпсона, Чебишева та Гауса.

В результаті досліджень отримуються табличні значення інтегралів.

4.3 Дослідження еліптичного інтегралу першого порядку на ЕОМ

В результаті дослідження на ЕОМ отримані табличні значення інтегралу.

а)


б)

в)

Рис. 4.1. Табличні значення інтегралу:

а) методом Сімпсона, б) методом Чебишева, в) методом Гауса

Як видно із рис. 4.1 табличні значення інтегралу, отримані різними методами: Сімпсона, Чебишева, Гауса відрізняються несуттєво, що свідчить про високу точність цих методів.


4.4 Тестова перевірка чисельних методів

а)

б)

в)

Рис. 4.2. Тестова перевірка чисельних методів:

а) методом Сімпсона, б) методом Чебишева, в) методом Гауса


5 Оцінка похибок отриманих результатів

Оцінка похибок результатів дослідження проводилася шляхом порівняння табличних значень інтегралів (рис. 4.2), отриманих за допомогою розробленого програмного комплексу з тестовим прикладом. Результати цієї оцінки наведені в табл. 5.1.

Таблиця 5.1 - Оцінка похибок результатів дослідження

Метод Абсолютна похибка Відносна похибка, %
Сімпсона 0,000004 0,000256
Чебишева 0,000017 0,001202
Гауса 0,000000 0,000009

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


6 Оцінка ефективності комплексу програм для дослідження

Таблиця 6.1 - Оцінка ефективності комплексу програм для дослідження

Зміст Назва Розмір, байт Час виконання, с
Текст основної програми integral.cpp 12515 1,5

Час виконання програми є порівняно невеликим, що підтверджує ефективність розробки програми.


7 Розробка пакету документів для супроводження комплексу програм

7.1 Розробка інструкції програмісту

Середовище програмування – Turbo C++ версії 3.0 або вище.

Апаратне забезпечення.

Для розробки даного програмного продукту необхідно використовувати будь-яку модель IBM-сумісного комп’ютерного комплексу. В комплект повинні входити наступні пристрої:

- процесор 80286 або вище;

- 24 Кб або більше вільної оперативної пам’яті;

- клавіатура, сумісна з Microsoft Natural;

- привід дисководу для накопичувачів на магнітних дисках діаметром 3,5";

- відеоадаптер, що підтримує режими монітору 80х25 символів і 16 кольорів в текстовому режимі;

- CGA-сумісний монітор.

Програмний продукт розроблений для використання під керуванням операційної системи MS DOS.

7.2 Розробка інструкції користувачу

Дана програма дозволяє чисельно обчислювати значення елiптичного iнтегралу.

Строка меню мiстить 5 пiдменю: “Про програму”, “Моделювання”, “Тестування”, “Виведення результатів”, “Вихід”.