- •1.Решение:
- •Зададим вектор-столбец свободных членов:
- •Сравнительная характеристика методов:
- •Контрольные вопросы
- •6. В чем заключается суть метода Жордана-Гаусса для решения систем линейных уравнений?
- •7. В чем заключается суть метода простой итерации для решения систем уравнений?
- •8. Как привести систему к виду с преобладающими диагональными коэффициентами?
- •9. В чем заключается суть метода Зейделя для решения систем уравнений?
Зададим вектор-столбец свободных членов:
-->b=[0.7423;-0.1623;0.6681;-0.8278]
b =
0.7423
- 0.1623
0.6681
- 0.8278
Найдем решение системы линейных уравнений:
-->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
