eXeL@B —› Программирование —› Математика, матрицы, double, погрешность. |
Посл.ответ | Сообщение |
|
Создано: 17 февраля 2010 20:33 · Поправил: AlexZ · Личное сообщение · #1 Случайно нажал не ту кнопку ("выберите форум", млять) и потерял сообщение, поэтому обозначусь снова вкратце. Пишу на пятой яве, решаю задачи с привлечением СЛАУ. Юзаю два разных модуля для LU разложения и для решения обратной матрицей. Модули с интернетов. Решаю систему типа Ax=b, где b состоит из нулей и чисел 1..100 приблизительно. Матрица А состоит из чисел типа 14.732568125107 Периодически есть разные результаты решения одного примера двумя методами, зависит от исходных данных. Также имею недопустимый разброд в решениях при исходных данных, скажем 14.732568125107 и 14.732568. Предположительно ошибка зависит от размерности матрицы. Есть некие эталонные примеры, к которым надо приближать точности решения. Но некие колебания исходных данных в 0.0000001 или т.п. уводят решения в серьезную ошибку с точки зрения физической и инженерной - получаются неправдоподобные результаты. Как отслеживать когда алго начинает врать? И есть ли вообще совет/решение/панацея для правильных результатов? ----- Я медленно снимаю с неё UPX... *FF_User* |
|
Создано: 17 февраля 2010 21:43 · Личное сообщение · #2 В точных методах (gaussian elimination, LU-decomposition, etc) избавиться от погрешности (rounding errors) полностью не получится. Существую модификации Гаусса для снижения погрешности (с выбором ведущего элемента), но в целом они не могут гарантировать точности решения. Ответ - использовать итерационные методы. |
|
Создано: 17 февраля 2010 21:57 · Личное сообщение · #3 |
|
Создано: 17 февраля 2010 22:15 · Личное сообщение · #4 |
|
Создано: 18 февраля 2010 14:20 · Личное сообщение · #5 Как отслеживать когда алго начинает врать? И есть ли вообще совет/решение/панацея для правильных результатов? В заголовке же ответ : double. Посчитать single и double и еще точнее(если можно). Если результаты плывут - обычно матрица плохо обусловлена и это чистая математика : точного решения просто нет. Точнее в нем нет смысла, если конечно сами данные точные. Если они действительно целые, например, то решение можно найти. Либо вычисления с повышенной точностью, либо переходите на арифметику рациональных чисел. Я правда не знаю, есть ли это на яве и как долго вы будете это считать на яве. ntldr loat.libtomcrypt.com News June 21st, 2004. Release of LTF 0.02 2004 год, релиз 0.02 - не верю, что фрибаг |
|
Создано: 18 февраля 2010 21:26 · Личное сообщение · #6 |
|
Создано: 19 февраля 2010 00:42 · Личное сообщение · #7 Вот сейчас попробовал округлять матрицу А до десятых, сотых, тысячных и т.д. Эту исходнуюб матрицу хоть умножай на 1.000000001, хоть прибавляй ко всему копейку - результаты сильно будут зависеть от этой копейки. Корни (столбец х) скачут как лоси! Так нет же, не помогает ничего из простого. Кстати в яве удивительно - нет банального округления до нужной точности. Есть либо вызовы-перевызовы классов хитрозадых, либо свою функцию пиши. Не говоря уже про говёный ввод с консоли в этой яве. ----- Я медленно снимаю с неё UPX... *FF_User* |
|
Создано: 22 февраля 2010 11:00 · Личное сообщение · #8 |
eXeL@B —› Программирование —› Математика, матрицы, double, погрешность. |