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

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

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

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

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

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

Міністерство освіти і науки України Національний університет «Львівська політехніка» Кафедра автоматизованих систем управління Звіт до лабораторної роботи № 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:49

Коментарі

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

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

Нічого не вибрано
0%

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

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

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

Admin

26.02.2023 12:38

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