![]() |
Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | |
|
Написать и отладить программу вычисления значения интеграла от функции f (x) = 4 x - 7sin x на интервале [-2, 3] методом Симпсона с выбором: по заданному количеству разбиений n и заданной точности e. Панель диалога будет иметь вид, представленный на рис. 8.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
}
Рис. 8.4
Дата публикования: 2015-02-22; Прочитано: 389 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!