IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> Вычислить определитель матрицы 5-го порядка
AliKs
сообщение 24.05.2008 13:44
Сообщение #1





Группа: Пользователи
Сообщений: 3
Пол: Мужской
Реальное имя: Алексей

Репутация: -  0  +


Помогите, пожалуйста с решением проблемы. Дано задание: "написать программу, которая вычисляет определитель матрицы пятого порядка". Моих знаний, к сожалению недотаточно, чобы выполнить. Способы приведённые в FAQ не смогу объяснить преподавателю..
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 24.05.2008 13:56
Сообщение #2


Гость






И что, ты хочешь, чтобы мы придумали новый способ, который ты сможешь объяснить? Что именно непонятно?
 К началу страницы 
+ Ответить 
habi
сообщение 24.05.2008 14:09
Сообщение #3


Новичок
*

Группа: Пользователи
Сообщений: 44
Пол: Мужской
Реальное имя: Артём

Репутация: -  0  +


Определитель матрицы (рекурсивное определение)

Сообщение отредактировано: habi - 24.05.2008 14:11
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 24.05.2008 14:17
Сообщение #4


Гость






Я спрашиваю, что непонятно... Код я помню... Ты пальцем покажи, в какой строке затрудняешься объяснить? И заодно скажи, ты сам алгоритм нахождения определителя методом "понижения порядка" знаешь?
 К началу страницы 
+ Ответить 
AliKs
сообщение 24.05.2008 14:20
Сообщение #5





Группа: Пользователи
Сообщений: 3
Пол: Мужской
Реальное имя: Алексей

Репутация: -  0  +


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

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

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

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


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

Сообщение отредактировано: AliKs - 24.05.2008 14:21
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 24.05.2008 15:25
Сообщение #6


Гость






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

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

нужно сравнивать с очень маленьким числом, эту роль и выполняет epsilon, т.е., число, меньшее чем epsilon считается равным нулю...
 К началу страницы 
+ Ответить 
AliKs
сообщение 24.05.2008 20:12
Сообщение #7





Группа: Пользователи
Сообщений: 3
Пол: Мужской
Реальное имя: Алексей

Репутация: -  0  +


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

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

ps: Ещё мне непонятно, что происходит внутри функции det. Т.е., какие логические и математические действия в ней выполняются.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 24.05.2008 20:37
Сообщение #8


Гость






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

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

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 18.07.2025 21:24
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"