Обчислення означених інтегралів

Інформація про навчальний заклад

ВУЗ:
Національний університет Львівська політехніка
Інститут:
Не вказано
Факультет:
КН
Кафедра:
Кафедра автоматизованих систем управління

Інформація про роботу

Рік:
2011
Тип роботи:
Звіт до лабораторної роботи
Предмет:
Чисельні методи в інформатиці

Частина тексту файла (без зображень, графіків і формул):

Міністерство освіти і науки України Національний університет «Львівська політехніка» Кафедра автоматизованих систем управління Звіт до лабораторної роботи № 3 з курсу «Чисельні методи в інформатиці» на тему «Обчислення означених інтегралів» Мета роботи: вивчити методи наближених обчислень і запрограмувати алгоритми обчислення означених інтегралів. Короткі теоретичні відомості Формули прямокутників.             Нехай на відрізку задана неперервна функція . Потрібно обчислити інтеграл             Розіб’ємо відрізок  на n  рівних частин точками , i=0,1,…n-1, довжина кожної з яких дорівнює  . Через  позначимо значення функції  в точках  і складемо суми  або              Кожна з цих сум є інтегральною сумою для  на відрізку і тому наближено виражають означений інтеграл:                             (1)                                      (1/)             Ці формули називаються формулами прямокутників. 2. Формула трапецій.                     (3)             3. Формула парабол (Сімпсона).   4. Формула трьох восьмих: Якщо в формулі Ньютона-Котеса взяти n = 3, тобто функцію f(x) замінити інтерполяційним багаточленом третього степеня, побудованим за значення функції f(x) у точках x0=a, x1=a+h, x2=a+2h, x3=b, h=(b-a )/3. то одержимо таку квадратурну формулу:  де  Ця квадратурна формула називається малою квадратурною формулою трьох восьмих. Використовуючи цю формулу, легко записати велику квадратурну формулу трьох восьмих. Варіант 17 Обчислити інтеграл методом прямокутників, трапецій, парабол, трьох восьмих, Монте-Карло. Заданий інтеграл обчислити наближено та точно. 1.  2.  3.  Текст програми: //--------------------------------------------------------------------------- #include <vcl.h> #include <math.h> #pragma hdrstop #include "IntegralUn.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- float __fastcall TForm1::func(float arg1, float arg2=0) { switch(RadioGroup1->ItemIndex) { case 0: return (sin(arg1/17))/(cos(arg1/17)); case 1: return arg2*(sin(arg1/17))/(cos(arg1/17)); case 2: return atan(17*sin(arg1)); } } void __fastcall TForm1::Edit1KeyPress(TObject *Sender, char &Key) { if ((Key < '0' || Key > '9') && Key != 8 && Key != ',' && Key != '-') Key= 0; } //--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { int i, part = StrToFloat(Edit5->Text); float xa = StrToFloat(Edit1->Text), xb = StrToFloat(Edit2->Text), ya = StrToFloat(Edit4->Text), yb = StrToFloat(Edit3->Text), S=0; int k1=0,k2=0; float xh; if(RadioGroup1->ItemIndex!=1) { //ліві xh=(xb-xa)/part; for (i=0;i<part;i++) S+=func(xa+i*xh)*xh; LabeledEdit1->Text=FloatToStrF(S,ffFixed,14,6); //праві S=0; for (i=1;i<=part;i++) S+=func(xa+i*xh)*xh; LabeledEdit2->Text=FloatToStrF(S,ffFixed,14,6); //середні S=0; for (i=0;i<part;i++) S+=func(((xa+(i+1)*xh)+(xa+i*xh))/2)*xh; LabeledEdit3->Text=FloatToStrF(S,ffFixed,14,6); //трапеції S=0; for (i=1;i<part;i++) S+=func(xa+i*xh); S+=(func(xa)+func(xb))/2; S*=(xb-xa)/part; LabeledEdit4->Text=FloatToStrF(S,ffFixed,14,6); //парабола S=0; xh=(xb-xa)/(2*part); for (i=1;i<2*part;i++) { if (i%2) S+=4*func(xa+i*xh); else S+=2*func(xa+i*xh); } S+=func(xa)+func(xb); S*=xh/3; LabeledEdit5->Text=FloatToStrF(S,ffFixed,14,6); //три-восьмих S=0; xh=(xb-xa)/(3*part); for (i=1;i<3*part;i++) { if (i%3) S+=3*func(xa+i*xh); else S+=2*func(xa+i*xh); } S+=func(xa)+func(xb); S*=3/(float)8*xh; LabeledEdit6->Text=FloatToStrF(S,ffFixed,14,6); //Монте-Карло srand(time(NULL)); rand(); S=0; part=1000000; xh=(xb-xa)/(3*part); for (i=0;i<part;i++) { float x = (float)rand()/(float)RAND_MAX*xb+xa, y = (float)rand()/(float)RAND_MAX*100-50; if ((func(x)>=0) && (y>=0) && (y<=func(x))) k1++; if ((func(x)<0) && (y<0) && (y>func(x))) k2++; } S=(xb-xa)*100*k1/part-(xb-xa)*100*k2/part; LabeledEdit7->Text=FloatToStrF(S,ffFixed,14,6); } else { //Монте-Карло srand(time(NULL)); rand(); S=0; part=1000000; k1=0,k2=0; xh=(xb-xa)/(3*part); for (i=0;i<part;i++) { float x = (float)rand()/(float)RAND_MAX*xb+xa, y = (float)rand()/(float)RAND_MAX*yb+ya, z = (float)rand()/(float)RAND_MAX*100-50; if ((func(x,y)>=0) && (z>=0) && (z<=func(x,y))) k1++; if ((func(x,y)<0) && (z<0) && (z>func(x,y))) k2++; } S=(xb-xa)*(yb-ya)*100*k1/part-(xb-xa)*(yb-ya)*100*k2/part; LabeledEdit7->Text=FloatToStrF(S,ffFixed,14,6); } } //--------------------------------------------------------------------------- Результат виконання програми:   Висновок: На цій лабораторній роботі я вивчив методи наближених обчислень і запрограмувати алгоритми обчислення означених інтегралів.
Антиботан аватар за замовчуванням

20.02.2013 20:02-

Коментарі

Ви не можете залишити коментар. Для цього, будь ласка, увійдіть або зареєструйтесь.

Ділись своїми роботами та отримуй миттєві бонуси!

Маєш корисні навчальні матеріали, які припадають пилом на твоєму комп'ютері? Розрахункові, лабораторні, практичні чи контрольні роботи — завантажуй їх прямо зараз і одразу отримуй бали на свій рахунок! Заархівуй всі файли в один .zip (до 100 МБ) або завантажуй кожен файл окремо. Внесок у спільноту – це легкий спосіб допомогти іншим та отримати додаткові можливості на сайті. Твої старі роботи можуть приносити тобі нові нагороди!
Нічого не вибрано
0%

Оголошення від адміністратора

Антиботан аватар за замовчуванням

Подякувати Студентському архіву довільною сумою

Admin

26.02.2023 12:38

Дякуємо, що користуєтесь нашим архівом!