Reanimator++
Jul 15 2010, 19:06
Собственно, имеются результаты измерений, нужно провести аппроксимацию их нехитрой кривой и рассчитать несколько значений этой кривой.
Попробовал сделать это в Matlab - понравилось. Загнал данные, посчитал.
А есть ли вариант вставить это в свою программу не завязываясь на матлаб?
У него конечно исходники тулбокса открыты, но там столько наворочено..
либо где найти библиотеки, реализующие аппроксимацию?..
и вообще какие есть варианты?
Посмотрите библиотеку
Gsl. Возможно она вам подойдёт.
samurad
Jul 16 2010, 00:49
Numerical Recipes - исходная библиотека отлаженного и хорошо документированного кода на C++, C и Fortran, must-have для инженеров и ученых, часто использующих численные методы, плюс книга (
free - изд. 1992, С), подробно описывающая алгоритм каждой функции, возможные "подводные камни" и пути улучшения. Включает методы интерполяции данных прямой и различными кривыми с коэффициентом качества аппрохимации.
Fktrctq
Jul 16 2010, 04:25
Доброго времени суток!
Я думаю, что кроме вопроса "откуда?", должен быть и вопрос "что?", т.е. что за метод аппроксимации нужен, ибо для выбора наиболее подходящего для Вас метода, было бы неплохо знать изначальный вид зависимости, например если её можно рассматривать как линейную, это одно дело (тут вполне хватит метода наименьших квадратов в его простейшем варианте) или кусочно линейной интерполяции если необходимо сохранить значение функции в исходных точках. Если исходная функция представляет собой полином высших порядков, ну или может быть им представлена, тогда можно использовать методы интерполяции Лагранжа (например тупо закопипастить
отсюда), Ньютона, ну или выпендрится и использовать сплайн.
Цитата(Reanimator++ @ Jul 15 2010, 23:06)

Собственно, имеются результаты измерений, нужно провести аппроксимацию их нехитрой кривой и рассчитать несколько значений этой кривой.
Origin, если Вы не путаете аппроксимацию с интерполяцией, что многие делают. А алгоритмов много разных для разных случаев. Нелинейное программирование, называется...
Reanimator++
Jul 16 2010, 07:07
Большое спасибо ответившим!
Библиотеку GSL посмотрел, там есть нужный метод. Разобраться вполне реально, так что вариант решения номер один уже есть! МKS спасибо!
Numerical Recipies пока не разобрался, плюс там надо проплачивать, хотя и немного.
Аппроксимацию с интерполяцией не путаю, в моем случае это скорее экстраполяция.
Модель несложная, но нелинейная, ( a*log(b*x+1) + c*x +d ) и тут нужен Nonlinear Curve Fitting. С прямой бы я разобрался самостоятельно )
Цитата(Reanimator++ @ Jul 16 2010, 11:07)

Модель несложная, но нелинейная, ( a*log(b*x+1) + c*x +d ) и тут нужен Nonlinear Curve Fitting. С прямой бы я разобрался самостоятельно )
Посоветую разделить на два этапа. Подгоняете b нелинейным алгоритмом. А на каждом шаге решаете линейную задачу подгонки для a, c и d. Получится очень быстро.
Vjacheslav
Jul 16 2010, 08:05
Да нет он не путает - ему нужна именно апроксимация измеренных данных аналитической функцией.
Возьмите любой учебник по обработке измерений и смотрите главу "метод наименьших квадратов"
- все алгоритмы апроксимации, так или иначе, базируются на этом методе.
Уже ответили - извините что встрял.
Oldring
Jul 16 2010, 18:14
Цитата(Tanya @ Jul 16 2010, 11:30)

Посоветую разделить на два этапа. Подгоняете b нелинейным алгоритмом. А на каждом шаге решаете линейную задачу подгонки для a, c и d. Получится очень быстро.
Угу.
При квадратичной норме ошибки "линейная задача подгонки" решается алгебраически. Также алгебраически можно записать первую и вторую полные производные нормы ошибки по b. После чего всё сводится к одномерной задаче нелинейной оптимизации, решаемой методом Ньютона.
Цитата(Oldring @ Jul 16 2010, 22:14)

Угу.
При квадратичной норме ошибки "линейная задача подгонки" решается алгебраически. Также алгебраически можно записать первую и вторую полные производные нормы ошибки по b. После чего всё сводится к одномерной задаче нелинейной оптимизации, решаемой методом Ньютона.
Более того, выражение для частной производной по нелинейному параметру простое для вычислений, поэтому градиентные методы...
Oldring
Jul 16 2010, 19:11
Цитата(Tanya @ Jul 16 2010, 22:25)

Более того, выражение для частной производной по нелинейному параметру простое для вычислений, поэтому градиентные методы...
Алгебраические формулы в пределах обозримого, и вычислять полные производные ошибки по нелинейному параметру в минимуме по линейным параметрам можно быстро. Так что одномерный Ньютон быстрее и проще. От сложности производной по нелинейному параметру там почти ничего не зависит.
Reanimator++
Jul 16 2010, 22:33
Серьезный подход к теме )
В принципе мне время вычислений если не сказать что совсем неважно, то на десятом месте точно ) Измерения месяцами идут а это модель старения.
Важнее время за которое это можно запрограммить, потому и спрашиваю отлаженные библиотеки..
Полагаю, что на такой функции все методы должны надежно сходиться, так что остается только правильно использовать библиотеку..
Oldring
Jul 17 2010, 07:05
Цитата(Reanimator++ @ Jul 17 2010, 02:33)

В принципе мне время вычислений если не сказать что совсем неважно, то на десятом месте точно ) Измерения месяцами идут а это модель старения.
Важнее время за которое это можно запрограммить, потому и спрашиваю отлаженные библиотеки..
А, ну тогда не интересно
s.i.suprun
Sep 14 2010, 06:44
Цитата(Vjacheslav @ Jul 16 2010, 11:05)

Да нет он не путает - ему нужна именно апроксимация измеренных данных аналитической функцией.
Возьмите любой учебник по обработке измерений и смотрите главу "метод наименьших квадратов"
- все алгоритмы апроксимации, так или иначе, базируются на этом методе.
Уже ответили - извините что встрял.
Согласен, очень удобный алгоритм и дает хорошие результаты, сам неоднократно его использовал при расчетах,в некоторых случаях даже лучшие чем скажем, метод сплайнов и т.д (по крайней мере в маткаде так точно)
Цитата(Reanimator++ @ Jul 16 2010, 02:06)

либо где найти библиотеки, реализующие аппроксимацию?..
и вообще какие есть варианты?
ну не совсем то что надо автору, но как-то делал такое используя gnuplot, из программы формировал скрипт, звал gnuplot, из лог файла gnuplota забирал коэффициенты.
еще можно использовать mathgl как библиотеку
http://mathgl.sourceforge.net/mathgl/mathg...#Fitting-sampleоднако он использует упомянутый выше gsl
Для просмотра полной версии этой страницы, пожалуйста,
пройдите по ссылке.