Студопедия

Главная страница Случайная страница

КАТЕГОРИИ:

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Метод касательных (Ньютона)






Метод основывается на утверждении, что если на отрезке [a; b] содержится корень уравнения, то значения f(a) и f(b) имеют разные знаки, т.е. f(a)·f(b)< 0. Точность вычислений зависит от выбора точки, с которой начинаются вычисления. Выбор начальной точки x0 вычислений определяет условие . Схема метода аналогична предыдущим. Разница заключается в поиске значения точки c. Для этого в методе касательных используется уравнение касательной к графику функции: . Пусть первая координата т.С(сi; 0) – корень уравнения f(x)=0. Подставим координаты точки C в полученное уравнение. В итоге получаем уравнение для получения значений точек сi при вычислении корня исходного уравнения:

.

Если |ci-ci-1|> =eps, то вычисления продолжаются. Если |ci-ci-1|< eps, то вычисления можно прекратить, а за значение корня взять одно из этих значений, т.е. корень уравнения вычислен с заданной точность eps. Если нет, то вычисляется новое значение сi и т.д. Графически этот метод изображен на рис.16.

Опишем алгоритм и соответствующую программу для нахождения корней уравнения ln(x-3)=0 на отрезке [3.5; 5] с помощью этого метода:

Алгоритм Программа
объявление вещ: f_2p, fa, fb, a, b, c, c1, eps ввод а ввод b fa=ln(a-3) fb=ln(b-3) если fa*fb< 0 ввод eps f_2p=-1/(a-3)2 если fa*f_2p> 0 c1=a иначе c1=b все_если c=c1-ln(c1-3)/(1/(c1-3)) пока (|c-c1|> =eps) c1=c c=c1-ln(c1-3)/(1/(c1-3)) всё_цикл печать c печать ln(c-3) иначе печать “на отрезке нет корня” все_если   #include " stdio.h" #include " math.h" #include " iostream.h" #include " iomanip.h" int main() { float f_2p, fa, fb, a, b, c, c1, eps; cout< < " a="; cin> > a; cout< < " b="; cin> > b; fa=log(a-3); fb=log(b-3); if(fa*fb< 0) { cout< < " eps="; cin> > eps; f_2p=-1/pow(a-3, 2); if(fa*f_2p> 0) c1=a; else c1=b; c=c1-log(c1-3)/(1/(c1-3)); while(fabs(c-c1)> =eps) { c1=c; c= c1-log(c1-3)/(1/(c1-3)); } cout< < " корень уравнения х*="; cout< < c< < endl; cout< < " значение f(x*)=" < < log(c-3)< < endl; } else cout< < " неверно введены концы" < < " отрезка" < < endl; return 1; }

Поделиться с друзьями:

mylektsii.su - Мои Лекции - 2015-2024 год. (0.006 сек.)Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав Пожаловаться на материал