Jump to content

    
Sign in to follow this  
Reanimatorr

Как проще всего сделать аппроксимацию данных?

Recommended Posts

Собственно, имеются результаты измерений, нужно провести аппроксимацию их нехитрой кривой и рассчитать несколько значений этой кривой.

 

Попробовал сделать это в Matlab - понравилось. Загнал данные, посчитал.

 

А есть ли вариант вставить это в свою программу не завязываясь на матлаб?

У него конечно исходники тулбокса открыты, но там столько наворочено..

 

либо где найти библиотеки, реализующие аппроксимацию?..

 

и вообще какие есть варианты?

Share this post


Link to post
Share on other sites
Numerical Recipes - исходная библиотека отлаженного и хорошо документированного кода на C++, C и Fortran, must-have для инженеров и ученых, часто использующих численные методы, плюс книга (free - изд. 1992, С), подробно описывающая алгоритм каждой функции, возможные "подводные камни" и пути улучшения. Включает методы интерполяции данных прямой и различными кривыми с коэффициентом качества аппрохимации.

Share this post


Link to post
Share on other sites

Доброго времени суток!

Я думаю, что кроме вопроса "откуда?", должен быть и вопрос "что?", т.е. что за метод аппроксимации нужен, ибо для выбора наиболее подходящего для Вас метода, было бы неплохо знать изначальный вид зависимости, например если её можно рассматривать как линейную, это одно дело (тут вполне хватит метода наименьших квадратов в его простейшем варианте) или кусочно линейной интерполяции если необходимо сохранить значение функции в исходных точках. Если исходная функция представляет собой полином высших порядков, ну или может быть им представлена, тогда можно использовать методы интерполяции Лагранжа (например тупо закопипастить отсюда), Ньютона, ну или выпендрится и использовать сплайн.

Share this post


Link to post
Share on other sites
Собственно, имеются результаты измерений, нужно провести аппроксимацию их нехитрой кривой и рассчитать несколько значений этой кривой.

Origin, если Вы не путаете аппроксимацию с интерполяцией, что многие делают. А алгоритмов много разных для разных случаев. Нелинейное программирование, называется...

Share this post


Link to post
Share on other sites

Большое спасибо ответившим!

 

Библиотеку GSL посмотрел, там есть нужный метод. Разобраться вполне реально, так что вариант решения номер один уже есть! МKS спасибо!

 

Numerical Recipies пока не разобрался, плюс там надо проплачивать, хотя и немного.

 

 

Аппроксимацию с интерполяцией не путаю, в моем случае это скорее экстраполяция.

Модель несложная, но нелинейная, ( a*log(b*x+1) + c*x +d ) и тут нужен Nonlinear Curve Fitting. С прямой бы я разобрался самостоятельно )

 

Share this post


Link to post
Share on other sites
Модель несложная, но нелинейная, ( a*log(b*x+1) + c*x +d ) и тут нужен Nonlinear Curve Fitting. С прямой бы я разобрался самостоятельно )

Посоветую разделить на два этапа. Подгоняете b нелинейным алгоритмом. А на каждом шаге решаете линейную задачу подгонки для a, c и d. Получится очень быстро.

Share this post


Link to post
Share on other sites

Да нет он не путает - ему нужна именно апроксимация измеренных данных аналитической функцией.

Возьмите любой учебник по обработке измерений и смотрите главу "метод наименьших квадратов"

- все алгоритмы апроксимации, так или иначе, базируются на этом методе.

Уже ответили - извините что встрял.

Share this post


Link to post
Share on other sites
Посоветую разделить на два этапа. Подгоняете b нелинейным алгоритмом. А на каждом шаге решаете линейную задачу подгонки для a, c и d. Получится очень быстро.

 

 

Угу.

При квадратичной норме ошибки "линейная задача подгонки" решается алгебраически. Также алгебраически можно записать первую и вторую полные производные нормы ошибки по b. После чего всё сводится к одномерной задаче нелинейной оптимизации, решаемой методом Ньютона.

Share this post


Link to post
Share on other sites
Угу.

При квадратичной норме ошибки "линейная задача подгонки" решается алгебраически. Также алгебраически можно записать первую и вторую полные производные нормы ошибки по b. После чего всё сводится к одномерной задаче нелинейной оптимизации, решаемой методом Ньютона.

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

Share this post


Link to post
Share on other sites
Более того, выражение для частной производной по нелинейному параметру простое для вычислений, поэтому градиентные методы...

 

Алгебраические формулы в пределах обозримого, и вычислять полные производные ошибки по нелинейному параметру в минимуме по линейным параметрам можно быстро. Так что одномерный Ньютон быстрее и проще. От сложности производной по нелинейному параметру там почти ничего не зависит.

Share this post


Link to post
Share on other sites

Серьезный подход к теме )

В принципе мне время вычислений если не сказать что совсем неважно, то на десятом месте точно ) Измерения месяцами идут а это модель старения.

 

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

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

Share this post


Link to post
Share on other sites
В принципе мне время вычислений если не сказать что совсем неважно, то на десятом месте точно ) Измерения месяцами идут а это модель старения.

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

 

А, ну тогда не интересно :)

Share this post


Link to post
Share on other sites
Да нет он не путает - ему нужна именно апроксимация измеренных данных аналитической функцией.

Возьмите любой учебник по обработке измерений и смотрите главу "метод наименьших квадратов"

- все алгоритмы апроксимации, так или иначе, базируются на этом методе.

Уже ответили - извините что встрял.

 

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

Share this post


Link to post
Share on other sites
либо где найти библиотеки, реализующие аппроксимацию?..

и вообще какие есть варианты?

ну не совсем то что надо автору, но как-то делал такое используя gnuplot, из программы формировал скрипт, звал gnuplot, из лог файла gnuplota забирал коэффициенты.

 

еще можно использовать mathgl как библиотеку

http://mathgl.sourceforge.net/mathgl/mathg...#Fitting-sample

однако он использует упомянутый выше gsl

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this