}
}
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дменю: “Про програму”, “Моделювання”, “Тестування”, “Виведення результатів”, “Вихід”.
В пiдменю “Про програму” мiстяться наступнi пункти:
- “Про автора” – для виведення інформації про автора програми;
- “Завдання” - для виведення інформації про завдання на курсову роботу (F1).
В пiдменю “Моделювання” мiстяться наступнi пункти:
- “Сімпсон” – для чисельного рішенення визначеного інтегралу методом Сімпсона;
- “Чебишев” – для чисельного рішенення визначеного інтегралу методом Чебишева;
- “Гаус” – для чисельного рішенення визначеного інтегралу методом Гауса.
В пiдменю “Тестування” мiстяться наступнi пункти:
- “Тест1” - для тестового рішенення визначеного інтегралу методом Сімпсона;
- “Тест2” - для тестового рішенення визначеного інтегралу методом Чебишева;
- “Тест3” - для тестового рішенення визначеного інтегралу методом Гауса.
В пiдменю “Виведення результатів” мiстяться наступнi пункти:
- “Читати файл” – для
читання таблиці інтегралів.
Цей пункт містить наступнi підпункти:
- “На екран” – для виведення таблиці інтегралів на екран;
- “Друк” – для виведення таблиці інтегралів на друк.
Підменю “Вихiд” призначене для виходу з програми (Alt-F4).
Висновки В даній курсовій роботі розроблено комплекс програм для застосування точного рiвняння Ейлера-Бернулi для великих деформацiй бруса, а саме для обчислення значення еліптичного інтеграла за допомогою чисельних методів Сімпсона, Чебишева та Гауса.
В розділі 1 описано короткі теоретичні відомості, присвячені вибору чисельного методу для розв’язання поставленої задачі.
В розділі 2 розроблено алгоритми моделювання, а саме: планування вхідних та вихідних даних, описано задачі, які вирішує система, наведено описовий алгоритм головної програми, зображено схему алгоритму головної програми, описано основні функції моделювання.
В розділі 3 подано лістинг всієї програми.
В розділі 4 проведено аналіз результатів досліджень, який показав, що значення інтегралу, отримані різними методами: Сімпсона, Чебишева, Гауса відрізняються несуттєво.
В розділі 5 здійснено оцінку похибки отриманих результатів, в результаті якої встановлено, що відносна похибка розрахунків дуже мала, що є цілком прийнятним. Найбільш точний метод Гауса.
В розділі 6 проведено оцінку ефективності комплексу програм для дослідження, в результаті якого ми прийшли до висновку, що програма є ефективною.
В розділі 7 розроблено пакет документів на супроводження програми: інструкція програмісту, інструкція користувачу.
Додаток А Міністерство освіти і науки України
Вінницький національний технічний університет
Інститут автоматики електроніки та комп’ютерних систем управління
Кафедра комп’ютерних систем управління
УзгодженоРозроблено
Керівник __________С.М. Москвіна
Студент_________ А.С. Болоненков
”_____” __________2006р.
Технічне завдання
на
виконання курсової роботи «Дослідження еліптичного інтегралу першого порядку на ЕОМ за допомогою чисельних методів»
При розробці даної роботи необхідно виконувати слідуючи етапи:
1.1 Найменування та галузь застосування об’єкта розробки: цей комплекс програм може бути застосований на будь-якому підприємстві для полегшення та покращення результатів роботи інженерів
1.2 Підстава для проведення роботи: дослід штучного інтелекту
1.3 Дата початку роботи:8.01.06.
1.4 Дата закінчення роботи: 10.04.06.
1.5 Мета призначення розробки: створити як найкращий комплекс програм для полегшення та покращення роботи інженера підприємства
1.6 Вимоги до надійності системи: використання структурного програмування, окреме підключення модулів, єдине меню, тощо – усе це забезпечує надійність системи.
Програмне забезпечення та супроводжуюча текстова документація повинна задовільнити таким гостам:
ГОСТ 19.701-90 (МСО 5807-85) ГОСТ 19.101-77 (СТСЄВ 1626-7а)
ГОСТ 19.781-74 ГОСТ 7.1-84 ДСТУ 3008-85
ГОСТ 19.401-78 ГОСТ 19.106-78
1.7 Стадії та етапи розробки:
1 етап: розробка індивідуального та технічного завдання.(до 15.01.06)
2 етап: огляд та аналіз методів дослідження еліптичного інтегралу першого порядку на
ЕОМ (до 1.02.6.
3 етап: розробка алгоритмів дослідження еліптичного інтегралу першого порядку на ЕОМ (до 20.02.06).
4 етап: розробка керуючої програми, яка повинна працювати в режимі багато ієрархічного меню (до 10.03.06).
5 етап: об’єднання всіх програмних модулів та
тестування керуючої програми (до 15.03.06)
6 етап: розробка тестів, тестування та демонстрація роботи всього комплексу (до 15.03.06).
7 етап: розробка технічної документації та пояснювальної записки (до 20.03.06).
8 етап: вимоги до безпеки: розроблене
програмне забезпечення повинно
відповідати вимогам Сніп та ДЕСТів до робочого місця оператора ЕОМ.
Додаток Б
Структура дискети
Дискета складається з двох розділів:
1. Текст
2. Програма
ТекстПрограма
- Титульний лист.doc- Integral.cpp
- Завдання.doc- Integral.exe
- Зміст.doc
- Вступ.doc
- Анотація.doc
- Глава №1.doc
- Глава №2.doc
- Глава №3.doc
- Глава №4.doc
- Глава №5.doc
- Глава №6.doc
- Глава №7.doc
- Висновки.doc
- Література.doc
- Додаток А.doc
- Додаток Б.doc
Література 1. Керниган Б., Ритчи Б. Язык программирования Си. - М.: Финансы и
статистика, 1985. – 205 с.
2. Уинер Р. Язык Турбо Си. - М.: Мир, 1991 – 363 с.
3. Лэнгсам Й., Огенстайн М., Тененбаум А. Структуры данных для
персональных ЭВМ. - М.: Мир,1989 – 145 с.
4. Вирт Н. Алгоритмы и структуры данных. - М.: Мир, 1978 – 403 с.
5. Стивенс А. Техника программирования на Турбо Си. - Мир, 1991 – 322 с.
6. Ракитин Т.А., Первушин В.А. “Практическое руководство по численным методам с приложением программ на языке Basic“
7. Крылов В.И. “Приближенные вычисления интегралов“ - М. : Физмат.
8. Міщенко С.М.,
Конспект лекцій з обчислювальних методів та застосування ЕОМ, ВНТУ, 2004.
9. Дьяконов В.П. Справочник по алгоритмам и программам на языке бейсик для персональных ЭВМ: Справочник. – М.:
Наука. Гл. ред. физ-мат. лит., 1987. – 240 с.