Помощь - Поиск - Пользователи - Календарь
Полная версия: Вычислить определитель матрицы 5-го порядка
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
AliKs
Помогите, пожалуйста с решением проблемы. Дано задание: "написать программу, которая вычисляет определитель матрицы пятого порядка". Моих знаний, к сожалению недотаточно, чобы выполнить. Способы приведённые в FAQ не смогу объяснить преподавателю..
volvo
И что, ты хочешь, чтобы мы придумали новый способ, который ты сможешь объяснить? Что именно непонятно?
volvo
Я спрашиваю, что непонятно... Код я помню... Ты пальцем покажи, в какой строке затрудняешься объяснить? И заодно скажи, ты сам алгоритм нахождения определителя методом "понижения порядка" знаешь?
AliKs
Ну, допустим. Взять способ "Вычисление детерминанта (определителя) матрицы
приведением к диагональному виду."

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

Добавлено через 1 мин.
Цитата(volvo @ 24.05.2008 15:17) *

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


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

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

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

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

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

Задал матрицу вот так:
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. Т.е., какие логические и математические действия в ней выполняются.
Матрица приводится к диагональному виду. Алгоритм Гаусса см. здесь: Вики: Алгоритм Гаусса
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.