Перейти к содержанию
    

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

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

 

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

 

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

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

 

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

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

 

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

 

 

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

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

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

 

Угу.

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Угу.

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

 

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

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

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

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

 

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

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

×
×
  • Создать...