Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Mathcad - ЛР3

.pdf
Скачиваний:
118
Добавлен:
24.02.2016
Размер:
347.17 Кб
Скачать

SimpleIter(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* ) заданной системы и найти его с точностью ε = 105 . Для этого привести заданную систему к виду удобному для применения метода простых итераций:

ì 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

Вывод: Итерационный процесс сходится к решению для всех выбранных начальных приближений. Скорость сходимости во всех случаях достаточно большая, но изменяется в зависимости от выбора начального приближения.

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