Поможем написать учебную работу
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.

Предоплата всего

Подписываем
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Предоплата всего
Подписываем
ЛАБОРАТОРНАЯ РАБОТА №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