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
12064
Munin в сообщении #602444 писал(а):
MatLab таким пакетом не является - он численный, и из всей математики умеет обращаться только с матрицами.

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

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

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



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

Сейчас этот форум просматривают: нет зарегистрированных пользователей


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

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