Created
September 20, 2009 10:16
-
-
Save buger/189770 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{Програма для решения СЛАУ методом Гаусса с выбором максимального главного элемента | |
Переменные: | |
i,j - вспомогательные переменные используемые как счетчики в цикле.(Индексы элементов матриц) | |
n - переменная учавствующая в формировании цикла | |
str/stlb - число строк/столбцов в РАСШИРЕННОЙ матрице | |
S - используется для накопления суммы чего-либо | |
M - максимальный главный элемент на данном шаге | |
l - вспомогательная переменная, используется в кач-ве "тарелки" при перестановке двух элементов | |
Матрицы: | |
A - расширенная матрица данная по условию задачи | |
A0 - копия матрицы A, для преобразования и сохранения начальных данных | |
Ans - столбец "ответ" | |
p - матрица индексов строк матрицы A} | |
program GaussSMax; | |
uses crt; | |
type | |
Mat=array [1..51,1..52] of real; | |
MatA=array [1..51] of real; | |
var i,j,n,l,str,stlb:integer; | |
A0,A:Mat; | |
p:array [1..51] of integer; | |
Ans:MatA; | |
S,M:real; | |
begin | |
write ('Введите колличество строк в расширенной матрице:'); | |
readln (str); | |
write ('Введите колличество столбцов в расширенной матрице:'); | |
readln (stlb); | |
writeln ('Ввод матрицы:'); | |
for i:=1 to str do begin | |
for j:=1 to stlb do begin | |
if j<>stlb then begin | |
write ('Введите элемент матрицы а(',i,';',j,'):'); | |
readln (A[i,j]); | |
A0[i,j]:=A[i,j]; | |
end | |
else begin | |
write ('Введите элемент матрицы b',i,':'); | |
readln (A[i,j]); | |
A0[i,j]:=A[i,j]; | |
end; | |
end; | |
p[i]:=i | |
end; | |
{Прямой ход} | |
for n:=1 to str do begin | |
M:=A0[p[n],p[n]]; | |
{Поиск максимального гл эелемента} | |
for i:=n to str do | |
if abs(A0[p[i],n])>=abs(M) then begin | |
M:=A0[p[i],n]; | |
l:=p[n]; | |
p[n]:=i; | |
p[i]:=l | |
end; | |
{Приведение к треугольному виду} | |
for j:=n+1 to stlb do | |
A0[p[n],j]:=A0[p[n],j]/M; | |
for i:=n+1 to str do | |
for j:=n+1 to stlb do | |
A0[p[i],j]:=A0[p[i],j]+A0[p[n],j]*(-A0[p[i],n]) | |
end; | |
{Обратный ход} | |
Ans[n]:=A0[p[n],n+1]; | |
for i:=n-1 downto 1 do begin | |
S:=0; | |
for j:=n downto i+1 do | |
S:=S+A0[p[i],j]*Ans[j]; | |
Ans[i]:=A0[p[i],stlb]-S | |
end; | |
{Вывод ответа} | |
for i:=1 to str do | |
writeln ('x',i,'=',Ans[i]); | |
end. |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment