Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Informatics.doc
Скачиваний:
6
Добавлен:
21.08.2019
Размер:
1.33 Mб
Скачать

5.2.1.2. Нелинейные уравнения и системы

А. Простые итерации типа x n + 1 = f(x n ) (n = 0, 1, ... , x 0 – на-чальное приближение) приводят при n  ∞ к решению уравнения x = f(x), если выполнено условие | f ′ (x) |  M < 1 (достаточное условие сходимости) в некоторой окрестности точного решения. Уравнение F(x) = 0 всегда можно привести к указанному виду, записав его как x = x + k F(x) (k – параметр релаксации). Тогда итерации

x n + 1 = x n + kF(x n ) (n = 0, 1, 2, …) будут сходиться при условии | 1 + kF′(x) |  M < 1. Параметр k можно выбирать произвольно при выполнении указанных условий. При оптимальном выборе параметра k на каждом шаге 1 + kF′(x n) = 0, откуда получаем k = - (F′(x n )) -1 - это метод Ньютона: x n + 1 = x n - (F′(x n )) -1 F(x n ) (для уравнения F(x) = 0). Например, получается как решение уравнения x m - a = 0 и метод Ньютона здесь приводит к итерациям x n + 1 = , х 0 = 1 (например), которые быстро сходятся к точному решению для

произвольного m > 1. Итерации легко оформить в виде функции:

root(m, a) x 1, y a

while |x - y| > 0.000001

y x, x

x

В сложных случаях производную можно заменить секущей k = = - (F′()) -1 для некоторого : (x n - )( - x n - 1) > 0,

что приводит к методу (секущих, квазиньютона):

x n + 1 = (n = 1, 2, ... ).

Методы легко программируются. Приведем для примера метод релаксаций и квазиньютона и результат их применения для прибли-женного решения уравнения ln(x) = (1 + x 2) -1, или (1 + x 2)ln(x) - 1 = 0, т. е. F(x) = 0 при F(x) = (1 + x 2)ln(x) – 1 и сравним с результатом

работы блока Given ... Find. Поиск начинается всюду с точки х = 2.

Relax(F, x, k, ) n 0, t x + 1

while |t - x| >

t x, n n + 1

x t + kf(t)

Quanew(F, x, ) n 0, z x + 1, y x + 100

fx F(x), fy F(y)

while |z - x| >

z (fyx - fxy)(fy - fx) -1

x y, y z, fx fy

fy F(z), n n + 1

(здесь  - точность приближения, n - число итераций). Обе програм- мы для  = 10 -5 дают приближенное решение х = 1.4013215 и х = =1.4013216 со значением функции в первом случае -2.610 -7, во вто-ром 2.1410 -12. Релаксация требует при k = - 0.1, -0.3, -0.5 n = 27, 7 и 18 итераций. Метод секущих (Quanew) достигает результата за семь итераций. Встроенный блок Given ... Find находит значение х = 1.4013212 со значением функции - 1.16910 -6.

В. Для нелинейных систем уравнений F(x) = 0 (F: ℝ  ℝ ),

используя метод Ньютона, аналогично предыдущему получим:

x (n + 1) = x (n) - [DF(x (n))] -1 F(x (n)) , n = 0, 1, ... ,

где DF(x(n)) - матрица частных производных F в точке x (n). Здесь на

каждой итерации нужно решать линейную систему уравнений

DF(x(n)) (x(n + 1) – x(n)) = - F(x(n))

относительно вектора s = x(n + 1) – x(n) . Тогда процесс уточнения ре-

шения принимает вид (здесь D(f, х) = Df(х)):

Zero(F, D, x, ) d ← 1, t x

while d >

s ← f(t), M D(F, t)

s ← Lsolve(M, s)

d |s|, t t - s

Например, для двух функций с двумя переменными имеем:

F(x, y) = , DF(x, y) = .

Для произвольного числа переменных (и уравнений) удобнее рабо- тать с векторами (как отмечено в начале пункта). Тогда дифференци-рование по координатам проще вычислять отношением приращений функции и аргумента (см. конец п. 1).

Пример. Рассмотрим систему трех уравнений с тремя неизвест-ными с отправной точкой x = y = z = 2. Положим n = 3 i 0 . . n - 1 x i 2 , введем вектор-функцию

f(x)

и выполним R Zero(f, D, x, 10 -6) . Обратим внимание на то, что ре-зультат R является вектором, компоненты которого (их нельзя наз-вать "координаты") также векторы. Поэтому непосредственный вывод результата в MathCad выглядит так: R = (каждый элемент – матрица из трех строк и одного столбца, т. е. вектор). Получим реше-ние R 0 и значение R 1 функции f: R 0 = , R 1 =

- практически точно.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]