Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Вычислить определитель матрицы 5-го порядка

Автор: AliKs 24.05.2008 17:44

Помогите, пожалуйста с решением проблемы. Дано задание: "написать программу, которая вычисляет определитель матрицы пятого порядка". Моих знаний, к сожалению недотаточно, чобы выполнить. Способы приведённые в FAQ не смогу объяснить преподавателю..

Автор: volvo 24.05.2008 17:56

И что, ты хочешь, чтобы мы придумали новый способ, который ты сможешь объяснить? Что именно непонятно?

Автор: habi 24.05.2008 18:09

http://volvo71.narod.ru/faq_folder/matrices.htm#mx_det

Автор: volvo 24.05.2008 18:17

Я спрашиваю, что непонятно... Код я помню... Ты пальцем покажи, в какой строке затрудняешься объяснить? И заодно скажи, ты сам алгоритм нахождения определителя методом "понижения порядка" знаешь?

Автор: AliKs 24.05.2008 18:20

Ну, допустим. Взять способ "Вычисление детерминанта (определителя) матрицы
приведением к диагональному виду."

В массиве используется тип данных real. С одной стороны правильно, дабы появилась возможность работы с вещественными числами. Но, я, чтобы упростить себе задачу, решил работать только с целыми числами.
Мне непонятно, для чего используется константа epsilon. И как реализовать этот алгоритм для работы только с целыми числами.

Добавлено через 1 мин.

Цитата(volvo @ 24.05.2008 15:17) *

И заодно скажи, ты сам алгоритм нахождения определителя методом "понижения порядка" знаешь?


к сожалению, нет.

Автор: volvo 24.05.2008 19:25

Цитата
И как реализовать этот алгоритм для работы только с целыми числами.
Никак. По алгоритму требуется делить элементы строки на элемент главной диагонали, а частное - это всегда вещественный тип...

Цитата
Мне непонятно, для чего используется константа epsilon.
Для того, чтобы корректно проводить проверку на 0. С вещественными числами нельзя делать так:
if a[i, i] = 0 then ...

нужно сравнивать с очень маленьким числом, эту роль и выполняет epsilon, т.е., число, меньшее чем epsilon считается равным нулю...

Автор: AliKs 25.05.2008 0:12

попробовал просто использовать готовый вариант из FAQ: "Вычисление детерминанта (определителя) матрицы
приведением к диагональному виду". Заменил только порядок: с 3 на 5.

По непонятным мне причинам, вне зависимости от вводимой матрицы, ответ (определитель) равен нулю. Пробовал вводить и с клавиатуры и random'ом.

ps: Ещё мне непонятно, что происходит внутри функции det. Т.е., какие логические и математические действия в ней выполняются.

Автор: volvo 25.05.2008 0:37

Цитата
По непонятным мне причинам, вне зависимости от вводимой матрицы, ответ (определитель) равен нулю.

Задал матрицу вот так:
const
a: matrix = (
(1, 2, 3, 4, 5),
(2, 3, 7, 10, 13),
(3, 5, 11, 16, 21),
(2, -7, 7, 7, 2),
(1, 4, 5, 3, 10)
);

, и maxN = 5, в результате - получил правильный ответ: 52. Что я делаю не так?
Может, ты забыл в вызове Det заменить?
Determ := Det(a, 5);


Цитата
Ещё мне непонятно, что происходит внутри функции det. Т.е., какие логические и математические действия в ней выполняются.
Матрица приводится к диагональному виду. Алгоритм Гаусса см. здесь: http://ru.wikipedia.org/wiki/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%93%D0%B0%D1%83%D1%81%D1%81%D0%B0