![]() |
Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | |
|
Написать программу поиска простых корней функции f (x) = 4 x – 7sin x на отрезке [ a, b ] c шагом h и точностью e методом деления отрезка пополам.
Вид формы и полученные результаты представлены на рис. 6.2.
Текст программы Unit 1. cpp может иметь следующий вид:
typedef double (*type_f)(double);
double fun(double);
double Metod_Del_2(type_f,double,double,double);
//--------------------- Текст функции-обработчика кнопки Расчет ----------------------
double a, b, x, eps, h, y, r;
int nom=0, iter;
a = StrToFloat(Edit1->Text); b = StrToFloat(Edit2->Text);
eps = StrToFloat(Edit3->Text);
h = StrToFloat(Edit4->Text);
Memo1->Lines->Add(" Функция 4*x - 7*sin(x)");
Chart1->Series[0]->Clear();
for(x = a-h; x< b+h; x+=h)
Chart1->Series[0]->AddXY(x,fun(x));
Memo1->Lines->Add("------ Корни ------");
for(x = a; x<=b; x+=h){
if(fun(x)*fun(x+h)<0){
nom++;
y = Metod_Del_2(fun,x,x+h,eps);
Memo1->Lines->Add(IntToStr(nom)+"-й = "+FloatToStrF(y,ffFixed,8,6));
}
}
if(nom==0) Memo1->Lines->Add("На отрезке корней НЕТ!");
//------------------------- Метод деления отрезка пополам ---------------------------------
double Metod_Del_2(type_f f,double x0,double x1,double eps) {
double x2,y0,y2;
y0=f(x0);
do {
x2=(x0+x1)/2; y2=f(x2);
if(y0*y2 > 0) {
x0 = x2; y0 = y2;
}
else x1 = x2;
} while (fabs(x1-x0)>eps);
return (x0+x1)/2;
}
//------------------------------- Заданная функция f (x) ----------------------------------------
double fun(double x) {
return 4*x - 7*sin(x);
}
Рис. 6.1
Рис. 6.2
Дата публикования: 2015-02-22; Прочитано: 216 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!