Система линейных алгебраических уравнений(Решить методом Зейделя) - Turbo Pascal

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

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

Решить Методом Зейделя -5x1+x2+x3=-3 2x1+5x2-x3=6 x1+2x2+4x3=7 (x1=x2=x3=1)

Решение задачи: «Система линейных алгебраических уравнений(Решить методом Зейделя)»

textual
Листинг программы
uses crt;
const a: array [1..3] of real = (-5,2,1);
      b: array [1..3] of real = (1,5,2);
      c: array [1..3] of real = (1,-1,4);
      f: array [1..3] of real = (-3,6,7);
 
var  i,k,m: integer;
     e: real;
     x1,x2,x3,max: array [0..20] of real;
     b1,c1,f1: array [1..3] of real;
  {   a,b,c,f: array [1..3] of real;   }
     a2,b2,c2,f2: real;
 {Если нужен ручной ввод (убрать массивы констант
  и раскомментировать строки}
 
 }
begin
 clrscr;
{ writeln('Ввод коэффициентов:');
 for i:=1 to 3 do
  begin
   write('a[',i,'] = ');
   readln(a[i]);
   write('b[',i,'] = ');
   readln(b[i]);
   write('c[',i,'] = ');
   readln(c[i]);
   write('f[',i,'] = ');
   readln(f[i]);
  end;  }
 writeln('Введите точность: ');
 readln(e);
 writeln(a[1],'*x1 + ',b[1],'*x2 + ',c[1],'*x3 = ',f[1]);
 writeln(a[2],'*x1 + ',b[2],'*x2 + ',c[2],'*x3 = ',f[2]);
 writeln(a[3],'*x1 + ',b[3],'*x2 + ',c[3],'*x3 = ',f[3]);
 x1[0]:=0;
 x2[0]:=0;
 x3[0]:=0;
 for i:=1 to 3 do
  begin
   if i=1 then
    begin
     b1[i]:=(b[i]/a[i]);
     c1[i]:=(c[i]/a[i]);
     f1[i]:=(f[i]/a[i]);
    end;
   if i=2 then
    begin
     b1[i]:=(a[i]/b[i]);
     c1[i]:=(c[i]/b[i]);
     f1[i]:=(f[i]/b[i]);
    end;
   if i=3 then
    begin
     b1[i]:=(a[i]/c[i]);
     c1[i]:=(b[i]/c[i]);
     f1[i]:=(f[i]/c[i]);
    end;
  end;
 i:=0;
 repeat
   x1[k+1]:=-x2[k]*b1[1]-x3[k]*c1[1]+f1[1];
   x2[k+1]:=-x1[k+1]*b1[2]-x3[k]*c1[2]+f1[2];
   x3[k+1]:=-x1[k+1]*b1[3]-x2[k+1]*c1[3]+f1[3];
   max[0]:=abs(x1[k+1]-x1[k]);
   max[1]:=abs(x2[k+1]-x2[k]);
   max[2]:=abs(x3[k+1]-x3[k]);
   m:=i;
   for i:=0 to 2 do
    if max[i]>max[m] then
     m:=i;
   inc(k);
 until max[m]<e;
 writeln('x[1] = ',x1[k]:3:3);
 writeln('x[2] = ',x2[k]:3:3);
 writeln('x[3] = ',x3[k]:3:3);
 writeln('Итераций: ',k);
 readln;
end.

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

  1. Создаются три массива переменных типа real с именами a, b и c, которые представляют собой коэффициенты системы линейных алгебраических уравнений.
  2. Создается переменная i, которая будет использоваться для итерационного процесса.
  3. Создается переменная k, которая будет использоваться для отслеживания текущей итерации.
  4. Создается переменная m, которая будет использоваться для определения наименьшего значения из максимальных абсолютных разностей между последовательными элементами.
  5. Создается массив x, который будет использоваться для хранения промежуточных результатов.
  6. В цикле вводятся коэффициенты системы уравнений.
  7. Вводится точность, до которой должны быть приближены решения системы уравнений.
  8. Запускается цикл итераций. На каждой итерации вычисляются значения x1, x2 и x3 с использованием формулы из системы уравнений.
  9. Вычисляется максимальная абсолютная разность между текущим и предыдущим значением x1, x2 или x3.
  10. Если максимальная абсолютная разность больше заданной точности, то обновляется значение m.
  11. После завершения цикла итераций выводятся значения x1, x2 и x3, а также количество итераций.
  12. Программа завершается, ожидая ввода от пользователя.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

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

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