Зміст
Вступ
1. Огляд та варіантний аналіз чисельних методів дослідження еліптичного інтегралу першого порядку
1.1. Основні поняття та визначення
1.2. Класифікація методів рішення поставленої задачі
1.3. Опис методів дослідження еліптичного інтегралу першого порядку на ЕОМ
1.4 Уточнена постановка задачі
2. Розробка алгоритмів дослідження еліптичного інтегралу першого порядку
на ЕОМ
2.1 Планування вхідних та вихідних даних
2.2 Аналіз задач, які вирішуються при дослідженні еліптичного інтегралу першого порядку на ЕОМ
2.3 Описовий алгоритм головної програми
2.4 Схема алгоритму головної програми
2.5 Опис основних функцій моделювання
2.6 Структура комплексу програм для дослідження еліптичного інтегралу
першого порядку на ЕОМ
3. Лістинг програми
4. Розробка тестів та аналіз результатів дослідження
4.1 Класифікація експериментів
4.2 Опис експериментальних досліджень
4.3 Дослідження еліптичного інтегралу першого порядку на ЕОМ
4.4 Тестова перевірка чисельних методів
5. Оцінка похибок отриманих результатів
6. Оцінка ефективності комплексу програм для дослідження
7. Розробка пакету документів для супроводження комплексу програм
7.1 Розробка інструкції програмісту
7.2 Розробка інструкції користувачу
Висновки
Література
Додатки
Додаток А. Технічне завдання.
Додаток Б Структура дискети.
Анотація
В даній курсовій роботі розроблено комплекс програм для застосування точного рiвняння Ейлера-Бернулi для великих деформацiй бруса, а саме для обчислення значення еліптичного інтеграла за допомогою чисельних методів Сімпсона, Чебишева та Гауса. Описано алгоритм розв'язку поставленої задачі. Складено програму на мові Turbo C++.
Вступ
В наш час науково-технічний прогрес невідривно пов’язаний з бурхливим розвитком систем управління і автоматики. Автоматика – це галузь науки і техніки, яка охоплює теорію та принципи побудови систем управління процесами, що діють без безпосередньої участі людини. У відповідності до загальних принципів управління різними процесами, автоматичне управління здійснюється на основі інформації з використанням комплексу технічних засобів.
Автоматизація технологічних процесів на основі застосування автоматизованих станків, машин та механізмів, робототехнічних комплексів, сучасних засобів автоматики та обчислювальної техніки складає один з головних напрямків науково технічного прогресу в усіх галузях народного господарства. Вирішення задач автоматизації в наш час неможливе без застосування досягнень мікроелектроніки, яка забезпечує випуск елементної бази для пристроїв автоматики та систем управління в цілому.
1 Огляд та варіантний аналіз чисельних методів дослідження еліптичного інтегралу першого порядку
1.1 Основні поняття та визначення
Інтеграл є основним поняттям інтегрального числення.
Нехай f(x) – неперервна функція, а функція F(x) така, що її похідна дорівнює f(x), тобто F’(x)=f(x). Таку функцію F(x) називають інтегралом, або первісною функцією, відносно f(x). Разом з F(x) первісною відносно f(x) є і F(x)+С, де С – довільна константа. Вираз F(x)+С називається невизначеним інтегралом для f(x) і позначають .
Нехай функція f(x) неперервна на відрізку [a, b]. Розділимо [a, b] на частини точками a=x0
<x1
<x2
<…<xn
=b і складемо так звану інтегральну суму
,
де xi-1
<ci
<xi
, Dxi
=xi
-xi-1
. Визначеним інтегралом функції на відрізку [a, b] називається границя, до якої прямує інтегральна сума, коли найбільша різниця Dxi
прямує до нуля; його позначають .
Застосування точного рiвняння Ейлера-Бернулi для великих деформацiй бруса призводить до еліптичних інтегралів. Еліптичний інтеграл першого порядку (роду) записується у вигляді:
,
де 0£К£1.
Чисельні методи – методи наближеного вирішення математичних задач, які зводяться до скінченого числа елементарних операцій над числами. Під елементарними операціями розуміють арифметичні та логічні дії, а також допоміжні операції (записи проміжних операцій, вибірки із таблиць тощо). Розробка нових числових методів і застосування їх на ЕОМ привели до виникнення обчислювальної математики.
1.2 Класифікація методів рішення поставленої задачі
Рис. 1.1 Класифікація методів чисельного обчислення визначених інтегралів
Метод Сімпсона – частинний випадок метода Ньютона-Котеса при n=2. Цей метод досить точний навіть для многочленів третього степеня. Ця особливість методу пояснює його переважне застосування на ЕОМ.
Метод Чебишева – чисельний метод обчислення визначених інтегралів, який характеризується великою точністю обчислень для поліномів степеня n.
Метод Гауса - чисельний метод обчислення визначених інтегралів, який базується на інтерполяції поліномом Лагранжа, але абсциси вибираються із умови забезпечення мінімума похибки інтерполяції. Цей метод забезпечую підвищену точність.
1.3 Опис методів дослідження еліптичного інтегралу першого порядку на ЕОМ
Метод Сімпсона реалізується наступною формулою:
,
де h - крок інтегрування.
Похибка методу R~(h5
).
Метод Чебишева реалізується застосуванням формули:
,
де ;
; ; , при n=3.
Метод Гауса реалізується за допомогою формули:
,
де ; ; ; ; ; , при n=3.
Дає похибку R~(h7
).
Для підвищення точності інтегрування відрізок [a, b] розділяється на m частин.
1.4 Уточнена постановка задачі
Необхідно розробити комплекс програм для застосування точного рiвняння Ейлера-Бернулi для великих деформацiй бруса, а саме для обчислення значення еліптичного інтеграла за допомогою чисельних методів Сімпсона, Чебишева та Гауса.
2 Розробка алгоритмів дослідження еліптичного інтегралу першого порядку на ЕОМ
2.1 Планування вхідних та вихідних даних
Таблиця 2.1 - Перелік вхідних даних
Математичний зміст |
Іденти-фікатор |
Діапазон значень |
Тип даних |
Приклад використання |
Параметр К |
К |
3.4E-38-3.4E+38 |
Float |
sqrt(1-pow(K,2.0)*pow(sin(pow(O,K)),2.0)); |
Таблиця 2.2 - Перелік вихідних даних
Математичний зміст |
Ідентифікатор |
Діапазон значень |
Тип даних |
Приклад використання |
Значення інтегралу |
s |
3.4E-38-3.4E+38 |
Float |
s=s+F(x); |
2.2 Аналіз задач, які вирішуються при дослідженні еліптичного інтегралу першого порядку на ЕОМ
Дана програма дозволяє чисельно обчислювати значення елiптичного iнтегралу за допомогою чисельних методів Сімпсона, Чебишева та Гауса.
2.3 Описовий алгоритм основної програми
1. Виведення на екран строки меню та строки підказки.
2. При виборі в підменю “Про програму” пункту ”Про автора” вивести вікно з інформацією про автора програми.
3. Перейти до пункту 1.
4. При виборі в підменю “Про програму” пункту ”Завдання” вивести вікно з інформацією про завдання курсової роботи.
5. Перейти до пункту 1.
6. При виборі в підменю “Моделювання” пункту ”Сімпсон” вивести діалогове вікно для введення значення параметра К.
7. Знайти значення визначеного інтегралу за методом Сімсона.
8. Вивести на екран таблицю значень інтегралів.
9. Очікувати натиснення будь-якої клавіші.
10. Перейти до пункту 1.
11. При виборі в підменю “Моделювання” пункту ”Чебишев” вивести діалогове вікно для введення значення параметра К.
12. Знайти значення визначеного інтегралу за методом Чебишева.
13. Вивести на екран таблицю значень інтегралів.
14. Очікувати натиснення будь-якої клавіші.
15. Перейти до пункту 1.
16. При виборі в підменю “Моделювання” пункту ”Гаус” вивести діалогове вікно для введення значення параметра К.
17. Знайти значення визначеного інтегралу за методом Гауса.
18. Вивести на екран таблицю значень інтегралів.
19. Очікувати натиснення будь-якої клавіші.
20. Перейти до пункту 1.
21. При виборі в підменю “Тестування” пункту ”Тест1” знайти значення визначеного інтегралу за методом Сімсона.
22. Вивести на екран таблицю значень інтегралів, а також тестове значення інтегралу, абсолютну та відносну похибку.
23. Очікувати натиснення будь-якої клавіші.
24. Перейти до пункту 1.
25. При виборі в підменю “Тестування” пункту ”Тест2” знайти значення визначеного інтегралу за методом Чебишева.
26. Вивести на екран таблицю значень інтегралів, а також тестове значення інтегралу, абсолютну та відносну похибку.
27. Очікувати натиснення будь-якої клавіші.
28. Перейти до пункту 1.
29. При виборі в підменю “Тестування” пункту ”Тест3” знайти значення визначеного інтегралу за методом Гауса.
30. Вивести на екран таблицю значень інтегралів, а також тестове значення інтегралу, абсолютну та відносну похибку.
31. Очікувати натиснення будь-якої клавіші.
32. Перейти до пункту 1.
33. При виборі в підменю “Виведення результатів” пункту ”Читати файл” підпункту “На екран” вивести із масиву на екран таблицю інтегралів.
34. Очікувати натиснення будь-якої клавіші.
35. Перейти до пункту 1.
36. При виборі в підменю “Виведення результатів” пункту ”Читати файл” підпункту “Друк” вивести із масиву на друк таблицю інтегралів.
37. Очікувати натиснення будь-якої клавіші.
38. Перейти до пункту 1.
39. При виборі в підменю “Вихід” вийти із програми.
2.4 Схема алгоритму головної програми
2.5 Опис основних функцій моделювання
Основними функціями при моделюванні заданої системи є:
1) Simpson(int m) – функція чисельного обчислення значення визначеного iнтегралу методом Сімпсона;
2) Chebyshev(int m) – функція чисельного обчислення значення визначеного iнтегралу методом Чебишева;
3) Gaus(int m1) – функція чисельного обчислення значення визначеного iнтегралу методом Гауса;
4) F(float O) – підінтегральна функція.
Функція Simpson
1) Назва функції – Simpson.
2) Заголовок функції - Simpson(int m).
3) Вхідні та вихідні дані.
Таблиця 2.3 - Перелік вхідних даних
Математичний зміст |
Іденти-фікатор |
Діапазон значень |
Тип даних |
Приклад використання |
Значення підінтегральної функції |
F |
3.4E-38-3.4E+38 |
Float |
s=s+2*F(a); |
Таблиця 2.4 - Перелік вихідних даних
Математичний зміст |
Ідентифікатор |
Діапазон значень |
Тип даних |
Приклад використання |
Значення інтегралу |
s |
3.4E-38-3.4E+38 |
Float |
s=s+2*F(a); |
4) Логічна схема програми
|
||
Функція Chebyshev
1) Назва функції – Chebyshev.
2) Заголовок функції - Chebyshev(int m).
3) Вхідні та вихідні дані.
Таблиця 2.5 - Перелік вхідних даних
Математичний зміст |
Іденти-фікатор |
Діапазон значень |
Тип даних |
Приклад використання |
Значення підінтегральної функції |
F |
3.4E-38-3.4E+38 |
Float |
s=s+F(x); |
Таблиця 2.6 - Перелік вихідних даних
Математичний зміст |
Ідентифікатор |
Діапазон значень |
Тип даних |
Приклад використання |
Значення інтегралу |
s |
3.4E-38-3.4E+38 |
Float |
s=s+F(x); |
4) Логічна схема програми
Функція Gaus
1) Назва функції – Gaus.
2) Заголовок функції - Gaus(int m1).
3) Вхідні та вихідні дані.
Таблиця 2.7 - Перелік вхідних даних
Математичний зміст |
Іденти-фікатор |
Діапазон значень |
Тип даних |
Приклад використання |
Значення підінтегральної функції |
F |
3.4E-38-3.4E+38 |
Float |
s=s+A[k-1]*F(x+h/2.0+t[k-1]*h/2.0); |
Таблиця 2.8 - Перелік вихідних даних
Математичний зміст |
Ідентифікатор |
Діапазон значень |
Тип даних |
Приклад використання |
Значення інтегралу |
s |
3.4E-38-3.4E+38 |
Float |
s=s*h/2.0; |
4) Логічна схема програми
Функція F
1) Назва функції – F.
2) Заголовок функції - F(int n,Float O).
3) Вхідні та вихідні дані.
Таблиця 2.9 - Перелік вхідних даних
Математичний зміст |
Іденти-фікатор |
Діапазон значень |
Тип даних |
Приклад використання |
Параметр К |
К |
3.4E-38-3.4E+38 |
Float |
return sqrt(1-pow(K,2.0)*pow(sin(pow(O,K)),2.0)); |
Таблиця 2.10 - Перелік вихідних даних
Математичний зміст |
Ідентифікатор |
Діапазон значень |
Тип даних |
Приклад використання |
Значення підінтегральної функції |
F |
3.4E-38-3.4E+38 |
Float |
F(float O) |
4) Логічна схема програми
2.6 Структура комплексу програм для дослідження еліптичного інтегралу першого порядку на ЕОМ
Розроблена програма містить наступні функції:
1) main() – головна програма;
2) Simpson(int m) – функція чисельного обчислення значення визначеного iнтегралу методом Сімпсона;
3) Chebyshev(int m) – функція чисельного обчислення значення визначеного iнтегралу методом Чебишева;
4) Gaus(int m) – функція чисельного обчислення значення визначеного iнтегралу методом Гауса;
5) F(int n,float O) – підінтегральна функція;
6) cls1() - функція очищення робочого поля програми;
7) druk() - функцiя виводу результатiв на друк;
8) list() - функцiя виводу результатiв на екран;
9) Vvod() - функцiя введення початкових даних;
10) about() – функцiя виведення вiдомостей про автора;
11) zavdannja() – функцiя виведення завдання.
3 Лістинг програми
* Застосування точного рiвняння Ейлера-Бернулi для великих деформацiй бруса */
#include<conio.h>
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
const dx1=1,dy1=2,dx2=20;
const ct=4;
const ctf=3;
const ctfa=1;
const ctfp=7;
const cr=15;
const Pi=3.14;
float zr=0.52942863,zrS=1.398717474,zrC=1.398717533,zrG=1.398717474,aS=0.0,bS=1.0;
float K=0.5;
char s[20],s0[20],sb[20];
FILE *fp1,*fp2;
int i,j;
float x,e,ds;
float y[7],f[12];
char NameM[9];
void cls1(){ /* Очищення робочого поля програми */
int short i;
for(i=1;i<24;i++){
gotoxy(1,i+1);
textattr(15 + (0 << 4));
cprintf("____________________________________________________");
}
}
void about(){ /* Виведення вiдомостей про автора */
cls1();
gotoxy(dx2,2);
textattr(ct+ (ctfp << 4));
cprintf("+---- Про автора -----------------------+n"); gotoxy(dx2,3);
cprintf("¦ Автор: ст. гр. 5АС-02 Болоненков А.С. ¦n"); gotoxy(dx2,4);
cprintf("+---------------------------------------+");
}
void zavdannja(){ /* Виведення допомоги */
/* cls1();*/
gotoxy(dx2,2);
textattr(ct+ (ctfp << 4));
cprintf("+----
Завдання ---+n"); gotoxy(dx2,3);
cprintf("¦ Застосування точного рiвняння Ейлера-Бернулi для великих ¦n"); gotoxy(dx2,4);
cprintf("¦деформацiй бруса призводить до елiптичних iнтегралiв. Елiп-¦n"); gotoxy(dx2,5);
cprintf("¦тичний iнтеграл першого порядку (роду) записуэться у вигля-¦n"); gotoxy(dx2,6);
cprintf("¦дi: ф¦n"); gotoxy(dx2,7);
cprintf("¦+- ----------+ ¦n"); gotoxy(dx2,8);
cprintf("¦¦ / 2 2 K¦n"); gotoxy(dx2,9);
cprintf("¦ F(K,ф)=¦/1-K*sin O dO, ¦n"); gotoxy(dx2,10);
cprintf("¦¦¦n"); gotoxy(dx2,11);
cprintf("¦ -+¦n"); gotoxy(dx2,12);
cprintf("¦ 0¦n"); gotoxy(dx2,13);
cprintf("¦ Дослiдити iнтеграл на ЕОМ при рiзних значеннях ф за допо-¦n"); gotoxy(dx2,14);
cprintf("¦могою методiв Сiмпсона, Чебишева, Гауса. Результати розра-¦n"); gotoxy(dx2,15);
cprintf("¦хункiв звести в таблицю. Точнiсть перевiрити, зрiвнюючи з¦n"); gotoxy(dx2,16);
cprintf("¦табличним значенням. ¦n"); gotoxy(dx2,17);
cprintf("¦ F(0,5;п/6)=0,52942863. ¦n"); gotoxy(dx2,18);
cprintf("¦ Зробити висновки. ¦n"); gotoxy(dx2,19);
cprintf("+-----------------------------------------------------------+");
}
float F(int n,float O){ /* пiдiнтегральна функцiя */
if(n==0) return sqrt(1-pow(K,2.0)*pow(sin(pow(O,K)),2.0));
if(n>=1) return sqrt(2.0*O+1.0);
}
void Simpson(int m){ /* Обчислення iнтегралу методом Сiмпсона */
const n=8;
int i,j,k;
float b0,b9,a,h,s;
cls1();
textattr(ct+ (ctfp << 4));
gotoxy(1,2);
cprintf(" Метод Сiмпсона "); strcpy(NameM,"Сiмпсона");
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;
a=b0;
h=(b9-b0)/n;
s=F(m,b0)+F(m,b9);
k=1;
for(j=1;j<=n-1;j++){
a=a+h;
if(k!=1) s=s+2*F(m,a); else s=s+4*F(m,a);
k=-k;
}
s=s*h/3; f[i-1]=s;
cprintf("¦%2dп/6¦ %f ¦",i,s); gotoxy(1,6+i);
/*if(m==1)*/
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;
a=b0;
h=(b9-b0)/n;
s=F(m,b0)+F(m,b9);
k=1;
for(j=1;j<=n-1;j++){
a=a+h;
if(k!=1) s=s+2*F(m,a); else s=s+4*F(m,a);
k=-k;
}
s=s*h/3; f[i-1]=s;
cprintf(" - тест"); gotoxy(
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дменю: “Про програму”, “Моделювання”, “Тестування”, “Виведення результатів”, “Вихід”.
В п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 с.