Решение системы линейных уравнений методом Холецкого - Turbo Pascal

Узнай цену своей работы

Формулировка задачи:

Помогите решить написать систему уравнений.
Решение системы линейных уравнений методом Холецкого. Размер системы n параметр, n <= 10.

Решение задачи: «Решение системы линейных уравнений методом Холецкого»

textual
Листинг программы
program HOLETSKY;
 
{$M 65520, 65520, 65520}
 
const max_eq = 50;
type
    RealType=double;
 
    MCvector = array [0..max_eq] of RealType; {вектор}
 
    MCmatr = array [0..max_eq,0..max_eq] of RealType; {запись типа матрица}
 
function maxval(x,y:realtype):realtype;
begin
     if x<y then maxval:=y
     else maxval:=x;
end;
 
procedure Holetskiy(N:integer;A0:MCmatr; B0:MCvector; var X:MCvector; var error:RealType);
var
     i,j,m,k,p :byte;
     s,e,max   :RealType;
     A :MCmatr;
begin
     if (N>max_eq)or(N<2) then
     begin
          writeln('Ошибка в передаваемых данных.');
          halt(1);
     end;
 
     A:=A0;
     for i:=0 to N-1 do A[i,N]:=B0[i];
 
     for i:=0 to N-1 do       {выбор главного элемента по диагонали}
     begin
          max:=0;
          for j:=i to N-1 do
              if max<abs(A[i,j]) then
              begin
                   max:=abs(A[i,j]);
                   p:=j;
              end;
          if p<>i then
          begin
               for j:=0 to N do A[N,j]:=A[i,j];
               for j:=0 to N do A[i,j]:=A[p,j];
               for j:=0 to N do A[p,j]:=A[N,j];
          end;
     end;
 
     {метод Холецкого}
     for j:=1 to N do A[0,j]:=A[0,j]/A[0,0];
     for m:=1 to N-1 do
     begin
          for i:=m to N-1 do
          begin
               s:=0;
               for k:=0 to m-1 do s:=s+A[i,k]*A[k,m];
               A[i,m]:=A[i,m]-s
          end;
          for j:=m+1 to N do
          begin
               s:=0;
               for k:=0 to m-1 do s:=s+A[m,k]*A[k,j];
               A[m,j]:=(A[m,j]-s)/A[m,m]
          end;
     end;
     X[N-1]:=A[N-1,N];
     for i:=N-2 downto 0 do
     begin
          s:=0;
          for k:=i+1 to N-1 do s:=s+A[i,k]*X[k];
          X[i]:=A[i,N]-s
     end;
 
     {расчет ошибки}
     error:=0;
     for i:=0 to N-1 do
     begin
          s:=0;
          for j:=0 to N-1 do
              if i=j then s:=s+(A0[i,j]+1)*X[j]
              else s:=s+A0[i,j]*X[j];
          s:=s-B0[i];
          error:=maxval(error,abs(X[i]-s));
     end;
end;
 
var A   :MCmatr;
    B,X :MCvector;
    err :RealType;
    n,i,j   :integer;
 
begin {of program}
     writeln('Решение системы линейных уравнений методом Холецкого');
     writeln('с выбором главного элемента.');
     write('Введите числo уравнений = ');read(N);
     for i:=0 to N-1 do
     begin
          writeln('Введите коэффициенты ',i:0,'-го уравнения:');
          for j:=0 to N-1 do
          begin
            write('A[',i:0,',',j:0,'] = '); readln(A[i,j]);
          end;
          write('B[',i:0,'] = '); readln(B[i]);
     end;
 
     Holetskiy(N,A,B,X,err);
 
     writeln('Решение уравнения:');
     for i:=0 to N-1 do  writeln('X[',i:0,'] = ',X[i]);
     writeln('Точность результата =',err);
end.

Объяснение кода листинга программы

  1. В программе объявлены переменные: max_eq (максимальное количество уравнений), A0 (матрица входных коэффициентов), B0 (вектор входных переменных), X (вектор выходных переменных), error (переменная для хранения ошибки).
  2. В функции maxval функция max ищет максимальное значение среди всех элементов массива и возвращает его.
  3. В процедуре Holetskiy:
    • Проверяется, что N не превышает max_eq и не меньше 2. Если условия не выполняются, то выводится сообщение об ошибке и программа завершается.
    • Инициализируется переменная A с входными коэффициентами.
    • Выполняется перенос всех элементов из массива B в массив A.
    • Выполняется метод Холецкого для решения системы уравнений.
    • Вычисляется ошибка и записывается в переменную error.
    • Выводится решение системы уравнений и точность результата.
  4. В основной части программы:
    • Запрашивается количество уравнений.
    • Запрашиваются коэффициенты для каждого уравнения.
    • Вызывается процедура Holetskiy с передачей в нее входных данных.
    • Выводится решение системы уравнений и точность результата.

Оцени полезность:

8   голосов , оценка 3.5 из 5
Похожие ответы