Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
отчет_№4.doc
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
398 Кб
Скачать
☆
  1. Зададим вектор-столбец свободных членов:

-->b=[0.7423;-0.1623;0.6681;-0.8278]

b =

0.7423

- 0.1623

0.6681

- 0.8278

  1. Найдем решение системы линейных уравнений:

-->IteracIldarkin(A,b,0.001)

0.7611516

- 0.2165726

0.1536520

- 0.5832166

7.

Ответ: решением системы является вектор-столбец ,

полученный на 7 шаге итерации.

Задача 3.Решить систему линейных алгебраических уравнений методом Зейделя с точностью 0,001:

Решение: 1. Создадим файл ZeidelIldarkin.sci, содержащий описание функции, выполняющей последовательно: а) приведение системы к нормальному виду; б) приведение нормальной системы к виду, пригодному для итерационного процесса Зейделя; в) реализацию итерационного процесса Зейделя.

function ZeidelIldarkin(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 then

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 then

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 then

s=abs(q2(i)-q1(i));

end;

end;

q1=x;

end;

disp('Ответы:')

disp(q2)

disp('Проверка:')

disp(A*q2)

disp('Число проходов:')

disp(p)

disp(abs(q2-q1))

endfunction

2. Зададим значения коэффициентов при неизвестных исходной системы линейных уравнений и столбец свободных членов:

-->A=[4.3,-2.1,23.3,-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]

ZeidelIldarkin(A,b,0.001)

3. Вычислим решение системы линейных уравнений, используя функцию ZeidelPodkovyrin():

-->ZeidelIldarkin(A,b,0.001)

Ответы:

0.7630792

- 0.2132503

0.1542072

- 0.5804710

Проверка:

15.506735

2.4625792

8.5814992

12.117788

Число проходов: 13.

0.0004049

0.0008800

0.0004963

0.0007250

Ответ: решением системы трех линейных уравнений является вектор , найденный на 13 шаге итерации.

Теперь решим уравнение с помощью встроенных функций fsolve().

Создадим файл функцию fun, в которой опишем нашу систему уравнений.

function [y]=fun(x)

y(1)=4.3*x(1)-2.1*x(2)+23.2*x(3)-14.1*x(4)-15.5;

y(2)=2.4*x(1)-15.4*x(2)+3.5*x(3)+5.5*x(4)-2.5;

y(3)=5.4*x(1)+8.3*x(2)-7.4*x(3)-12.7*x(4)-8.6;

y(4)=16.3*x(1)-7.6*x(2)+1.34*x(3)+3.7*x(4)-12.1;

endfunction

В командном окне наберем команды

fsolve([0 0 0 0],fun)

в результате получаем :

0.7608988 - 0.2180294 0.1519909 - 0.5846869

Теперь решим методом обратного деления

-->A=[4.3,-2.1,23.3,-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.3 - 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

Теперь вызовем:

-->A\b

Получим ответ:

ans =

0.7608693

- 0.2180535

0.1514984

- 0.5844282

Теперь решим методом обратной матрицы

-->A=[4.3,-2.1,23.3,-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.3 - 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

Теперь вызовем:

x=inv(A)*b

Получим:

x =

0.7608693

- 0.2180535

0.1514984

- 0.5844282

Попробуем метод Гаусса

A=[4.3,-2.1,23.3,-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]

C=rref([A,b]);

[n,m]=size(C);

x=C(:,m);

disp(x);

В результате получим

0.7608693

- 0.2180535

0.1514984

- 0.5844282