Пример выполнения задания

Написать и отладить программу вычисления интеграла от функции f(x) = 4x - 7sinx на интервале [-2, 3] методом Симпсона с выбором: по заданному количеству разбиений n и заданной точности e. Панель диалога будет иметь вид, представленный на рис. 9.4.

Как и в предыдущих примерах, приведем только тексты функций-обработчиков соответствующих кнопок:

typedef double (*type_f)(double);

double fun(double);

double Simps(type_f, double, double, int);

//--------------------- Текст функции-обработчика кнопки РАСЧЕТ --------------------

double a, b, x, eps, h, Int1, Int2, pogr;

int n, n1;

a = StrToFloat(Edit1->Text); b = StrToFloat(Edit2->Text);

eps = StrToFloat(Edit3->Text); n = StrToInt(Edit4->Text);

h = (b - a)/100; // Шаг вывода исходной функции

Chart1->Series[0]->Clear();

for(x = a-h; x< b+h; x+=h)

Chart1->Series[0]->AddXY(x,fun(x));

switch(RadioGroup2->ItemIndex) {

case 0:

Memo1->Lines->Add("Расчет по разбиению на n = " + IntToStr(n));

Int1 = Simps(fun,a,b,n);

break;

case 1:

n1=2;

Memo1->Lines->Add("Расчет по точности eps");

Int1 = Simps(fun,a,b,n1);

do {

n1*=2;

Int2 = Simps(fun,a,b,n1);

pogr = fabs(Int2-Int1);

Int1 = Int2;

} while(pogr > eps);

Memo1->Lines->Add("При n = " +IntToStr(n1));

break;

}

Memo1->Lines->Add("Значение интеграла = " + FloatToStrF(Int1,ffFixed,8,6));

//------------------------- Метод Симпсона -------------------------------

double Simps(type_f f, double a, double b, int n) {

double s=0,h,x;

h=(b-a)/n;

x=a;

for(int i=1; i<=n; i++) {

s+=f(x)+4*f(x+h/2)+f(x+h);

x+=h;

}

return s*h/6;

}

//----------------- Подынтегральная функция f (x) ---------------------

double fun(double x) {

return 4*x - 7*sin(x); // На интервале [-2, 3] значение 5,983

}

Рис. 9.4


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: