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 \n",NameM);
fprintf(fp2,"+-----------------+\n");
strcpy(s0,gcvt(K,3,&sb));
fprintf(fp2,"¦ fi ¦ F(%3s,fi) ¦\n",s0);
fprintf(fp2,"+-----+-----------¦\n");
for(i=1;i<=12;i++){
fprintf(fp2,"¦%2dп/6¦ %f ¦\n",i,f[i-1]);
}
fprintf(fp2,"+-----------------+\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дменю: “Про програму”, “Моделювання”, “Тестування”, “Виведення результатів”, “Вихід”.