4). Метод хорд
В этом методе нелинейная функция f(х) на отделенном интервале [а, b]
заменяется линейной, в качестве которой берется хорда — прямая,
стягивающая концы нелинейной функции. Эта хорда определяется как прямая, проходящая через точки с координатами (а, f(a)) и (b,f(b)). Имея уравнение хорды у = сх + d, можно легко найти точку ее пересечения с горизонтальной осью, подставив в уравнение у = 0 и найдя из него х. Естественно, в полученной таким путем точке x1 не будет решения, ее принимают за новую границу
отрезка, где содержится корень. Через эту точку с координатами (x1, f(x1)) и соответствующую границу предыдущего интервала опять проводят хорду, находят х2 и т.д. несколько раз, получая последовательностьх3 , х4 ,х5,..., сходящуюся к корню.
Метод хорд применим только для монотонных функций.
Алгоритм метода зависит от свойств функции f(х). Если f(b)*f ”(b) > 0, то строящаяся на каждом этапе хорда имеет правый фиксированный ("закрепленный") конец, и алгоритм выглядит следующим образом:
xi+1=xi-(f(xi)/(f(b)-f(xi)))*(b-xi);
при этом последовательность х1 ,х2,,…будет приближаться к корню слева.
Если f(а)f"(а) > 0, то строящаяся на каждом этапе хорда имеет левый фиксированный ("закрепленный") конец, и алгоритм выглядит следующим образом: xi+1 = a +( f(a) / (f(a) – f(xi)))*(xi – a);
|
Рис.7 |
при этом последовательность х1 ,х2,… будет приближаться к корню справа.
На рисунке 7 приведен один из вариантов применения метода хорд. В рассматриваемом случае "закрепленным" является правый конец. Приведено пять шагов (пять хорд), при этом к решению приближаемся слева.
Теоретически доказано, что если первые производные на концах интервала при монотонной и выпуклой функции f(х) не различаются более чем в 2 раза, то справедливо соотношение |х* - хi| < |хi – хi-1| и условием прекращения пополнения последовательности может быть |хi+1 - хi| <= ε, а в качестве корня принято xi+1 (можно также окончить процесс и при достижении f(хi) <= δ, о чем указывалось в концепции методов). На практике указанные условия можно применять и без предварительной проверки производных, отклонение погрешности результата при пологих функциях не будет существенным.
x – sin(x + 2) = 0 |
[0; 1] |
10 -5 |
a=0
b=1
F(x) = x – sin(x + 2) - исходная функция
G (x) = sin(x + 2) - приведенная функция
F1 (x) = 1 + cos(x + 2) 1-ая ПРОИЗВОДНАЯ ОТ F
F2 (x) = sin(x + 2) 2-ая ПРОИЗВОДНАЯ ОТ F
G1(x)=- cos(x + 2) 1-ая ПРОИЗВОДНАЯ ОТ G
e = 0.00001
DECLARE FUNCTION G1! (x!)
DECLARE SUB iter (x0!, e!, kol!, root!)
DECLARE SUB dix (a!, b!, e!, root!)
DECLARE SUB kas (a!, b!, x!, e!, root!)
DECLARE FUNCTION F! (x!)
DECLARE FUNCTION G! (x!)
DECLARE FUNCTION F1! (x!)
DECLARE FUNCTION F2! (x!)
DECLARE FUNCTION G2! (x!)
CLS
PRINT "proverka sushestvovania kornia"
PRINT " y = x - sin( x + 2)"
REM
DO
INPUT "nachalo otrezka"; a
INPUT "konec otrezka "; b
INPUT "Tochnist"; e
LOOP WHILE F(a) * F(b) > 0
CALL dix(a, b, e, root)
PRINT "koren po metodu dihotomii"; root
PRINT "F(x)=";
PRINT USING " ##.######"; F(root)
PRINT "-------------------------------------------"
INPUT "Nachalnoe znachenie kornia X0="; x
IF F(x) * F2(x) > 0 THEN
PRINT "metod kasatelnih primenim"
a = 1: b = 3
CALL kas(a, b, x, e, root)
PRINT "koren po metodu kasatelnih"; root
PRINT " F(x)=";
PRINT USING " ##.######"; F(root)
ELSE
PRINT "metod kasatelnih ne primenim"
END IF
PRINT "-------------------------------------------"
INPUT "XO="; x0
IF ABS(G1(x)) > 1 THEN
PRINT "metod ne primenim"
ELSE
a = 1: b = 3
CALL iter(x0, e, kol, root)
PRINT "koren po metodu iteracii="; root
PRINT "kolichestvo interachii"; kol
PRINT " F(x) = ";
PRINT USING " ##.######"; F(root)
END IF
END
SUB dix (a, b, e, root)
x = (a + b) / 2
DO
IF F(x) * F(a) < 0 THEN
b = x
ELSE
a = x
END IF
x = (b + a) / 2
LOOP UNTIL (b - a) < e
root = (b + a) / 2
END SUB
FUNCTION F (x)
F = x - SIN(x + 2)
END FUNCTION
FUNCTION F1 (x)
F1 = 1 + COS(x + 2)
END FUNCTION
FUNCTION F2 (x)
F2 = SIN(x + 2)
END FUNCTION
FUNCTION G (x)
G = SIN(x + 2)
END FUNCTION
FUNCTION G1 (x)
G1 = -COS(x + 2)
END FUNCTION
SUB iter (x0, e, kol, root)
kol = 0
x = x0
DO
y = F1(x)
kol = kol + 1
c = x - y
x = y
LOOP UNTIL ABS(c) < e
root = y
END SUB
SUB kas (a, b, x, e, root)
DO
x = x - F(x) / F1(x)
LOOP UNTIL ABS(F(x) / F1(x)) < e
root = x
END SUB
Проверка существования корня
Y= x – sin( x + 2 )
Начало отрезка? 0
Конец отрезка? 1
Точность? 0.000001
Корень по методу дихотомии 0.5541954
F(x) = -0.000001
--------------------------------------------------------------------
Начальное значение корня Хо=? 1.5
Метод касательных не применим
--------------------------------------------------------------------
Хо=? 1.5
Корень по методу итерации = 0.319387
Количество итераций 37
F(x) = -0.413262
МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИФСКОЙ ФЕДЕРАЦИИ
Государственное образовательное учреждение высшего профессионального образования
«МОСКОВСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ПИЩЕВЫХ ПРОИЗВОДСТВ»
Лабораторная работа №6
«Уточнение корня уравнения»
Выполнила: студентка группы 11-ТПМ-3
Маркина Алёна Сергеевна
Принял: Вертелова Елена Евгеньевна
Москва 2011