Сейчас на форуме: tyns777, zds, JustLife (+4 невидимых)

 eXeL@B —› Программирование —› Математика, матрицы, double, погрешность.
Посл.ответ Сообщение

Ранг: 203.3 (наставник)
Активность: 0.220
Статус: Участник
UPX Killer -d

Создано: 17 февраля 2010 20:33 · Поправил: AlexZ
· Личное сообщение · #1

Случайно нажал не ту кнопку ("выберите форум", млять) и потерял сообщение, поэтому обозначусь снова вкратце.

Пишу на пятой яве, решаю задачи с привлечением СЛАУ. Юзаю два разных модуля для LU разложения и для решения обратной матрицей. Модули с интернетов.

Решаю систему типа Ax=b, где b состоит из нулей и чисел 1..100 приблизительно. Матрица А состоит из чисел типа 14.732568125107

Периодически есть разные результаты решения одного примера двумя методами, зависит от исходных данных.

Также имею недопустимый разброд в решениях при исходных данных, скажем 14.732568125107 и 14.732568. Предположительно ошибка зависит от размерности матрицы.

Есть некие эталонные примеры, к которым надо приближать точности решения. Но некие колебания исходных данных в 0.0000001 или т.п. уводят решения в серьезную ошибку с точки зрения физической и инженерной - получаются неправдоподобные результаты.

Как отслеживать когда алго начинает врать? И есть ли вообще совет/решение/панацея для правильных результатов?

-----
Я медленно снимаю с неё UPX... *FF_User*




Ранг: 38.7 (посетитель)
Активность: 0.020
Статус: Участник

Создано: 17 февраля 2010 21:43
· Личное сообщение · #2

В точных методах (gaussian elimination, LU-decomposition, etc) избавиться от погрешности (rounding errors) полностью не получится. Существую модификации Гаусса для снижения погрешности (с выбором ведущего элемента), но в целом они не могут гарантировать точности решения. Ответ - использовать итерационные методы.



Ранг: 203.3 (наставник)
Активность: 0.220
Статус: Участник
UPX Killer -d

Создано: 17 февраля 2010 21:57
· Личное сообщение · #3

А проверенной библиотечки для Явки или Сишарпа не будет? *кодерский гоп*

-----
Я медленно снимаю с неё UPX... *FF_User*




Ранг: 369.8 (мудрец), 400thx
Активность: 0.390
Статус: Участник

Создано: 17 февраля 2010 22:15
· Личное сообщение · #4

float.libtomcrypt.com/

-----
PGP key <0x1B6A24550F33E44A>




Ранг: 310.8 (мудрец), 29thx
Активность: 0.430
Статус: Участник

Создано: 18 февраля 2010 14:20
· Личное сообщение · #5

Как отслеживать когда алго начинает врать? И есть ли вообще совет/решение/панацея для правильных результатов?
В заголовке же ответ : double. Посчитать single и double и еще точнее(если можно). Если результаты плывут - обычно матрица плохо обусловлена и это чистая математика : точного решения просто нет.
Точнее в нем нет смысла, если конечно сами данные точные. Если они действительно целые, например, то решение можно найти. Либо вычисления с повышенной точностью, либо переходите на арифметику рациональных чисел. Я правда не знаю, есть ли это на яве и как долго вы будете это считать на яве.

ntldr loat.libtomcrypt.com
News
June 21st, 2004. Release of LTF 0.02


2004 год, релиз 0.02 - не верю, что фрибаг




Ранг: 170.1 (ветеран), 96thx
Активность: 0.090.01
Статус: Участник

Создано: 18 февраля 2010 21:26
· Личное сообщение · #6

SniperOK пишет:
Ответ - использовать итерационные методы

+1. В свое время использовал SVD (можно найти у Моулера и еще во многих местах). Предварительно почитать Лоусона/Хенсона и Икрамова.
h**p://mathc.chat.ru/books/amos0001.htm



Ранг: 203.3 (наставник)
Активность: 0.220
Статус: Участник
UPX Killer -d

Создано: 19 февраля 2010 00:42
· Личное сообщение · #7

Вот сейчас попробовал округлять матрицу А до десятых, сотых, тысячных и т.д.
Эту исходнуюб матрицу хоть умножай на 1.000000001, хоть прибавляй ко всему копейку - результаты сильно будут зависеть от этой копейки. Корни (столбец х) скачут как лоси!
Так нет же, не помогает ничего из простого.

Кстати в яве удивительно - нет банального округления до нужной точности. Есть либо вызовы-перевызовы классов хитрозадых, либо свою функцию пиши. Не говоря уже про говёный ввод с консоли в этой яве.

-----
Я медленно снимаю с неё UPX... *FF_User*




Ранг: 310.8 (мудрец), 29thx
Активность: 0.430
Статус: Участник

Создано: 22 февраля 2010 11:00
· Личное сообщение · #8

AlexZ пишет:
Корни (столбец х) скачут как лоси!

Ну так значит матрица плохо обусловлена и надо искать другой метод решения.
Если матрица получена из внешних данных, то надо вообще методику решения менять.


 eXeL@B —› Программирование —› Математика, матрицы, double, погрешность.
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати