|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
29.10.2008, 13:25 | #1 |
Пользователь
Регистрация: 01.04.2008
Сообщений: 42
|
Как в Методе гаусса создать обратную(At) матрицу!выполнить проверку!
Как в Методе гаусса создать обратную(At) матрицу!выполнить проверку!var
r,i,j,k,n: integer; max,c,m,s:real;a: array[1..100,1..100] of real; x,b: array[1..100]of real; f: file of real; begin {ввод элементов массива} write ('Введите размерность = '); {Вводим размерность} read (n); for i:=1 to n do begin for j:=1 to n do begin write ('a[',i,',',j,']='); {Вводим значение} read (a[i,j]); end; writeln; write ('b[',i,']='); {Вводим значение свободного члена} readln(b[i]); end; {прямой ход метода Гаусса} for k:=1 to n do begin max:=abs(a[k,k]); {Сохраняем в max модуль диогонального элемента} r:=k; {В r запоминаем номертекущей строки} for i:=k+1 to n do if abs(a[i,k])>max then {Если модуль текущего элемента больше max, то} begin max:=abs(a[i,k]); {cохраняем его значение в max, а в r номер текущей строки} r:=i; end; for j:=1 to n do begin c:=a[k,j]; {меняем элементы текущей строки и строки,содержащий максимальный элемент} a[k,j]:=a[r,j]; a[r,j]:=c; end; c:=b[k]; {меняем элементы текущей строки и строки,содержащий максимальный элемент} b[k]:=b[r]; b[r]:=c; for i:=k+1 to n do begin m:=a[i,k]/a[k,k]; {находим коэфициент для текущей строки} for j:=k to n do {в цикле по номеру строки} a[i,j]:=a[i,j]-m*a[k,j]; {присваиваем элементам строки новыен значения} b[i]:=b[i]-m*b[k]; {последним элементом строки явл новое значение свободного члена} end; end; {вывод треугольной матрицы} for i:=1 to n do begin for j:=1 to n do write(a[i,j]:1:2,' '); writeln(b[i]:1:2); end; {Обратный ход метода Гаусса} assign(f, 'otvet.dat'); {otvet.dat - имя файла на диске} rewrite(f); if a[n,n]=0 then if b[n]=0 then writeln ('Бесконечное множество решений') else writeln ('Нет решений (Матрица несовместна)') else for i:=n downto 1 do begin s:=0; for j:=i+1 to n do begin s:=s+a[i,j]*x[j]; end; x[i]:b[i]-s)/a[i,i]; {находим неизвестное в текущей строке} writeln('x(',i,')=',x[i]:1:2); {выводим текущее значение} write(f, x[i]); end; close(f); readln end. |
29.10.2008, 15:46 | #2 |
Старожил
Регистрация: 13.10.2007
Сообщений: 2,740
|
А зачем в методе Гаусса обратная матрица? По-моему есть способ решения СЛАУ методом обратных матриц, там есть проверка - умножение прямой матрицы на обратную, но это не Гаусс в том виде как его обычно описывают, это другой способ решения. И непонятно для чего Вы тут приводите чужой код, да еще без тегов? Кто понимает, тот сам напишет, кто не понимает и читать не будет.
Последний раз редактировалось puporev; 29.10.2008 в 15:49. |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
создать типизированный файл который будет использоваться в Методе Гаусса | vdv08 | Помощь студентам | 5 | 23.10.2008 15:17 |
Как составить матрицу корреспонденции? | Alex2008 | Помощь студентам | 3 | 25.04.2008 19:17 |
Как создать обратную функцию, которая из уникального номера будет возвращать строку? | SkAndrew | Общие вопросы Delphi | 8 | 06.04.2008 21:10 |
Как посчитать матрицу? | RECREATOR | Помощь студентам | 8 | 30.11.2007 07:10 |
Как в С++ вывести(записать ) информацию в файл, когда инфа находится в методе класса? | Artur_cod | Общие вопросы C/C++ | 1 | 06.05.2007 00:34 |