|
|||
Московский Авиационный ИнститутМосковский Авиационный Институт (Национальный Исследовательский Университет)
Факультет радиоэлектроники летательных аппаратов Кафедра 404 Работа по дисциплине «ИНФОРМАТИКА»
“Численное интегрирование”
Выполнил: Студент группы М4О-101Б-19 Прозоров Е. И.
Принял: Доцент кафедры 403 Кошелькова Л.В. Москва 2020 Задание Вариант 15 Разработать схему алгоритма, составить программу на С++ Builder для вычисления численного интеграла различными методами. Вычисленному при заданных пределах интегрирования a = -0,025 и b = 1,88 с погрешностью ɛ = 10-3 ÷ 10-6
Анализ задания
Входные данные: 1. C – нижняя граница интегрирования, тип – вещественный; 2. D – верхняя граница интегрирования, тип – вещественный; 3. Eps – погрешность вычисления интеграла, тип – вещественный; 4. Km – предельное число повторений цикла, тип – целый.
Выходные данные: 1. Er,Er2,Er3 – признак ошибки при вычислении интеграла, тип – целый; 2. LT,LS,LP – Количество итераций, тип – целый; 3. In,ln2,ln3 – численное значение интеграла, тип – вещественный.
В алгоритме выполняются следующие функции: · Ввод исходных данных; · Вычисление значения определенного интеграла методом трапеций; · Вычисление значения определенного интеграла методом Симпсона; · Вычисление значения определенного интеграла методом Прямоугольников; · Вывод результатов вычислений.
Текст программы на языке программирования C++ Builder и результаты её выполнения //---------------------------------------------------------------------------
#include <vcl.h> #pragma hdrstop
#include "Unit1.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; //--------------------------------------------------------------------------- double F(double); double F(double X) { double F=pow(M_E,X)*sin(16*X)*sin(5*X); return F ; } //Текст функции вычисления интеграла с заданной погрешностью методом трапеции void Trap(double , double , double , int &, int *, int , double &); void Trap(double C, double D, double Eps, int <, int *Er, int Km, double &In) { double Y1, Yn, H, Del, Int1, X; int I, J, N; Y1 = F(C); Yn = F(D); Int1 = 0; N = 2; LT=0; *Er = 1; J = 1; while (J <= Km) { H = (D - C) / N; X = C + H; In = 0;
for (I = 1; I<N; I++) { In = In + F(X); X = X + H; } In = H * (Y1 / 2 + Yn / 2 + In); Del = fabs(Int1 - In); if (Del < Eps) { LT = J; J = Km; *Er = 0; } else { Int1 = In; N = N * 2; } J = J + 1; } }
void Sim(double C, double D, double Eps, int Km, int *Er2, int &LS, double &In2) { double Int1, Y1, Yn, S4, S2, H, Del, X, Loc; int I, J, K2; Int1 = 0; Y1 = F(C); Yn = F(D); K2 = 2; LS=0; *Er2 = 1; J = 1; while (J <= Km) { H = (D - C) / K2; In2 = 0; S2 = 0; S4 = 0; I = 1; X = C + H; do { if ( (I % 2) != 0) S4 = S4 + F(X); else S2 = S2 + F(X); Loc = 4 * S4 + 2 * S2; I = I + 1; X = X + H; } while (I < K2); In2 = H * (Y1 + Yn + Loc) / 3; Del = fabs(Int1 - In2); if (Del < Eps) { *Er2 = 0; LS = J; J = Km; } else { Int1 = In2; K2 = K2 * 2; } J = J + 1; } }
void Prm(double C, double D, double Eps, int &LP, int *Er3, int Km, double &In3) { double Y1, Yn, H, Del, Int1, X; int I, J, N3; Y1 = F(C); Yn = F(D); Int1= 0; N3 = 2; LP=0; *Er3 = 1; J = 1; while (J <= Km) { H = (D - C) / N3; X = C; In3 = 0; for (I = 1; I<N3; I++) { In3 = In3 + F(X); X = X + H; } In3 = H * (Y1 + Yn + In3); Del = fabs(Int1 - In3); if (Del < Eps) { LP = J; J = Km; *Er3 = 0; } else { Int1 = In3; N3 = N3 * 2; } J = J + 1; } }
__fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) {
} //--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { double C, D, Eps, In, In2, In3; int Er, Er2, Er3, Km, LT, LS, LP; C=StrToFloat(Edit1->Text); D=StrToFloat(Edit2->Text); Eps=StrToFloat(Edit3->Text); Km=StrToInt(Edit4->Text); Trap(C, D, Eps, LT, &Er, Km, In); if (Er == 1) ShowMessage("Интеграл не найден за Km итераций"); Sim(C, D, Eps, Km, &Er2, LS, In2); if (Er2 == 1) ShowMessage("Интеграл не найден за Km итераций"); Prm(C, D, Eps, LP, &Er3, Km, In3); if (Er3 == 1) ShowMessage("Интеграл не найден за Km итераций"); Edit6->Text=FloatToStr(In); Edit5->Text=FloatToStr(In2); Edit7->Text=FloatToStr(In3); Edit9->Text=IntToStr(LT); Edit10->Text=IntToStr(LS); Edit8->Text=IntToStr(LP); } //--------------------------------------------------------------------------- void __fastcall TForm1::Button2Click(TObject *Sender) { Close(); } //---------------------------------------------------------------------------
Рис. 1 Проект формы Рис. 2 Результат выполнения
Проверка в Wolfram Alfa
Рис. 3 Результат вычислений в Wolfram Alpha
|
|||
|