реклама на сайте
подробности

 
 
> Арифметика высокой точности в ALGLIB, как ее использовать?
MSP430F
сообщение Dec 10 2013, 09:06
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 85
Регистрация: 20-05-13
Пользователь №: 76 911



Всем доброго времени суток. Надеюсь, что мой вопрос не останется без ответа.
Использую функцию rmatrixsolvels из пакета alglib. Подключил просто - закинул в папку с проектом все хедеры и сишники alglib. Из 13 файлов пришлось подключить 6 для вызова лишь одной функции. exe подрос заметно в размерах, время компиляции увеличилось заметно, ну да ладно, главное цель достигнута. Решается система линейных уравнений с прямоугольной матрицей - число уравнений превышает число неизвестных. Минимизируется невязка. Но чувствую, не хватает точности. В alglib есть возможность работы с арифметикой высокой точности http://alglib.sources.ru/equations/linear.php Но как ее подключить ? Что-то я не соображу... Так все запутано в этом alglib. Использую компилятор MinGW-W64. Буду признателен за любые подсказки. sm.gif
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
thermit
сообщение Dec 10 2013, 15:31
Сообщение #2


Знающий
****

Группа: Участник
Сообщений: 781
Регистрация: 3-08-09
Пользователь №: 51 730



1. Плохо обусловленная задача. Число обусловленности матрицы ~10^8. При погрешности входных данных 10^-16 ошибка в результате <=~10^-8
2. Боюсь, алглиб вас не спасет. Вам нужно свести исходную матрицу к треугольной при помощи последовательности отражений (преобразование хаусхолдера) или плоских вращений (преобразование гивенса) и найти решение обратной подстановкой. На вашем примере гивенс дает максимальную погрешность 1.5*10^-9.

ps
Ну или ковыряться с расширенной точностью, если ошибка 10^-8 вас не устраивает.
Go to the top of the page
 
+Quote Post
Xenia
сообщение Dec 10 2013, 16:27
Сообщение #3


Гуру
******

Группа: Модератор FTP
Сообщений: 4 479
Регистрация: 20-02-08
Из: Москва
Пользователь №: 35 237



Цитата(thermit @ Dec 10 2013, 19:31) *
Боюсь, алглиб вас не спасет. Вам нужно свести исходную матрицу к треугольной при помощи последовательности отражений (преобразование хаусхолдера) или плоских вращений (преобразование гивенса) и найти решение обратной подстановкой. На вашем примере гивенс дает максимальную погрешность 1.5*10^-9.


Alglib действительно не спасет, там алгоритм для этого дела гадкий sm.gif. За Хаусхолдера же бояться нечего, это ортогональное преобразование, и ошибок оно практически не вносит (лишь на уровне точности арифметики). А вот на стадии обратной подстановки при плохо обусловленной матрице неминуемо возникнут проблемы, т.к. обусловленность полученной треугольной матрицы останется такой же малой, как у исходной.

Боюсь, что в данном случае надо считать через сингулярное разложение исходной матрицы, а то и понижая при этом размерность. Т.е. получать псевдорешение.

Впрочем, я бы рекомендовала сначала не заморачиваться всем этим, а применить процедуру rmatrixsolvels, как она есть, к прямоугольной матрице, на которой, по моим ощущениям, ошибка должна ученьшиться по сравнению с квадратной.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- MSP430F   Арифметика высокой точности в ALGLIB, как ее использовать?   Dec 10 2013, 09:06
- - thermit   ЦитатаMSP430F: Но чувствую, не хватает точности. ...   Dec 10 2013, 10:26
|- - MSP430F   Цитата(thermit @ Dec 10 2013, 14:26) Каки...   Dec 10 2013, 12:32
|- - Xenia   Цитата(MSP430F @ Dec 10 2013, 16:32) Я пр...   Dec 10 2013, 12:47
|- - MSP430F   Цитата(Xenia @ Dec 10 2013, 16:47) Если у...   Dec 10 2013, 14:33
- - TSerg   Проверьте с использованием мат.пакетов Матлаб, Мат...   Dec 10 2013, 11:49
- - thermit   ЦитатаMSP430F: Я проверил максимальную ошибку в вы...   Dec 10 2013, 13:47
|- - MSP430F   Цитата(thermit @ Dec 10 2013, 19:31) Вам ...   Dec 10 2013, 16:44
- - thermit   ЦитатаMSP430F: И где же взять код этих адгоритмов ...   Dec 10 2013, 19:03
|- - MSP430F   Цитата(thermit @ Dec 10 2013, 23:03) Можн...   Dec 11 2013, 07:51
- - thermit   Честно говоря, лень ковыряться с чужими исходникам...   Dec 11 2013, 11:00
|- - MSP430F   Цитата(thermit @ Dec 11 2013, 15:00) Чест...   Dec 11 2013, 13:01
|- - thermit   Цитата(MSP430F @ Dec 11 2013, 16:01) Это ...   Dec 11 2013, 14:20
|- - TSerg   Цитата(thermit @ Dec 11 2013, 18:20) стар...   Dec 11 2013, 19:42
|- - MSP430F   Цитата(thermit @ Dec 11 2013, 18:20) Я ...   Dec 12 2013, 09:01
- - _pv   Кодvoid GaussSolve(double * A, double * Y, int...   Dec 11 2013, 11:48
- - thermit   Цитата_pv: обычный Гаусс на этих данных даёт ошибк...   Dec 11 2013, 12:07
- - _pv   5*10^-10 если то же самое в чём радость по сравнен...   Dec 11 2013, 13:29
- - thermit   Ошибки здесь нет. Исходная матрица лежит в памяти ...   Dec 12 2013, 09:18
|- - MSP430F   Цитата(thermit @ Dec 12 2013, 13:18) Ошиб...   Dec 12 2013, 10:18
- - _pv   тогда простой Гаусс даст ошибку в 10^-12. а для пр...   Dec 12 2013, 10:28
- - thermit   ЦитатаMSP430F: Зачем же здесь тогда транспонирова...   Dec 12 2013, 10:56
|- - MSP430F   Цитата(thermit @ Dec 12 2013, 14:56) Для ...   Dec 12 2013, 12:03
- - thermit   ЦитатаMSP430F: Нет, Вы не правы. В моих данных все...   Dec 12 2013, 12:15
|- - MSP430F   Цитата(thermit @ Dec 12 2013, 16:15) Это ...   Dec 12 2013, 14:42
- - thermit   ЦитатаMSP430F: Правда, пришлось немного попотеть, ...   Dec 12 2013, 14:49
- - Xenia   Цитата(thermit @ Dec 12 2013, 18:49) Заче...   Dec 12 2013, 15:08


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 16th June 2025 - 21:41
Рейтинг@Mail.ru


Страница сгенерированна за 0.01411 секунд с 7
ELECTRONIX ©2004-2016