Решение систем методом Зейделя
Отчет по лабораторной работе №4
” РЕШЕНИЕ СИСТЕМ ЛИНЕЙНЫХ
АЛГЕБРАИЧЕСКИХ УРАВНЕНИЙ”
Выполнила: Погорелов Роман Николаевич
Проверил: Андреев Алексей Иванович
Йошкар-Ола
ЦЕЛЬ РАБОТЫ:
Сформировать у студентов представление о прямых и итерационных методах решения систем линейных уравнений, выработать умения составлять и применять алгоритмы и программы для решения систем уравнений, дать навыки в использовании программных средств для решения систем уравнений.
ЗАДАНИЕ:
1. Решить СЛАУ методом Гаусса с точностью 0,001.
2.Решить СЛАУ методом простой итерации с точностью 0,001.
3. Решить СЛАУ методом Зейделя с точностью 0,001.
4. Провести сравнительную характеристику методов.
5. Решить СЛАУ в системе Scilab с помощью встроенных функций.
Исходные данные:
Вариант 6
Ход выполнения работы:
Решение системы методом Гаусса
Создаём файл Exchange.sci (листинг 1), содержащий описание функции, осуществляющей перестановку строк при обнаружении в текущей строке нулевого элемента на главной диагонали.
function z=Pogorelov_Exchange(C, i)
k=i+1;
while C(k,i)==0
k=k+1;
end;
for j=1:size(C,1)
s=C(i,j);
C(i,j)=C(k,j);
C(k,j)=s;
end;
z=C;
endfunction
Создаём файл Simplex.sci(листинг 2), содержащий описание функции, возвращающей расширенную матрицу системы к верхней треугольной системе.
function z=Pogorelov_Simplex(A, b)
N=size(A,1);// Определение числа уравнений системы
C=cat(2,A,b);// Создание расширенной матрицы системы
for i=1:N-1
if C(i,i)==0
C=Pogorelov_Exchange(C,i);
end;
for j=0:N
C(i,N+1-j)=C(i,N+1-j)/C(i,i);
end;
for m=i+1:N
alpha=C(m,i);
for j=i:N+1
C(m,j)=C(m,j)-alpha*C(i,j);
end;
end;
end;
C(N,N+1)=C(N,N+1)/C(N,N);
C(N,N)=1;
z=C;
endfunction
Создать файл Gauss.sci(листинг 3), содержащий описание функции, возвращающей решение системы линейных уравнений методом Гаусса.
function z=Pogorelov_Gauss(A, b)
C=Pogorelov_Simplex(A,b)
N=size(A,1);
v(N)=C(N,N+1);
for j=1:N-1
s=0;
for k=0:j-1
s=s+C(N-j,N-k)*v(N-k);
end;
v(N-j)=(C(N-j,N+1)-s)/C(N-j,N-j);
end;
z=v;
disp(z,'решение системы')
endfunction
1.4) В командном окне задаем матрицу системы линейных уравнений и вектор-столбец свободных членов:
-->A=[4.3,-2.1,23.2,-14.1;2.4,-15.4,3.5,5.5;5.4,8.3,-7.4,-12.7;16.3,-7.6,1.34,3.7]
A =
4.3 - 2.1 23.2 - 14.1
2.4 - 15.4 3.5 5.5
5.4 8.3 - 7.4 - 12.7
16.3 - 7.6 1.34 3.7
-->b=[15.5;2.5;8.6;12.1]
b =
15.5
2.5
8.6
12.1
Решаем систему уравнений, используя функцию Gauss( ):
-->x=Pogorelov_Gauss(A,b)
решение системы
0.7608988
- 0.2180294
0.1519909
- 0.5846869
x =
0.7608988
- 0.2180294
0.1519909
- 0.5846869
Проверяем правильность решения системы линейных уравнений:
-->A*x
ans =
15.5
2.5
8.6
12.1
1) Решение системы линейных алгебраических уравнений методом итерации:
Создаем файл Iterac.sci (листинг 4), содержащий описание функции, возвращающей решение системы линейных уравнений методом простой итерации.
function Pogorelov_Iterac(C1, d1, eps)
N=size(C1,1);
R1=d1;
q1=R1;
q2=(C1*q1)+R1;
p=0;
s=0;
for i=1:N
if abs(q2(i)-q1(i))>s
s=abs(q2(i)-q1(i));
end;
end;
while s>eps
p=p+1;
q1=q2;
q2=(C1*q1)+R1;
s=0;
for i=1:N
if abs(q2(i)-q1(i))>s
s=abs(q2(i)-q1(i));
end;
end;
end;
disp(q2)
rr=(C1*q2)+R1+q2
disp(rr)
disp(p)
kk=abs(q2-q1)
disp(kk)
endfunction
Решить систему линейных алгебраических уравнений методом итерации с точностью 0,001:
Преобразуем данную систему к виду пригодному для итерационного процесса:
Делим 3 уравнение на 3,и складываем 4 уравнение с 3 и получаем:
Разделим каждое уравнение на диагональный коэффициент и выразим из каждого уравнения диагональное неизвестное:
В командном окне задаём матрицу системы линейных уравнений и вектор-столбец свободных членов:
-->A=[0,0.466,-0.082,-0.227;0.156,0,0.227,0.357;-0.185,0.091,0,0.608;0.39,0.44,0.02,0]
A =
0. 0.466 - 0.082 - 0.227
0.156 0. 0.227 0.357
- 0.185 0.091 0. 0.608
0.39 0.44 0.02 0.
-->b=[0.742;-0.162;0.668;-0.79]
b =
0.742
- 0.162
0.668
- 0.79
В командном окне найдём решение системы линейных уравнений:
-->Pogorelov_Iterac(A,b,0.00001)
0.7609694
- 0.2183233
0.1509105
- 0.5862619
- 0.0000013
- 0.0000043
- 0.0000044
- 0.0000041
15.
0.0000019
0.0000073
0.0000071
0.0000068
Решение систем методом Зейделя
Создать файл Zeidel.sci (листинг 5), содержащий описание функции, выполняющей последовательно: а) приведение системы к нормальному виду; б) приведение нормальной системы к виду, пригодному для итерационного процесса Зейделя; в) реализацию итерационного процесса Зейделя
function Pogorelov_Zeidel(A, b, eps)
N=size(A,1);
//Приведение системы к нормальному виду
C=A'*A;
D=A'*b;
//Приведение системы к виду, пригодному для итерационного процесса
for i=1:N
D1(i)=D(i)/C(i,i);
end;
d1=D1;
for i=1:N
for j=1:N
if i==j;
C1(i,j)=0;
else
C1(i,j)=-C(i,j)/C(i,i);
end;
end;
end;
//Решение СЛАУ методом Зейделя
R1=d1;
q1=R1;
//Создание матрицы для хранения промежуточных данных
t=size(C1);
N=t(1,1)
q2=zeros(t(1,1),1);
//Цикл выключений
p=0;
s=0;
for i=1:N
if abs(q2(i)-q1(i))>s
s=abs(q2(i)-q1(i));
end;
end;
while s>eps
q2=q1;
p=p+1;
for f=1:N
v=(C1*q1)+R1;
x(f,1)=v(f,1);
q1(f,1)=x(f,1);
end;
s=0;
for i=1:N
if abs(q2(i)-q1(i))>s
s=abs(q2(i)-q1(i));
end;
end;
q1=x;
end;
disp('Ответы:')
disp(q2)
disp('Проверка:')
disp(A*q2)
disp('число проходов:')
disp(p)
kk=abs(q2-q1)
disp(kk)
endfunction
Задаём значения коэффициентов при неизвестных исходной системы линейных уравнений и столбец свободных членов в командном окне:
-->A=[4.3,-2.1,23.2,-14.1;2.4,-15.4,3.5,5.5;5.4,8.3,-7.4,-12.7;16.3,-7.6,1.34,3.7]
A =
4.3 - 2.1 23.2 - 14.1
2.4 - 15.4 3.5 5.5
5.4 8.3 - 7.4 - 12.7
16.3 - 7.6 1.34 3.7
-->b=[15.5;2.5;8.6;12.1]
b =
15.5
2.5
8.6
12.1
Вычисляем в командном окне решение системы линейных уравнений, использую функцию Zeidel():
-->Pogorelov_Zeidel(A,b,0.001)
Ответы:
0.7631323
- 0.2131776
0.1547344
- 0.5806953
Проверка:
15.506783
2.4621984
8.5813363
12.117977
число проходов:
13.
0.0004095
0.0008896
0.0005030
0.0007319
Не нашли, что искали? Воспользуйтесь поиском по сайту:
©2015 - 2024 stydopedia.ru Все материалы защищены законодательством РФ.
|