Re[4]: Как вычислить определитель матрицы NxN?
От: alzt  
Дата: 08.05.07 12:52
Оценка: :)))
Здравствуйте, bo, Вы писали:

К>>Так что — аккуратнее с рекурсией!


bo>Я полностью с Вами согласен, Кодт. С каждым вызовом порядок будет уменьшаться на один и кол-во вызовов сведется к факториалу. Но вопрос не в этом. Надо ли многоуважаемому tolij замороки, приводя матр. к диагонали стандартным гауссом или еще чем-либо?

bo>Наверняка ведь зачетная неделя на носу, а доброму профессору надо показать классик CMatrix, да еще что бы он правильно посчитал действия над матрицами размером 4х4. Все такие были...
bo>Так что вовсе не обязательно хитрить, можно иногда и "влоб" задачку решить, нагляднее будет...

Алгоритм:
Проверить порядок матрицы (и то что она квадратная). Если порядок равен 1,то вернуть единственный элемент.
Если 2,3,4,можно даже 5 — вычислить по формуле (вывести не сложно).
Если > 5 — случайно сгенерировать ответ, всё равно препод проверять не будет.
Re[2]: Как вычислить определитель матрицы NxN?
От: Кодт Россия  
Дата: 13.12.01 14:40
Оценка: 15 (1)
Здравствуйте bo, Вы писали:

bo>Сделайте так: разложите по строке или столбцу, и получится рекурсивная процедурка вычисления определителя, при каждом вызове которой (или серии вызовов) порядок будет понижаться. Остается добавить, что определитель матрицы 1х1 есть сам элемент а(1,1).

bo>Не факт, что данный способ самый эффективный, но своей простотой он мне понравился.
bo>Могу прислать исходники. :shuffle:

Есть классическая приколка.
число Фибоначчи
int F(n) { return n < 2 ? 1 : F(n-1) + F(n-2); }

Вопрос: чему равно O( F(n) ), то есть сколько раз вызовется функция?
Понятно, что глубина стека будет n
А вот время вычислений...

Ответ: O( F(n) ) = F(n)
Потому что в конечном счете (если развернуть выражение)
все сведется к F(n) = F(1)+F(0)+F(1)+F(1)+F(0).... = 1+1+....

Так что — аккуратнее с рекурсией!
Перекуём баги на фичи!
Re: Как вычислить определитель матрицы NxN?
От: yvb  
Дата: 12.12.01 17:40
Оценка: 9 (1)
Здравствуйте tolij, Вы писали:

T>Как написать программу для вычисления определителя матрицы размером NxN?


сначала надо привести матрицу к треугольному виду методом
исключения Гаусса, а затем перемножить элементы на главной диагонали.
Это и будет определитель.
Но если ты переставлял во время Гауссового исключения строки или
столбцы, то надо еще учитывать знак. При каждой перестановке двух строк
или двух столбцов матрицы знак определителя меняется на противоположный.

Юра.
Re: Как вычислить определитель матрицы NxN?
От: bo Россия  
Дата: 13.12.01 10:22
Оценка: -1
Здравствуйте tolij.

Сделайте так: разложите по строке или столбцу, и получится рекурсивная процедурка вычисления определителя, при каждом вызове которой (или серии вызовов) порядок будет понижаться. Остается добавить, что определитель матрицы 1х1 есть сам элемент а(1,1).
Не факт, что данный способ самый эффективный, но своей простотой он мне понравился.
Могу прислать исходники.
В человечишке все должно быть прекрасненьким: и одёжка, и душенка, и мордочка, и мыслишки.
Как вычислить определитель матрицы NxN?
От: tolij Россия  
Дата: 12.12.01 17:05
Оценка:
Как написать программу для вычисления определителя матрицы размером NxN?
Пробовал перебором коэффициентов, получалось только до 4-го порядка, да и то со знаками были некоторые несоответствия.
На крайняк хотелось бы подсчитать определитель трехдиагональной матрицы.
Re: Как вычислить определитель матрицы NxN?
От: Sashko Россия http://www.dc.baika.ru/
Дата: 13.12.01 02:51
Оценка:
Здравствуйте tolij, Вы писали:

T>Как написать программу для вычисления определителя матрицы размером NxN?


Через алгебраические дополнения. В чем проблема? Формулы есть во всех учебниках по алгебре, в Куроше например.
Re[2]: Как вычислить определитель матрицы NxN?
От: Punk Россия  
Дата: 13.12.01 14:55
Оценка:
Здравствуйте bo, Вы писали:

bo>Здравствуйте tolij.


bo>Сделайте так: разложите по строке или столбцу, и получится рекурсивная процедурка вычисления определителя, при каждом вызове которой (или серии вызовов) порядок будет понижаться. Остается добавить, что определитель матрицы 1х1 есть сам элемент а(1,1).

bo>Не факт, что данный способ самый эффективный, но своей простотой он мне понравился.
bo>Могу прислать исходники.

Сложность будет n! — хорошо, если при N=20 посчитает...
Re[3]: Как вычислить определитель матрицы NxN?
От: bo Россия  
Дата: 14.12.01 08:20
Оценка:
Здравствуйте Кодт, Вы писали:

К>Вопрос: чему равно O( F(n) ), то есть сколько раз вызовется функция?

К>Понятно, что глубина стека будет n
К>А вот время вычислений...

К>Ответ: O( F(n) ) = F(n)

К>Потому что в конечном счете (если развернуть выражение)
К>все сведется к F(n) = F(1)+F(0)+F(1)+F(1)+F(0).... = 1+1+....

К>Так что — аккуратнее с рекурсией!


