Материалы сайта
Это интересно
Лабораторные работы по вычислительной математике
ЛАБОРАТОРНАЯ РАБОТА №5 «Методы решения систем линейных уравнений ». Студента группы ПВ-22 Малютина Максима. Задание. Решить систему линейных уравнений методом квадратных корней с точностью до 0,001. Вариант 8. При разбиении матрицы А на треугольную используются следующая формулы: j=1..n. const size=10; type vector=array[1..size] of real; matrix=array[1..size] of vector; Procedure InputVector(var a:vector;n:byte); var i:byte; begin for i:=1 to n do begin writeln('Введите ',i,'-ый элемент '); readln(a[i]); end; end; Procedure InputMatrix(var a:matrix;n:byte); var i:byte; begin for i:=1 to n do begin writeln('Введите ',i,'-ую строку матрицы '); InputVector(a[i],n) end; end; Procedure OutputVector(var a:vector;n:byte); var i:byte; begin for i:=1 to n do write(a[i]:10:5); writeln end; Procedure OutputMatrix(var a:matrix;n:byte); var i:byte; begin for i:=1 to n do outputvector(a[i],n) end; Procedure GetT(var t:matrix;a:matrix;n:byte); var i,j,l:byte; s:real; begin for i:=1 to n do for j:=1 to n do t[i,j]:=0; for j:=1 to n do begin s:=0; for l:=1 to j-1 do s:=s+sqr(t[j,l]); s:=a[j,j]-s; t[j,j]:=sqrt(s); for i:=j+1 to n do begin s:=0; for l:=1 to j-1 do s:=s+t[i,l]*t[j,l]; t[i,j]:=(a[i,j]-s)/t[j,j] end; end; end; procedure MulMatrix(a:matrix;ma,na:byte;b:matrix;mb,nb:byte;var c:matrix;var mc,nc:byte); var i,j,k:byte; s:real; begin if na=nb then begin mc:=ma; nc:=nb; for k:=1 to mc do for j:=1 to nc do begin s:=0; for i:=1 to nc do s:=s+a[k,i]*b[i,j]; c[k,j]:=s end; end else begin writeln('Неверные размеры матриц !!! '); halt end; end; procedure MulVector(a:matrix;ma,na:byte;b:vector;nb:byte;var c:vector;var nc:byte); var i,j:byte; s:real; begin if na=nb then begin nc:=nb; for i:=1 to nc do begin s:=0; for j:=1 to nc do s:=s+a[i,j]*b[j]; c[i]:=s; end; end else begin writeln('Неверные размеры матриц !!! '); halt end; end; Procedure TransposeMatrix(var a:matrix;n:byte); var i,j:byte; s:real; begin for i:=1 to n do for j:=1 to n do begin s:=a[i,j]; a[i,j]:=a[j,i]; a[j,i]:=s end; end; procedure GetY(t:matrix;b:vector;var y:vector;n:byte); var i,k:byte; s:real; begin for i:=1 to n do begin s:=0; for k:=1 to i-1 do s:=s+t[i,k]*y[k]; y[i]:=(b[i]-s)/t[i,i]; end; end; procedure GetX(t:matrix;y:vector;var x:vector;n:byte); var j,k:byte; s:real; begin for j:=n downto 1 do begin s:=0; for k:=j+1 to n do s:=s+t[k,j]*x[k]; x[j]:=(y[j]-s)/t[j,j]; end; end; var a,at,at2,t:matrix; b,b2,y,x:vector; n:byte; begin writeln('Введите размерность матрицы коэффициентов ');readln(n); writeln('Введите элементы матрицы коэффициентов '); InputMatrix(a,n); writeln('Введите вектор свободных членов '); InputVector(b,n); at:=a; TransposeMatrix(at,n); MulMatrix(a,n,n,at,n,n,at2,n,n); MulVector(at,n,n,b,n,b2,n); Writeln('Пребразованная матрица А: '); at:=at2; outputmatrix(at,n); Writeln('Преобразованный вектор B: '); b:=b2; outputvector(b,n); writeln; GetT(t,at,n); Writeln('Пребразованная матрица T: '); outputmatrix(t,n); GetY(t,b,y,n); writeln('Вектор Y'); outputvector(y,n); GetX(t,y,x,n); writeln('Вектор X'); outputvector(x,n) end. Пребразованная матрица А: Преобразованный вектор B: 4.97540 1.82880 1.26010 -0.14480 4.23870 -4.67000 1.82880 3.64830 -1.77800 1.26010 -1.77800 3.78260 Пребразованная матрица T: Вектор Y 2.23056 0.00000 0.00000 -0.06492 2.48788 -1.05155 0.81988 1.72514 0.00000 Вектор X 0.56493 -1.29913 1.33256 -0.14090 0.84788 -0.78912 ----------------------- [pic] [pic] [pic] [pic] [pic] [pic]