logo search
Аппроксимация ФУНКЦИИ

2.7 Методика вычисления обратной матрицы

Один из методов решения системы линейных уравнений (4), записываем в матричной форме А·Х=В, связан с использованием обратной матрицы А-1. В этом случае решение системы уравнений получается в виде

Х=А-1·В,

где А-1 –матрица, определяемая следующим образом.

Пусть А –квадратная матрица размером n х n с ненулевым определителем detA≠0. Тогда существует обратная матрица R=A-1, определяемая условием A·R=E,

где Е –единичная матрица, все элементы главной диагонали которой равны I, а элементы вне этой диагонали -0, Е=[E1,..., En], где Еi –вектор-столбец. Матрица К –квадратная матрица размером n х n.

где Rj –вектор-столбец.

Рассмотрим ее первый столбец R=( r11, r21,…, rn1)T, где Т –означает транспонирование. Нетрудно проверить, что произведение A·R равно первому столбцу E1=(1, 0, …, 0)Т единичной матрицы Е, т.е. вектор R1 можно рассмотреть как решение системы линейных уравнений A·R1=E1. Аналогично m –й столбец матрицы R , Rm, 1≤ m ≤ n, представляет собой решение уравнения A·Rm=Em, где Em=(0, …, 1, 0)T m –й столбец единичной матрицы Е.

Таким образом, обратная матрица R представляет собой набор из решений n систем линейных уравнений

A·Rm=Em , 1≤ m ≤ n.

Для решения этих систем можно применять любые методы, разработанные для решения алгебраических уравнений. Однако метод Гаусса дает возможность решать все эти n систем одновременно, а независимо друг от друга. Действительно, все эти системы уравнений отличаются только правой частью, а все преобразования, которые проводятся в процессе прямого хода метода Гаусса, полностью определяются элементами матрицы коэффициентов (матрицы А). Следовательно, в схемах алгоритмов изменению подлежат только блоки, связанные с преобразованием вектора В. В нашем случае одновременно будут преобразовываться n векторов Em, 1≤ m ≤ n. Результатом решения также будет не один вектор, а n векторов Rm, 1≤ m ≤ n.

3. Ручной счет

3.1 Исходные данные

Xi

0,3

0,5

0,7

0,9

1,1

Yi

1,2

0,7

0,3

-0,3

-1,4

Метод MINU

3.2 Система нормальных уравнений

3.3 Решение систем методом обратной матрицы

аппроксимация квадрат функция линейный уравнение

5 3,5 2,6 0,5 5 3,5 2,6 0,5

3,5 2,85 2,43 -0,89 0 0,4 0,61 -1,24

2,56 2,43 2,44 -1,86 0 0,638 1,109 -2,116

5 3,5 2,6 0,5

0 0,4 0,61 -1,24

0 0 0,136 -0,138

Результаты расчета:

С1=1,71; С2=-1,552; С3=-1,015;

Аппроксимирующая функция:

4. Текст программы

Program ApprF;

Uses Crt;

const n=3;

type

mass=array[1..5]of real;

mass1=array[1..3,1..3] of real;

mass2=array[1..3] of real;

var

X,Y,E,y1,delta : mass;

A: mass1;

B,x1: mass2;

big,r,sum,temp,maxD,Q:real;

i,j,k,l,num : byte;

Procedure VVOD(var E: mass);

Begin

For i:=1 to 5 do

read(E[i]);

writeln;

End;

Function FI( i ,k : integer): real;

Begin

if i=1 then FI:=1;

if i=2 then FI:=Sin(x[k]);

if i=3 then FI:=Cos(x[k]);

End;

Procedure PEREST(i:integer;var a:mass1;var b:mass2);

begin

big:=0;

num:=0;

for l:= i to 3 do

if abs(a[l,i]) > big then

begin

big:=a[l,i]; writeln ( big:6:4);

num:=l;

end;

if big=0 then

writeln('Перестановка уравнений');

if num<>i then

for j:=i to 3 do

begin

temp:=a[i,j];

a[i,j]:=a[num,j];

a[num,j]:=temp;

end;

temp:=b[i];

b[i]:=b[num];

b[num]:=temp;

end;

Begin

writeln('__________________');

writeln('Введите значения Х');

VVOD(X) ;

writeln('__________________');

writeln('‚Введите значения Y');

VVOD(Y);

writeln('___________________');

For i:=1 to 3 do

For j:=1 to 3 do

begin

A[i,j]:=0;

For k:=1 to 5 do

begin A[i,j]:= A[i,j]+FI(i,k)*FI(j,k); write(a[i,j]:7:5); end;

end;

writeln('________________________');

writeln('Матрица Коэффициентов Ai,j');

writeln('__________________________');

For i:=1 to 3 do

begin

For j:=1 to 3 do

write (A[i,j]:5:2, ' ');

writeln;

end;

For i:=1 to 3 do

begin

B[i]:=0;

For j:=1 to 5 do

B[i]:=B[i]+Y[j]*FI(i,j);

end;

writeln;

readkey;

writeln('__________________________');

writeln(‘Матрица Коэффициентов Bi ');

writeln('_________________________');

For i:=1 to 3 do

write(B[i]:5:2, ' ');

writeln;

for i:=1 to 2 do

begin

PEREST(i,a,b);

for k:=i+1 to 3 do

begin

Q:=a[k,i]/a[i,i]; writeln('g=',Q);

a[k,i]:=0;

for j:=i+1 to 3 do

a[k,j]:=a[k,j]-Q*a[i,j]; writeln('a=',a[k,j]);

b[k]:=b[k]-Q*b[i]; writeln('b=',b[k]);

end;

end;

x1[n]:=b[n]/a[n,n];

write(x1[n]);

for i:=2 downto 1 do

begin

sum:=b[i];

for j:=i+1 to 3 do

sum:=sum-a[i,j]*x1[j];

x1[i]:=sum/a[i,i];

end;

writeln('__________________________');

writeln ('Значение коэффициентов ');

writeln('_________________________');

for i:=1 to 3 do

writeln( ' C',i,'=',x1[i]);

k:=1;

for i:=1 to 5 do

begin

y1[i]:= x1[k]*FI(k,i) + x1[k+1]*FI(k+1,i) + x1[k+2]*FI(k+2,i);

delta[i]:=abs (y[i]-y1[i]);

writeln;

writeln (y1[i]);

end;

for i:=1 to 3 do

write (x1[i]:7:3);

writeln;

maxD:=delta[1];

for i:=1 to 5 do

if delta[i]>maxD then maxD:=delta[1];

writeln ('max Delta= ', maxD:5:3);

End.