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

 
 
 
Reply to this topicStart new topic
> Как проще всего сделать аппроксимацию данных?, Matlab такое может но как использовать в своей программе на С#?
Reanimator++
сообщение Jul 15 2010, 19:06
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 399
Регистрация: 1-01-06
Из: Волгоград
Пользователь №: 12 763



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

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

А есть ли вариант вставить это в свою программу не завязываясь на матлаб?
У него конечно исходники тулбокса открыты, но там столько наворочено..

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

и вообще какие есть варианты?
Go to the top of the page
 
+Quote Post
MKS
сообщение Jul 15 2010, 19:36
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 469
Регистрация: 13-03-05
Пользователь №: 3 315



Посмотрите библиотеку Gsl. Возможно она вам подойдёт.
Go to the top of the page
 
+Quote Post
samurad
сообщение Jul 16 2010, 00:49
Сообщение #3


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

Группа: Свой
Сообщений: 121
Регистрация: 9-05-08
Из: Япония
Пользователь №: 37 385



Numerical Recipes - исходная библиотека отлаженного и хорошо документированного кода на C++, C и Fortran, must-have для инженеров и ученых, часто использующих численные методы, плюс книга (free - изд. 1992, С), подробно описывающая алгоритм каждой функции, возможные "подводные камни" и пути улучшения. Включает методы интерполяции данных прямой и различными кривыми с коэффициентом качества аппрохимации.
Go to the top of the page
 
+Quote Post
Fktrctq
сообщение Jul 16 2010, 04:25
Сообщение #4


Участник
*

Группа: Участник
Сообщений: 38
Регистрация: 10-11-05
Из: Таганрог
Пользователь №: 10 659



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


--------------------
Вы пробовали выключить и снова включить?
Go to the top of the page
 
+Quote Post
Tanya
сообщение Jul 16 2010, 06:25
Сообщение #5


Гуру
******

Группа: Модераторы
Сообщений: 8 752
Регистрация: 6-01-06
Пользователь №: 12 883



Цитата(Reanimator++ @ Jul 15 2010, 23:06) *
Собственно, имеются результаты измерений, нужно провести аппроксимацию их нехитрой кривой и рассчитать несколько значений этой кривой.

Origin, если Вы не путаете аппроксимацию с интерполяцией, что многие делают. А алгоритмов много разных для разных случаев. Нелинейное программирование, называется...
Go to the top of the page
 
+Quote Post
Reanimator++
сообщение Jul 16 2010, 07:07
Сообщение #6


Местный
***

Группа: Свой
Сообщений: 399
Регистрация: 1-01-06
Из: Волгоград
Пользователь №: 12 763



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

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

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


Аппроксимацию с интерполяцией не путаю, в моем случае это скорее экстраполяция.
Модель несложная, но нелинейная, ( a*log(b*x+1) + c*x +d ) и тут нужен Nonlinear Curve Fitting. С прямой бы я разобрался самостоятельно )
Go to the top of the page
 
+Quote Post
Tanya
сообщение Jul 16 2010, 07:30
Сообщение #7


Гуру
******

Группа: Модераторы
Сообщений: 8 752
Регистрация: 6-01-06
Пользователь №: 12 883



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

Посоветую разделить на два этапа. Подгоняете b нелинейным алгоритмом. А на каждом шаге решаете линейную задачу подгонки для a, c и d. Получится очень быстро.
Go to the top of the page
 
+Quote Post
Vjacheslav
сообщение Jul 16 2010, 08:05
Сообщение #8


Знающий
****

Группа: Свой
Сообщений: 621
Регистрация: 25-10-04
Из: Новосибирск
Пользователь №: 971



Да нет он не путает - ему нужна именно апроксимация измеренных данных аналитической функцией.
Возьмите любой учебник по обработке измерений и смотрите главу "метод наименьших квадратов"
- все алгоритмы апроксимации, так или иначе, базируются на этом методе.
Уже ответили - извините что встрял.
Go to the top of the page
 
+Quote Post
Oldring
сообщение Jul 16 2010, 18:14
Сообщение #9


Гуру
******

Группа: Свой
Сообщений: 3 041
Регистрация: 10-01-05
Из: Москва
Пользователь №: 1 874



Цитата(Tanya @ Jul 16 2010, 11:30) *
Посоветую разделить на два этапа. Подгоняете b нелинейным алгоритмом. А на каждом шаге решаете линейную задачу подгонки для a, c и d. Получится очень быстро.



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


--------------------
Пишите в личку.
Go to the top of the page
 
+Quote Post
Tanya
сообщение Jul 16 2010, 18:25
Сообщение #10


Гуру
******

Группа: Модераторы
Сообщений: 8 752
Регистрация: 6-01-06
Пользователь №: 12 883



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

Более того, выражение для частной производной по нелинейному параметру простое для вычислений, поэтому градиентные методы...
Go to the top of the page
 
+Quote Post
Oldring
сообщение Jul 16 2010, 19:11
Сообщение #11


Гуру
******

Группа: Свой
Сообщений: 3 041
Регистрация: 10-01-05
Из: Москва
Пользователь №: 1 874



Цитата(Tanya @ Jul 16 2010, 22:25) *
Более того, выражение для частной производной по нелинейному параметру простое для вычислений, поэтому градиентные методы...


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


--------------------
Пишите в личку.
Go to the top of the page
 
+Quote Post
Reanimator++
сообщение Jul 16 2010, 22:33
Сообщение #12


Местный
***

Группа: Свой
Сообщений: 399
Регистрация: 1-01-06
Из: Волгоград
Пользователь №: 12 763



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

Важнее время за которое это можно запрограммить, потому и спрашиваю отлаженные библиотеки..
Полагаю, что на такой функции все методы должны надежно сходиться, так что остается только правильно использовать библиотеку..
Go to the top of the page
 
+Quote Post
Oldring
сообщение Jul 17 2010, 07:05
Сообщение #13


Гуру
******

Группа: Свой
Сообщений: 3 041
Регистрация: 10-01-05
Из: Москва
Пользователь №: 1 874



Цитата(Reanimator++ @ Jul 17 2010, 02:33) *
В принципе мне время вычислений если не сказать что совсем неважно, то на десятом месте точно ) Измерения месяцами идут а это модель старения.
Важнее время за которое это можно запрограммить, потому и спрашиваю отлаженные библиотеки..


А, ну тогда не интересно smile.gif


--------------------
Пишите в личку.
Go to the top of the page
 
+Quote Post
s.i.suprun
сообщение Sep 14 2010, 06:44
Сообщение #14


Участник
*

Группа: Validating
Сообщений: 71
Регистрация: 24-06-08
Из: Харьков
Пользователь №: 38 521



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


Согласен, очень удобный алгоритм и дает хорошие результаты, сам неоднократно его использовал при расчетах,в некоторых случаях даже лучшие чем скажем, метод сплайнов и т.д (по крайней мере в маткаде так точно)
Go to the top of the page
 
+Quote Post
_pv
сообщение Sep 14 2010, 07:48
Сообщение #15


Гуру
******

Группа: Свой
Сообщений: 2 563
Регистрация: 8-04-05
Из: Nsk
Пользователь №: 3 954



Цитата(Reanimator++ @ Jul 16 2010, 02:06) *
либо где найти библиотеки, реализующие аппроксимацию?..
и вообще какие есть варианты?

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

еще можно использовать mathgl как библиотеку
http://mathgl.sourceforge.net/mathgl/mathg...#Fitting-sample
однако он использует упомянутый выше gsl
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 27th July 2025 - 19:24
Рейтинг@Mail.ru


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