ЗАДАНИЕ:
- Решить систему линейных алгебраических уравнений (СЛАУ) методом градиентного спуска.
- Определить максимальную «невязку» решения в п.1 задания.
- Получить обратную матрицу методом Гаусса-Жордана и найти решение СЛАУ.
- Оценить погрешности решения СЛАУ по результатам работы в п.1 и п.3.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
------------------------------------------------------------------- М а т р и ц а : Свободный член ------------------------------------------------------------------- N+1 1 1 1 1 1 1 1 : 0.1*(N*(N+9)) 1 N+1 1 1 1 1 1 1 : 0.2*( " " ) 1 1 N+1 1 1 1 1 1 : 0.3*( " " ) 1 1 1 N+1 1 1 1 1 : 0.4*( " " ) 1 1 1 1 N+1 1 1 1 : 0.5*( " " ) 1 1 1 1 1 N+1 1 1 : 0.6*( " " ) 1 1 1 1 1 1 N+1 1 : 0.7*( " " ) 1 1 1 1 1 1 1 N+1 : 0.8*( " " ) ------------------------------------------------------------------ N =16. |
Алгоритм решения СЛАУ:
Текст программы:
Распечатка главного файла «lab1.m»:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
function lab1 Data GradSpusk(A, B); %X=A\B %X=[ -1.2500 % 1.2500 % 3.7500 % 6.2500 % 8.7500 % 11.2500 % 13.7500 % 16.2500]; %SSS=CF(X,C) |
Текст файла с данными «Data.m»:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
%data file for lab1 VICHMAT po MATLAB N=16 A=[N+1 1 1 1 1 1 1 1 1 N+1 1 1 1 1 1 1 1 1 N+1 1 1 1 1 1 1 1 1 N+1 1 1 1 1 1 1 1 1 N+1 1 1 1 1 1 1 1 1 N+1 1 1 1 1 1 1 1 1 N+1 1 1 1 1 1 1 1 1 N+1]; B=[ 0.1*(N*(N+9)) 0.2*(N*(N+9)) 0.3*(N*(N+9)) 0.4*(N*(N+9)) 0.5*(N*(N+9)) 0.6*(N*(N+9)) 0.7*(N*(N+9)) 0.8*(N*(N+9))]; |
Листинг файла «Gradspusk.m»:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
function GradSpusk(A, B); X=[-1 1 3 6 6 10 10 10]; for i=1:8 C(i,1)=B(i); for j=1:8 C(i,1+j)=-A(i,j); end; end; ddx=0.01; FFF=0; eps=0.1; for i=1:8 grad(i)=-ddx; end; grad(1)=ddx; while (CF(X,C)>eps) FFF; for n=1:8 x1=X; x1(n)=x1(n)+ddx; W=CF(x1,C); H=CF(X,C); grad(n)=(W-H)*ddx; end; x1=X; I=0; x1=X-grad; X=x1; FFF=FFF+1; end; X |
Текст файла «CF.m»:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
function Y=CF(X,C) F=0;Z=0; for i=1:8 Z=C(i,1); for m=2:9 Z=Z+C(i,m)*X(m-1); end; Z; i; ; F=F+Z^2; end; %for i=1:8 % J=C(i,1)^2; % F=F-j; %end; Y=F; |
Результат работы программы:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
X = Columns 1 through 3 -1.2467 1.2519 3.7506 Columns 4 through 6 6.2519 8.7450 11.2492 Columns 7 through 8 13.7422 16.2353 |
Результат решения СЛАУ с помощью обратной матрицы:
1 2 3 4 5 6 7 8 |
X=[ -1.2500 1.2500 3.7500 6.2500 8.7500 11.2500 13.7500 16.2500]; |
Выводы
Было получено решение СЛАУ методом градиентного спуска с заданной погрешностью. Погрешность соблюдается, что видно из результатов работы программы и результата решения с помощью обратной матрицы.