Компьютерный практикум по алгебре в среде Matlab. Практическое занятие 7

Содержание

Слайд 2

Краткая теория и операции в Matlab svd(A) – сингулярное разложение матрицы

Краткая теория и операции в Matlab

svd(A) – сингулярное разложение матрицы A
[U,S,V]

= svd(A) – сингулярное разложение матрицы A, такое, что A = U*S*V'. Тогда решение СЛАУ вида Ax=b будет выглядеть так:
x=U*S-1*V'*b.
R = chol(A) – верхняя треугольная матрица по схеме Холецкого; L = chol(A,'lower') – нижняя треугольная матрица.
A=L*L'=R'*R, причём все диагональные элементы матриц L и R положительны.
Вместо исходной СЛАУ решаются (если Ax=b то x=A\b) 2 системы: Ly=b, L'x=y (или Rx=y), т.е. в итоге в результате 2 операций можно получить x.
Слайд 3

Matlab: задание Решите систему методом сингулярного разложения: Решите систему из п.

Matlab: задание

Решите систему методом сингулярного разложения:
Решите систему из п. 1 методом

разложения Холецкого.
Напишите алгоритм итерационного метода Ричардсона (см. источник 1, стр. 130, или слайд 4) и решите с его помощью систему из пункта 1.
Напишите алгоритм метода простой итерации (см. стр. 132 источника 1 или слайды 5-6) и решите с его помощью систему из пункта 1.
Напишите алгоритм итерационного метода Гаусса-Зейделя (см. источник 1, стр. 135 или слайды 7-8) и решите с его помощью систему из пункта 1.
Напишите алгоритм итерационного метода последовательной верхней релаксации (SOR) (см. источник 1, стр. 136, или слайды 9-10) и решите с его помощью систему из пункта 1.
Напишите алгоритм итерационного метода сопряжённых градиентов (см. источник 1, стр. 181) и решите с его помощью систему из пункта 1.
Если сложно создать алгоритм по первому источнику, воспользуйтесь вторым, в котором есть блок-схемы алгоритмов, или слайдами ниже, в которых эти блок-схемы правильные)
Слайд 4

Итерационный метод Ричардсона tau=0.1 x=[0;0;0] n=250 начало for i=1:n for r=b-A*x

Итерационный метод Ричардсона

tau=0.1

x=[0;0;0]

n=250

начало

for i=1:n

for

r=b-A*x

x=x+r*tau

конец

Данный метод представлен в самом простом виде,

без выхода из цикла по точности вычислений, как предлагается в источнике 1
A=[1 1 1;1 3 1;1 1 3];
b=[2;4;0];
x - начальная точка
n – количество итераций
r – невязка
tau – коэфф. точности
Блок-схема оформлена в соответствии с
ГОСТ 19.701-90 ЕСПД
Слайд 5

Метод простой итерации x0=[0;0;0] n=2000 eps=0.0001 начало for i=1:length(b) for newa(i,j)=0

Метод простой итерации

x0=[0;0;0]
n=2000
eps=0.0001

начало

for i=1:length(b)

for

newa(i,j)=0

beta(i)=b(i)/A(i,i)

Для решения, возможно, придётся преобразовать первое уравнение

системы, чтобы получилось следующее и алгоритм сходился:
A=[6 4 0;1 3 1;1 1 3];
b=[16;4;0];
x0 - начальная точка
n – количество итераций
eps – коэфф. точности

for j=1:length(b)

i==j

да

нет

newa(i,j)=-A(i,j)/A(i,i)

for

x1=x0
ncount=0
beta=beta'

while true

ncount=ncount+1
x1=beta+newa*x0
max=|x0(1)-x1(1)|

for i=2:length(x0)

|x0(i)-x1(i)|>max

да

max=|x0(i)-x1(i)|

for

A

Слайд 6

Метод простой итерации конец Для решения, возможно, придётся преобразовать первое уравнение

Метод простой итерации

конец

Для решения, возможно, придётся преобразовать первое уравнение системы, чтобы

получилось следующее и алгоритм сходился:
A=[6 4 0;1 3 1;1 1 3];
b=[16;4;0];
x0 - начальная точка
n – количество итераций
eps – коэфф. точности

да

x0=x1

while

maxn

A

x=x1

нет

Слайд 7

Метод Гаусса-Зейделя x0=[0;0;0] n=2000 eps=0.0001 F=A'*A H=A'*b начало for i=1:length(b) for

Метод Гаусса-Зейделя

x0=[0;0;0]
n=2000
eps=0.0001
F=A'*A
H=A'*b

начало

for i=1:length(b)

for

newa(i,j)=0

beta(i)=H(i)/F(i,i)

A=[1 1 1;1 3 1;1 1 3];
b=[2;4;0];
x0 -

начальная точка
n – количество итераций
eps – коэфф. точности

for j=1:length(b)

i==j

да

нет

newa(i,j)=-F(i,j)/F(i,i)

for

x1=x0
ncount=0
beta=beta'

while true

ncount=ncount+1

for j=1:length(b)

for

B

for i=1:length(b)

s=0

s=s+newa(i,j)*x1(j)

x1(i)=beta(i)+s

for

max=|x0(1)-x1(1)|

Слайд 8

Метод Гаусса-Зейделя конец A=[1 1 1;1 3 1;1 1 3]; b=[2;4;0];

Метод Гаусса-Зейделя

конец

A=[1 1 1;1 3 1;1 1 3];
b=[2;4;0];
x0 - начальная точка
n

– количество итераций
eps – коэфф. точности

да

x0=x1

while

maxn

B

x=x1

нет

for i=2:length(x0)

|x0(i)-x1(i)|>max

да

max=|x0(i)-x1(i)|

for

Слайд 9

Метод последовательной верхней релаксации (SOR) x0=[0;0;0] n=45 eps=0.00001 F=A'*A H=A'*b w=1.4

Метод последовательной верхней релаксации (SOR)

x0=[0;0;0]
n=45
eps=0.00001
F=A'*A
H=A'*b
w=1.4

начало

for i=1:length(b)

for

newa(i,j)=0

beta(i)=H(i)/F(i,i)

A=[1 1 1;1 3 1;1

1 3];
b=[2;4;0];
x0 - начальная точка
n – количество итераций
eps – коэфф. точности
w – коэфф. релаксации
выделенный цветом прямоугольник – единственное отличие от предыдущего метода
Заметьте, что в этом методе достаточно всего 45 итераций

for j=1:length(b)

i==j

да

нет

newa(i,j)=-F(i,j)/F(i,i)

for

x1=x0
ncount=0
beta=beta'

while true

ncount=ncount+1

for j=1:length(b)

for

C

for i=1:length(b)

s=0

s=s+newa(i,j)*x1(j)

for

max=|x0(1)-x1(1)|

x1(i)=beta(i)+s+(w-1)*(beta(i)+s-x0(i))