Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Пример выполнения задания. Написать программу поиска простых корней функции f(x) = 4x – 7sinx на отрезке [a, b] c шагом h и точностью e методом деления отрезка пополам.
Написать программу поиска простых корней функции f (x) = 4 x – 7sin x на отрезке [ a, b ] c шагом h и точностью e методом деления отрезка пополам. Вид формы и полученные результаты представленный на рис. 7.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); }
Рис. 7.1
Рис. 7.2
|