Подробное решение. Данная система уравнений будет иметь единственное решение только тогда, когда определитель составленный из коэффициентов при X1 - n не будет равен нулю. Посчитаем этот определитель. Если он равен нулю, то система не будет иметь однозначного, единственного решения и программа не будет решать дальше и выдаст сообщение об ошибке. Если определитель не равен нулю, то будем решать дальше методом обратной матрицы. Записанную Вами систему можно представить в виде произведения матриц: A × X = B, где X - матрица, содержащая искомые Вами решения системы уравнений. Найдем матрицу, обратную матрице A, как известно - А-1 × A = E, где Е - единичная матрица (квадратная матрица с единицами на главной диагонали), эквивалент '1' в матричном исчислении. Домножим обе части уравнения слева на А-1. А-1 × A × X = А-1 × B. Е × X = А-1 × B. X = А-1 × B.
unit ObrMatM;interfacetype Tmass=array of real; Tmatrix=array of Tmass; procedure Per(k,n:integer;var a:Tmatrix;var p:integer);//перестановка строк procedure Opr(n:integer;var det:real;var a:tmatrix); //определитель procedure Dop(n:integer;d:tmatrix;var det1:real);//дополнения Procedure Peresch(n:integer;b:Tmatrix;var e:Tmatrix);//присоединенная матрица Procedure Resh(n:integer;a:Tmatrix;b:Tmass;var x:Tmass); //нахождение корней function Znak(p:integer):integer;//знак при перестановке строк function Znak1(i,m:integer):integer;//знак дополненияimplementationprocedure Per(k,n:integer;var a:Tmatrix;var p:integer);var z:Real;j,i:integer;begin z:=abs(a[k,k]);i:=k;p:=0; for j:=k+1 to n-1 do begin if abs(a[j,k])>z then begin z:=abs(a[j,k]);i:=j; p:=p+1;//счетчик перестановок end; end; if i>k then for j:=k to n-1 do begin z:=a[i,j];a[i,j]:=a[k,j];a[k,j]:=z; end;end;procedure Opr(n:integer;var det:real;var a:tmatrix);var k,i,j,p:integer;r:real;begindet:=1.0; for k:=0 to n-1 do begin if a[k,k]=0 then Per(k,n,a,p);//перестановка строк det:=znak(p)*det*a[k,k];//вычисление определителя for j:=k+1 to n-1 do //пересчет коэффициентов begin r:=a[j,k]/a[k,k]; for i:=k to n-1 do begin a[j,i]:=a[j,i]-r*a[k,i]; end; end; end;end;procedure Dop(n:integer;d:tmatrix;var det1:real);var k,i,j,p:integer;r:real;begindet1:=1.0;for k:=1 to n-1 do begin Per(k,n,d,p); det1:=znak(p)*det1*d[k,k]; for j:=k+1 to n-1 do begin r:=d[j,k]/d[k,k]; for i:=k to n-1 do begin d[j,i]:=(d[j,i]-r*d[k,i]); end; end; end;end;Procedure Peresch(n:integer;b:Tmatrix;var e:Tmatrix );var i,m,k,j:integer;z,det1:real;d,c:Tmatrix;beginSetlength(c,n,n);Setlength(d,n,n); for i:=0 to n-1 do begin for m:=0 to n-1 do begin for j:=0 to n-1 do //перестановка строки begin z:=b[i,j]; for k:=i downto 1 do begin d[k,j]:=b[k-1,j];end; for k:=i+1 to n-1 do begin d[k,j]:=b[k,j]; end; d[0,j]:=z; end; for k:=0 to n-1 do //перестановка столбца begin z:=d[k,m]; for j:=m downto 1 do begin c[k,j]:=d[k,j-1]; end; for j:=m+1 to n-1 do begin c[k,j]:=d[k,j]; end; c[k,0]:=z; end; Dop(n,c,det1); //вычисление дополнений e[i,m]:=(det1)*znak1(i,m); //установление знака дополнений и end; //формирование присоединенной матрицы end;end;function Znak(p:integer):integer;beginif p mod 2=0 thenresult:=1 else result:=-1;end;function Znak1(i,m:integer):integer;beginif (i+m) mod 2=0 thenresult:=1 else result:=-1;end;//нахождение корнейProcedure Resh(n:integer;a:Tmatrix;b:Tmass;var x:Tmass);var k,j:integer;z:real;beginfor k:=0 to n-1 dobeginx[k]:=0; for j:=0 to n-1 do begin z:=a[k,j]*b[j]; x[k]:=x[k]+z; end;end;end;end.