Сделай Сам Свою Работу на 5

Решение систем методом Зейделя





Отчет по лабораторной работе №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 Все материалы защищены законодательством РФ.