2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему На страницу 1, 2  След.
 
 Определитель матрицы в MatLab
Сообщение02.08.2012, 19:28 


08/02/12
86
Подскажите, пожалуйста, почему определитель матрицы:
$A = \begin{pmatrix} 1 & 2 & 3 \\ 4 & 5 & 6 \\ 7 & 8 & 9 \end{pmatrix}$

равен 6.6613e-16 в MatLab 7?

 Профиль  
                  
 
 Re: Определитель матрицы в MatLab
Сообщение02.08.2012, 19:34 
Заслуженный участник


11/05/08
32166
kopern1k в сообщении #602408 писал(а):
Подскажите, пожалуйста, почему определитель матрицы равен 6.6613e-16 в MatLab 7?

Есть лишь одно возможное объяснение: потому, что он равен нулю (не проверял, но других объяснений быть не может).

 Профиль  
                  
 
 Re: Определитель матрицы в MatLab
Сообщение02.08.2012, 19:35 
Заслуженный участник
Аватара пользователя


30/01/06
72407
Потому что MatLab - численный пакет, и выдаёт что насчитал. В данном случае - ошибку вычисления. Число с порядком e-16 - это практически машинный ноль, потому что у чисел "с двойной точностью" (число с плавающей точкой 64 бита) 16 значащих десятичных цифр.

 Профиль  
                  
 
 Re: Определитель матрицы в MatLab
Сообщение02.08.2012, 19:39 


08/02/12
86
А как тогда лучше всего делать проверку равенства нулю определителя матрицы?

 Профиль  
                  
 
 Re: Определитель матрицы в MatLab
Сообщение02.08.2012, 19:41 
Заслуженный участник


11/05/08
32166
Я всё-таки дополню. Возможно, ТС надеялся на то, что Матлаб будет считать определитель через миноры. Щаз, разбежались. Он их считает методом Гаусса или типа того. А тогда -- деления и почти неизбежные (разве что чудом повезёт) погрешности округления даже в самых примитивных случаях.

 Профиль  
                  
 
 Re: Определитель матрицы в MatLab
Сообщение02.08.2012, 19:47 
Заслуженный участник
Аватара пользователя


30/01/06
72407
ewert в сообщении #602414 писал(а):
Есть лишь одно возможное объяснение: потому, что он равен нулю (не проверял, но других объяснений быть не может).

Проверка у меня заняла секунды: вспомнить, что можно вычесть первую строку из второй, вторую из третьей и вычесть результаты.

kopern1k в сообщении #602422 писал(а):
А как тогда лучше всего делать проверку равенства нулю определителя матрицы?

Не численно. С выполнением этого условия - всё равно как.

Или, можете считать численно, а потом сравнивать ответ с нулём с точностью до "машинного эпсилон", который можно установить где-нибудь 1e-10 - за глаза хватит.

 Профиль  
                  
 
 Re: Определитель матрицы в MatLab
Сообщение02.08.2012, 19:49 
Заслуженный участник


11/05/08
32166
kopern1k в сообщении #602422 писал(а):
А как тогда лучше всего делать проверку равенства нулю определителя матрицы?

Это -- вопрос, вообще говоря, нетривиальный. Надо более-менее вручную задавать порог отсечения: что считать уже нулём, а что -- ещё нет. Тот же Матлаб при решении систем и в аналогичных задачах время от времени выдаёт предупреждения (не ошибки, а именно предупреждения) типа "матрица вырожденна или плохо обусловленна". Это означает, что по ходу встроенного в него алгоритма встретились шаги, подозрительно напоминающие деление на ноль. Но окончательно Матлаб решить этого не может, поскольку абсолютных критериев тут нет и быть не может в принципе; вот и отдаёт этот вопрос на откуп пользователю -- авось у того есть какая-либо дополнительная информация.

 Профиль  
                  
 
 Re: Определитель матрицы в MatLab
Сообщение02.08.2012, 20:01 


08/02/12
86
Спасибо, понятно.

Цитата:
Не численно. С выполнением этого условия - всё равно как.


А как нечисленно проверять? Есть какие-то специальные функции?

 Профиль  
                  
 
 Re: Определитель матрицы в MatLab
Сообщение02.08.2012, 20:09 
Заслуженный участник
Аватара пользователя


30/01/06
72407
kopern1k в сообщении #602439 писал(а):
А как нечисленно проверять? Есть какие-то специальные функции?

1 способ: С помощью ручки и бумажки.
2 способ: С помощью пакета символьных вычислений (например, Mathematica, MathCAD, Maple). MatLab таким пакетом не является - он численный, и из всей математики умеет обращаться только с матрицами.

 Профиль  
                  
 
 Re: Определитель матрицы в MatLab
Сообщение02.08.2012, 20:27 


08/02/12
86
Понятно.
Хотя странно, почему нельзя подключить какую-нибудь библиотеку, которая вычисляла теми же минорами.

 Профиль  
                  
 
 Re: Определитель матрицы в MatLab
Сообщение02.08.2012, 20:40 
Заслуженный участник
Аватара пользователя


30/01/06
72407
Да напишите свою программу на MatLab, которая вычисляла бы минорами, он для этого достаточно мощен (и другие перечисленные пакеты тоже). Дело в том, что это от ошибок округления не избавит.

 Профиль  
                  
 
 Re: Определитель матрицы в MatLab
Сообщение02.08.2012, 20:49 


08/02/12
86
То есть ошибка возникает не только из-за деления чисел, но и из-за представления самих чисел?

 Профиль  
                  
 
 Re: Определитель матрицы в MatLab
Сообщение02.08.2012, 21:01 
Заслуженный участник


11/05/08
32166
Munin в сообщении #602463 писал(а):
которая вычисляла бы минорами, он для этого достаточно мощен (и другие перечисленные пакеты тоже). Дело в том, что это от ошибок округления не избавит.

От ошибок это, формально говоря, избавляет. Проблема лишь в том, что это вычислительно безумно неэффективно.

 Профиль  
                  
 
 Re: Определитель матрицы в MatLab
Сообщение02.08.2012, 21:56 
Заслуженный участник
Аватара пользователя


30/01/06
72407
kopern1k в сообщении #602469 писал(а):
То есть ошибка возникает не только из-за деления чисел, но и из-за представления самих чисел?

Ошибка возникает из-за всех операций с числами: и сложения, и умножения, и деления. Кстати, от сложения и вычитания - прежде всего.

Разумеется, если вы пожелаете только записать число, а потом его прочитать, то оно изобразится без ошибок.

ewert в сообщении #602475 писал(а):
От ошибок это, формально говоря, избавляет.

Интересно, как?

 Профиль  
                  
 
 Re: Определитель матрицы в MatLab
Сообщение03.08.2012, 00:36 
Экс-модератор
Аватара пользователя


23/12/05
12072
Munin в сообщении #602444 писал(а):
MatLab таким пакетом не является - он численный, и из всей математики умеет обращаться только с матрицами.

Это не совсем так. Символьные вычисления в Matlab возможны, хотя он под них и не особо "заточен", поэтому мало кто пользуется. Посмотрите: http://www.mathworks.co.uk/products/symbolic/

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 29 ]  На страницу 1, 2  След.

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: Google [Bot]


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group