Я полностью с Вами согласен, Кодт. С каждым вызовом порядок будет уменьшаться на один и кол-во вызовов сведется к факториалу. Но вопрос не в этом. Надо ли многоуважаемому tolij замороки, приводя матр. к диагонали стандартным гауссом или еще чем-либо?
Наверняка ведь зачетная неделя на носу, а доброму профессору надо показать классик CMatrix, да еще что бы он правильно посчитал действия над матрицами размером 4х4. Все такие были...
Так что вовсе не обязательно хитрить, можно иногда и "влоб" задачку решить, нагляднее будет...
В человечишке все должно быть прекрасненьким: и одёжка, и душенка, и мордочка, и мыслишки.
Re: Как вычислить определитель матрицы NxN?
От: volk  
Дата: 14.12.01 14:29
Оценка:
Здравствуйте tolij, Вы писали:

T>Как написать программу для вычисления определителя матрицы размером NxN?

T>Пробовал перебором коэффициентов, получалось только до 4-го порядка, да и то со знаками были некоторые несоответствия.
T>На крайняк хотелось бы подсчитать определитель трехдиагональной матрицы.

Поищите по сети -- задача стандартная.

Есть такой метод: методом Гаусса привести матрицу к треугольной, а затем посчитать произведение диагональных элементов. Это будет определитель, умноженный на какое-то число. Число должно считаться по ходу гауссовых преобразований — ведь известно, во сколько раз каждое преобразование изменяет определитель матрицы.

Если про "число" непонятно, могу рассказать подробнее.
Тот, кто желает, но не делает, распространяет чуму.
Re: Как вычислить определитель матрицы NxN?
От: Аноним  
Дата: 20.12.01 08:18
Оценка:
Здравствуйте tolij, Вы писали:

T>Как написать программу для вычисления определителя матрицы размером NxN?

T>Пробовал перебором коэффициентов, получалось только до 4-го порядка, да и то со знаками были некоторые несоответствия.
T>На крайняк хотелось бы подсчитать определитель трехдиагональной матрицы.

Для справки — основным инженерным алгоритмом расчета определителя матрицы, является алгоритм сведения матрицы к треугольной и перемножение элементов главной диагонали. Как одну из реализаций используют метод LU-разложения с выбором ведущего элемента для повышения точности. Расчитывать же определитель через дополнения программно —
откровенная глупость, при порядке матрицы 15 — 20 это просто неприемлимо.
Re: Как вычислить определитель матрицы NxN?
От: Roman Ivanshko  
Дата: 29.12.01 08:20
Оценка:
Здравствуйте tolij, Вы писали:

T>Как написать программу для вычисления определителя матрицы размером NxN?

T>Пробовал перебором коэффициентов, получалось только до 4-го порядка, да и то со знаками были некоторые несоответствия.
Самый оптимальный метод: по Гаусу с приведением к треугольной + выбор ведущего элемента, при выборе ведущего надо считать число перестановок, чтоб знак определить. Да! Матрица может оказать вырожденной... Надо по ходу отслеживать.
T>На крайняк хотелось бы подсчитать определитель трехдиагональной матрицы.
Для трёхдиагональных матриц существует метод разностной прогонки, является одним из самых эффективных. В книжицах по численному должен быть описан.
Re[3]: Как вычислить определитель матрицы NxN?
От: sadomovalex Россия http://sadomovalex.blogspot.com
Дата: 11.05.07 10:10
Оценка:
Здравствуйте, Кодт, Вы писали:

К>Ответ: O( F(n) ) = F(n)

К>Потому что в конечном счете (если развернуть выражение)
К>все сведется к F(n) = F(1)+F(0)+F(1)+F(1)+F(0).... = 1+1+....

только
O( F(n) ) = F(n + 1)
для F(2) надо же 2 вызова сделать, вернее 3, но сам F(2) пойдет на асимптотику
"Что не завершено, не сделано вовсе" Гаусс
Re[4]: Как вычислить определитель матрицы NxN?
От: Иванков Дмитрий Россия  
Дата: 11.05.07 10:19
Оценка:
Здравствуйте, sadomovalex, Вы писали:

S>Здравствуйте, Кодт, Вы писали:


К>>Ответ: O( F(n) ) = F(n)

К>>Потому что в конечном счете (если развернуть выражение)
К>>все сведется к F(n) = F(1)+F(0)+F(1)+F(1)+F(0).... = 1+1+....

S>только

S>O( F(n) ) = F(n + 1)
S>для F(2) надо же 2 вызова сделать, вернее 3, но сам F(2) пойдет на асимптотику

F(n) <= F(n+1) <= 2 * F(n)

Так что это одно и то же
Re[5]: Как вычислить определитель матрицы NxN?
От: sadomovalex Россия http://sadomovalex.blogspot.com
Дата: 11.05.07 13:30
Оценка:
Здравствуйте, Иванков Дмитрий, Вы писали:

ИД>Здравствуйте, sadomovalex, Вы писали:


S>>Здравствуйте, Кодт, Вы писали:


К>>>Ответ: O( F(n) ) = F(n)

К>>>Потому что в конечном счете (если развернуть выражение)
К>>>все сведется к F(n) = F(1)+F(0)+F(1)+F(1)+F(0).... = 1+1+....

S>>только

S>>O( F(n) ) = F(n + 1)
S>>для F(2) надо же 2 вызова сделать, вернее 3, но сам F(2) пойдет на асимптотику

ИД>F(n) <= F(n+1) <= 2 * F(n)


ИД>Так что это одно и то же


для "O( F(n) )" да, для "сколько раз вызовется функция" нет
"Что не завершено, не сделано вовсе" Гаусс
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.