Mathcad - ЛР3
.pdfSimpleIter(f,
SimpleIter(f,
q,x0, e) := x1 ¬ x0 x2 ¬ f(x1)
i ¬ 2 |
|
|
|
|
|
|
|
|
|
|
|
|
|||
while |
æ |
|
|
x |
- x |
|
|
|
|
³ |
1 - q |
× eö |
|||
|
|
||||||||||||||
|
|
|
|
è |
|
|
i |
i−1 |
|
|
|
|
|
q |
ø |
|
|
|
|
|
|
|
|
|
|||||||
|
|
|
xi+1 ¬ f(xi) |
|
|
|
|||||||||
|
|
|
|
|
|||||||||||
|
|
|
i ¬ i + 1 |
|
|
|
|||||||||
|
|
|
|
æ |
|
|
|
x |
ö |
|
|
||||
|
|
|
|
ç |
|
|
|
i |
÷ |
|
|
||||
res ¬ ç |
|
|
|
i - 2 |
÷ |
|
|
||||||||
|
|
|
|
ç |
|
|
x |
- x |
|
|
÷ |
|
|
||
|
|
|
|
|
|
|
|
|
|||||||
|
|
|
|
è |
|
|
i |
i−1 |
|
|
ø |
|
|
||
æ |
|
|
|
1.190031 |
|
|
|
|
ö |
|
|
||||
ç |
|
|
|
|
|
|
|
|
|
|
|
|
÷ |
|
|
q,1, 10− 7) = ç |
|
48 |
|
|
|
|
÷ |
|
|
||||||
ç |
|
|
|
|
|
|
|
− 9 |
÷ |
|
|
||||
è6.093824 ´ 10 |
|
|
|
|
ø |
|
|
Произведем оценку динамики сходимости:
æ |
1.190031 |
ö |
æ |
1.190031 |
ö |
ç |
|
÷ |
ç |
|
÷ |
SimpleIter(f, q,0.7, 10− 7) = ç |
51 |
÷ |
SimpleIter(f, q,0.8, 10− 7) = ç |
50 |
÷ |
ç |
− 9 |
÷ |
ç |
− 9 |
÷ |
è |
6.374842 ´ 10 |
ø |
è |
6.46335 ´ 10 |
ø |
æ |
1.190031 |
ö |
æ |
1.190031 |
ö |
ç |
|
÷ |
ç |
|
÷ |
SimpleIter(f, q,0.9, 10− 7) = ç |
49 |
÷ |
SimpleIter(f, q,1, 10− 7) = ç |
48 |
÷ |
ç |
− 9 |
÷ |
ç |
− 9 ÷ |
|
è |
6.573035 ´ 10 |
ø |
è |
6.093824 ´ 10 |
ø |
æ |
1.190031 |
ö |
æ |
1.190031 |
ö |
ç |
|
÷ |
ç |
|
÷ |
SimpleIter(f, q,1.1, 10− 7) = ç |
46 |
÷ |
SimpleIter(f, q,1.2, 10− 7) = ç |
40 |
÷ |
ç |
− 9 |
÷ |
ç |
− 9 |
÷ |
è |
6.065536 ´ 10 |
ø |
è |
6.35404 ´ 10 |
ø |
æ |
1.190031 |
ö |
|
|
|
ç |
|
÷ |
|
|
|
SimpleIter(f, q,1.3, 10− 7) = ç |
46 |
÷ |
|
|
|
ç |
− 9 |
÷ |
|
|
|
è |
8.092077 ´ 10 |
ø |
|
|
|
Динамика сходимости метода простой итерации
Начальное приближение |
Количество итераций |
Погрешность |
0.7 |
51 |
6.374842E-9 |
0.8 |
50 |
6.46335E-9 |
0.9 |
49 |
6.573035E-9 |
1 |
48 |
6.093824E-9 |
1.1 |
46 |
6.065536E-9 |
1.2 |
40 |
6.35404E-9 |
1.3 |
46 |
8.092077E-9 |
Вывод: В результате вычислительного эксперимента метод обеспечил получение результата при различных начальных приближениях, но процесс сходился к решению тем быстрее, чем ближе к корню находилось начальное приближение.
Задача 3.5. Создать программный модуль для решения нелинейной системы двух
переменных методом простых итераций. Локализовать ближайший к началу координат
решение (x* , y* ) заданной системы и найти его с точностью ε = 10−5 . Для этого привести заданную систему к виду удобному для применения метода простых итераций:
ì x = ϕ1 (x, y)
íîy = ϕ2 (x, y)
Попытаться решить уравнение методом простых итераций при различных
начальных приближениях (x(0) , y(0) ) , выбираемых на различных расстояниях и направлениях от искомого корня (рекомендуется рассмотреть 4-5 различных начальных приближений). Проанализировать полученные результаты: сошелся ли итерационный процесс к искомому корню (хотя бы для одного начального приближения сходимость должна иметь место)? Вывести и проанализировать таблицы, отражающие динамику сходимости (или расходимости, если она для каких-то начальных приближений имела
место) последовательных приближений {(x(n) , y(n) )} для каждого варианта начальных приближений. Сделать выводы.
При решении задания использовать критерий окончания итерационного процесса
вида
x(n+1) − x(n) < 1 −q q ε , где x(n) = (x(n) , y (n) ) .
Значение q, 0< q<1 определяется как верхняя оценка в достаточном условии сходимости итерационного процесса (которое должно выполняться для любых значений
(x, y) из некоторой области локализации искомого корня (x* , y* ) ):
|
|
¶ϕ1 |
|
(x, y) |
|
|
+ |
|
|
|
¶ϕ1 |
|
(x, y) |
|
|
£ q |
|
|
|
|
|
|
|
|
|
|
|
||||||||
|
|
¶x |
|
¶y |
|||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
¶ϕ2 |
|
(x, y) |
|
+ |
|
|
¶ϕ2 |
|
(x, y) |
|
£ q |
||||
|
|
|
|
|
|
|
|
||||||||||
|
|
¶x |
|
|
¶y |
|
|||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Исходные данные:
Заданы два нелинейных уравнения, обьединённые в систему:
f(x, y) := 5 × x - 6 × y + 20 × log(x) + 16 g(x,y) := 2 × x + y - 10 × log(y) - 4
Для определения областей локализации решений системы строим линии уровня f(x,y)=const и g(x,y)=const заданных функций вида на определенном прямоугольном участке [ax,bx] x [ay,by] с некоторыми масштабами дисретизации, которые задаются количеством узлов по каждой из осей (числа N и M).
Линии уровня выводятся на графический объект Contour Plot. Для этих целей задаются двумерные матрицы Fi,j и Gi,j значений функций f(x,y) и g(x,y) в узлах построенной решетки дискретизации (xi, yj ). i=0..N, j=0..M.
Первоначально прямоугольный участок [ax,bx] x [ay,by] выбирается достаточно большим, чтобы увидеть поведение каждой функций и примерно определить области на плоскости, где пересекаются нулевые уровни каждой функции (f(x,y)=0 и g(x,y)=0).
ax := |
0.1 |
bx := 1 |
ay := |
0.1 |
by := 1 |
Границы прямоугольного участка по оси х
Границы прямоугольного участка по оси y
N и M определяют количество узлов при дискретизации прямоугольного участка по оси х и y соответственно. Выбираются достаточно произвольно, но так, чтобы не потерять качество линий уровня при детализации их мелких особенностей.
N := 250 M := 200
i и j задают номера узлов по каждой из осей:
i := 1.. N |
j := 1.. M |
hx и hy задают шаг дискретизации по каждой из осей:
hx := |
bx - ax |
hy := |
by - ay |
|
N |
|
M |
Абсциссы и ординаты узлов:
xi := ax + hx × i |
yj := ay + hy × j |
Матрицы значений функций в узлах выбранного прямоугольного участка:
Fi , j := f(xi , yj) |
Gi , j := g(xi ,yj) |
CreateMesh(f,0.1, 1, 0.1, 1,10, 10) |
CreateMesh(g,0.1 ,1, 0.1, 1,10, 10) |
Область локализации решения 0.1<x<0.33, 0.4<y<0.6
Приводим систему к виду х=f1(x,y), y=g1(x,y)
|
|
6y−5x−16 |
f1(x, y) := |
10 |
20 |
|
2x+y−4
g1(x,y) := 10 10
Находим частные производные функций f1 и g1 и их модули:
dxg1(x, y) := d g1(x, y) |
|
dyg1(x, y) := d g1(x, y) |
||||||||||||
dx |
|
|
|
|
|
dy |
|
|
|
|
||||
absdxg1(x, y) := |
|
dxg1(x, y) |
|
absdyg1(x, y) := |
|
dyg1(x, y) |
||||||||
|
|
|
||||||||||||
dxf1(x,y) := d f1(x,y) |
|
dyf1(x,y) := d f1(x,y) |
||||||||||||
dx |
|
|
|
|
|
dy |
|
|
|
|
||||
absdxf1(x, y) := |
|
|
dxf1(x,y) |
|
|
|
absdyf1(x, y) := |
|
|
dyf1(x, y) |
|
|
||
|
|
|
|
|
Строим линии уровня сумм модулей частных производных функций f1 и g1:
Q1i , j := absdxf1(xi ,yj) + absdyf1(xi , yj)
q1(x,y) := absdxf1(x,y) + absdyf1(x, y)
Q2i , j := absdxg1(xi , yj) + absdyg1(xi , yj)
q2(x,y) := absdxg1(x, y) + absdyg1(x,y)
CreateMesh(q1,0.1 ,1, 0.1, 1,10, 10) CreateMesh(q2,0.1 ,1, 0.1, 1,10, 10)
Область локализации решения 0.1<x<0.33, 0.4<y<0.6
Проверим, выполняется ли условие сходимости итерационного процесса в области локализации для функции f1(x):
absdxf1(0.1, 0.4) + absdyf1(0.1 ,0.4) = 0.249791915409332
absdxf1(0.1, 0.6) + absdyf1(0.1 ,0.6) = 0.286799492297872
absdxf1(0.33, 0.4) + absdyf1(0.33, 0.4) = 0.218815649030289
absdxf1(0.33, 0.6) + absdyf1(0.33, 0.6) = 0.251233979874316
Максимальное значение сумм частных производных < 1, т.е. итерационный процесс сойдётся к решению.
Проверим, выполняется ли условие сходимости итерационного процесса в области локализации для функции g1(x):
absdxg1(0.1,0.4) + absdyg1(0.1, 0.4) = 0.315745335477254
absdxg1(0.1,0.6) + absdyg1(0.1, 0.6) = 0.33062595469214
absdxg1(0.33,0.4) + absdyg1(0.33, 0.4) = 0.351024107191239
absdxg1(0.33,0.6) + absdyg1(0.33, 0.6) = 0.367567363694017
Максимальное значение сумм частных производных < 1, т.е. итерационный процесс сойдётся к решению.
Iter(f, g, a, b,q, e) := |
|
xold ¬ 0 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||
|
|
yold ¬ 0 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||
|
|
xnew ¬ a |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||
|
|
ynew ¬ b |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||
|
|
k ¬ 0 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
while |
|
xnew - xold |
|
+ |
|
|
ynew - yold |
|
> |
1 - q |
× e |
|||||||||
|
|
|
|
|||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
q |
|
|
|
|
xold ¬ xnew |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||
|
|
|
yold ¬ ynew |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||
|
|
|
xnew ¬ f(xold,yold) |
|
|
|
|
|
|
|
|
|
||||||||||
|
|
|
ynew ¬ g(xold,yold) |
|
|
|
|
|
|
|
|
|
||||||||||
|
|
|
k ¬ k + 1 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||
|
|
|
|
æ |
|
|
|
xnew |
ö |
|
||||||||||||
|
|
|
|
ç |
|
|
|
ynew |
÷ |
|
||||||||||||
|
|
res ¬ |
ç |
|
|
|
÷ |
|
||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||
ç |
|
xnew - xold |
|
+ |
|
|
ynew - yold |
|
|
÷ |
|
|||||||||||
|
|
|
|
|
|
|
|
|
|
|
||||||||||||
|
|
|
|
ç |
|
|
|
|
|
|
÷ |
|
||||||||||
|
|
|
|
|
|
|
|
|
||||||||||||||
|
|
|
|
è |
|
|
|
|
|
k |
|
|
|
|
|
|
|
ø |
|
|||
|
|
res |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Находим приближенное решение системы и выводим последовательные приближения для нескольких начальных приближений:
æ |
0.1981 |
ö |
æ |
0.1981 |
ö |
|
ç |
0.488 |
÷ |
ç |
0.488 |
÷ |
|
Iter(f1 ,g1, 0.1, 0.4, 0.37,10− 5) = ç |
÷ |
Iter(f1 ,g1, 0.1, 0.6, 0.37,10− 5) = ç |
÷ |
|||
|
|
|||||
ç |
− 5 ÷ |
ç |
− 6 ÷ |
|||
ç |
1.1937 ´ 10 |
÷ |
ç |
4.019 ´ 10 |
÷ |
|
7 |
8 |
|||||
è |
ø |
è |
ø |
|||
æ |
0.1981 |
ö |
æ |
0.1981 |
ö |
|
ç |
0.488 |
÷ |
ç |
0.488 |
÷ |
|
Iter(f1 ,g1, 0.33,0.4 ,0.37, 10− 5) = ç |
÷ |
Iter(f1 ,g1, 0.33,0.6 ,0.37, 10− 5) = ç |
÷ |
|||
− 6 |
− 6 |
|||||
ç |
÷ |
ç |
÷ |
|||
ç |
4.6698 ´ 10 |
÷ |
ç |
3.808 ´ 10 |
÷ |
|
8 |
8 |
|||||
è |
ø |
è |
ø |
Производим проверку полученного решения для всех выбранных начальных приближений:
fæèIter(f1, g1,0.1, 0.4, 0.37, 10− 5)1,Iter(f1 ,g1, 0.1, 0.4,0.37, 10− 5)2öø = 1.31375935286115 ´ 10− 5 fæèIter(f1, g1,0.1, 0.6, 0.37, 10− 5)1,Iter(f1 ,g1, 0.1, 0.6,0.37, 10− 5)2öø = -2.13393924965999 ´ 10− 5 fæèIter(f1, g1,0.33, 0.4, 0.37,10− 5)1, Iter(f1, g1,0.33, 0.4, 0.37, 10− 5)2öø = 2.53782046133466 ´ 10− 5 fæèIter(f1, g1,0.33, 0.6, 0.37,10− 5)1, Iter(f1, g1,0.33, 0.6, 0.37, 10− 5)2öø = 2.22947364765247 ´ 10− 5
gæèIter(f1, g1,0.1 ,0.4 ,0.37, 10− 5)1, Iter(f1 , g1, 0.1, 0.4, 0.37,10− 5)2öø = 1.96420551201726 × 10− 5 gæèIter(f1, g1,0.1 ,0.6 ,0.37, 10− 5)1, Iter(f1 , g1, 0.1, 0.6, 0.37,10− 5)2öø = −4.30491950487166 × 10− 6 gæèIter(f1, g1,0.33, 0.4, 0.37, 10− 5)1,Iter(f1 ,g1, 0.33,0.4 ,0.37, 10− 5)2öø = 3.25167641523905 × 10− 6 gæèIter(f1, g1,0.33, 0.6, 0.37, 10− 5)1,Iter(f1 ,g1, 0.33,0.6 ,0.37, 10− 5)2öø = −2.1477335474529 × 10− 6
Вывод: Итерационный процесс сходится к решению для всех выбранных начальных приближений. Скорость сходимости во всех случаях достаточно большая, но изменяется в зависимости от выбора начального приближения.