Самая интересная информация только у нас!
программа для решения СЛУ методом Гаусса - Форум
Меню сайта

Форма входа

Поиск

Наш опрос
Оцените мой сайт
Всего ответов: 31

Статистика

Приветствую Вас, Гость · RSS 23.04.2024, 13:40

[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Модератор форума: DenzeL  
Форум » Мир IT технологий » Языки прграммирования » программа для решения СЛУ методом Гаусса (Pascal)
программа для решения СЛУ методом Гаусса
PhoenixДата: Пятница, 28.01.2011, 17:41 | Сообщение # 1
Новичок
Группа: Администратор
Сообщений: 9
Статус:
{Програма для решения СЛАУ методом Гаусса с выбором максимального главного элемента
Автор:Рогов Александр [AlexR] // Дата создания: 20.04.2009

Описание:
Программа оптимизирована одним из наилучших образов, пропускаются подсчет некоторых элементов матрицы,
которые не понадобятся для вычисления, вырезаны лишние вычисления переменных, избегаются повторы, вместо
естественной перестановки строк в матрице, при приведении ее к треугольному виду, используется мнимая,
(на самом деле в исходной матрице нет никаких перестановок).
Переменные:
i,j - вспомогательные переменные используемые как счетчики в цикле.(Индексы элементов матриц)
n - переменная учавствующая в формировании цикла
str/stlb - число строк/столбцов в РАСШИРЕННОЙ матрице
S - используется для накопления суммы чего-либо
M - максимальный главный элемент на данном шаге
l - вспомогательная переменная, используется в кач-ве "тарелки" при перестановке двух элементов
Матрицы:
A - расширенная матрица данная по условию задачи
A0 - копия матрицы A, для преобразования и сохранения начальных данных
Ans - столбец "ответ"
dAns - проверка правильности решения...столбец "ответ"
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,dAns: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.


Дружелюбный эгоист
 
KasperДата: Четверг, 09.02.2012, 23:57 | Сообщение # 2
Новичок
Группа: Пользователь
Сообщений: 2
Статус:
Бригада рабочих, выполнит любые виды отделочных работ любой сложности т.89169885519
 
Форум » Мир IT технологий » Языки прграммирования » программа для решения СЛУ методом Гаусса (Pascal)
  • Страница 1 из 1
  • 1
Поиск:


Copyright MyCorp © 2024