Программирование метода Гаусса на языке Pascal

Если система линейных уравнений совместна (т.е. имеющая решения), то схема программы её решения можно записать так:

· Ввести коэффициенты и правые части уравнений;

· Выполнить прямой ход;

· Выполнить обратный ход;

· Вывести результаты.

При прямом ходе нужно: получить первое уравнение в виде, удобном для исключения , разделив полученное 1-е уравнение на коэффициент при ; исключить из уравнений с номерами 2, 3, …, n; получить второе уравнение в виде, удобном для исключения ; исключить из уравнений с номерами 3, …, n; получить n –1 уравнение в виде, удобном для получения ; исключить из уравнения с номером n.

Запишем схему программы этого фрагмента:

for i:=1 to n do

begin

Получить i-е уравнение в виде, удобном для исключения : исключить из уравнений с номерами i + 1, …, nс помощью i-го уравнения

end.

При обратном ходе из последнего уравнения находят Используя это значение, из предпоследнего n˗1 уравнения исключают и получают . Найденные значения переменных , , …, позволяют вычислить .

Детализируем этап обратного хода.

получить ;

for i:= n˗1 downto 1 do вычислить ;

вывести , …,

end.

Опираясь на разработанные схемы, запишем программу решения n линейных уравнений с n переменными методом Гаусса в предположении, что система совместна (n< = 10). Ввод данных осуществляется по строкам: коэффициенты первого уравнения и его правая часть, затем ˗ коэффициенты второго уравнения и его правая часть, затем ˗ коэффициенты второго уравнения и его правая часть и т.д.

Program Gauss;

Varn,I,j,l:integer; t:real; {Описания}

X:array[1..10] of real;

A:array[1..10,1..11] of real;

Begin

Read(n); {Числоуравнений}

For i:=1 to n do {Вводкоэффициентов}

For j:=1 to n+1 do {иправыхчастей}

Read (a[I,j]); {уравнений}

For i:=1 to n do

Begin

T:=a[I,j];

For j:=I to n+1 do {Делениеi-го уравнения}

A[I,j]:= a[I,j]/t {накоэффициентыприx[i]}

For l:=i+1 to n do

For j:= i+1 to n+1 do

A[l,j]: = a[l,j] ˗ a[I,j]*a[l,i]

End;

X[n]: = a[n,n+1]; {Вычисление x[n]}

For i: = n˗1 downto 1 do {Вычислениеx[i]}

Begin

X[i]: = a[I,n+1];

For j: = i+1 to n do

X[i]: = x[i] ˗ a[I,j]*x[j]

End;

For I: = 1 to n do

Writeln (x[i]); {Выводx[i]}

End.

 


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: