|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
02.05.2008, 01:34 | #1 |
Пользователь
Регистрация: 25.09.2007
Сообщений: 66
|
Определитель матрицы
Здравствуйте и с прошедшими праздниками всех. Помогите мне пожалуйста. Я пишу программу, для нахождения определителя матрицы. Идея такова: привести матрицу к треугольному виду и переумножить все элементы главной диагонали. Но прежде надо привести к треугольному виду. Ну, в принцыпе это и не выходит. Посмотрите пожалуйста, заранее благодарен.
|
02.05.2008, 01:59 | #2 |
Старожил
Регистрация: 26.04.2008
Сообщений: 2,645
|
Извиняюсь, что на паскале, но вот отрывок из метода Гауса по приведению квадратной матрицы к треугольному виду, однако система уравнений должна быть разрешима
Код:
|
02.05.2008, 02:18 | #3 |
Старожил
Регистрация: 26.04.2008
Сообщений: 2,645
|
Ну вот, поковырялся в своих старых задачах по ЧМ и нашёл решение системы уравнений методом Гауса с учётом ошибки деления на ноль.
Немного его упростите и получится самое то Код:
Пример для пояснения |1, 2| | | = 1*4-2*3 = -2 |3, 4| теперь поменяем строки |3, 4| | | = 3*2-4*1 = 2 |1, 2| Таким образом надо знать сколько ра вызывалась процедура swapij (поставить туда счётчик), а затем определитель матричы умножить на (-1) столько число раз, чему равен счётчик |
02.05.2008, 02:44 | #4 |
Пользователь
Регистрация: 25.09.2007
Сообщений: 66
|
Спаибо, но а мой код подправить как-то можно, ато что-то немного сложно разобратся...
|
02.05.2008, 03:07 | #5 |
Старожил
Регистрация: 26.04.2008
Сообщений: 2,645
|
Код:
Прошлый код странен и не верно производит деление (ошибка в алгоритме) Последний раз редактировалось eoln; 02.05.2008 в 03:11. |
02.05.2008, 03:32 | #6 |
Пользователь
Регистрация: 25.09.2007
Сообщений: 66
|
я даже чуток не то загрузил
|
10.02.2010, 10:40 | #7 |
Форумчанин
Регистрация: 10.02.2010
Сообщений: 137
|
раз уж тут начали обсуждать определитель, то вот:
const n=5; type matr=array[1..n,1..n] of longint; var a,b:matr; i,j,dt:longint; procedure PrintMatr(m:matr;n:integer); var i,j:integer; begin for i:=1 to n do begin for j:=1 to n do write(m[i,j]:3); writeln; end; end; procedure GetMatr(a:matr; var b:matr; m,i,j:integer); var ki,kj,di,dj:integer; begin di:=0; for ki:=1 to m-1 do begin if (ki=i) then di:=1; dj:=0; for kj:=1 to m-1 do begin if (kj=j) then dj:=1; b[ki,kj]:=a[ki+di,kj+dj]; end; end; end; Function Determinant(a:matr;n:integer):longi nt; var i,j,d,k:longint; b:matr; begin d:=0; k:=1; if (n<1) then begin writeln('Determinant: Cann''t run. N=',n); halt; end; if (n=1) then d:=a[1,1] else if (n=2) then d:=a[1,1]*a[2,2]-a[2,1]*a[1,2] else { n>2 } for i:=1 to n do begin GetMatr(a,b,n,i,1); d:=d+k*a[i,1]*Determinant(b,n-1); k:=-k; end; Determinant:=d; end; begin randomize; for i:=1 to n do for j:=1 to n do a[i,j]:=random(5); PrintMatr(a,n); dt:=Determinant(a,n); writeln('========='); writeln('Determinant=',dt); end. только: 1. для 4, 5, 6, 7 мерной матрицы не хватает динамической памяти, если кто поможет буду очень благодарен! 2. надо чтобы вся программа работала от одной процедуры(ну или хотябы эта процедура обращалась к процедурам и функции. это надо мне для создания меню). |
10.02.2010, 10:44 | #8 |
Форумчанин
Регистрация: 10.02.2010
Сообщений: 137
|
ну вобщем нужна помощь с 1 и 2.
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Матрицы | FatalX | Помощь студентам | 21 | 17.04.2009 22:50 |
матрицы | chelsi | Паскаль, Turbo Pascal, PascalABC.NET | 13 | 25.04.2008 10:07 |
матрицы | Ensoph | Помощь студентам | 1 | 24.10.2007 09:38 |