2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




На страницу Пред.  1, 2, 3, 4
 
 Re: Аппроксимация экспериментальных данных
Сообщение26.01.2013, 19:01 
Аватара пользователя
Ну, возьмите любую формулу численного дифференцирования. Нагрузите значения функции случайным шумом, посчитайте дисперсию. По мере устремления h к нулю она будет стремиться к бесконечности. Если говорить от относительных ошибках - ещё веселее. Поскольку функции нас интересуют сравнительно гладкие, то значения производных малы, то есть относительные ошибки очень велики. Если брать h не малым - то у нас получается что-то далёкое от производных даже в отсутствие ошибок.
Иногда локально приближают, например, полиномом (степень которого выбирается существенно меньше числа приближаемых точек), используя тот же МНК, а затем уж его дифференцируют. Но оценка производной и тут получается достаточно приблизительной.

 
 
 
 Re: Аппроксимация экспериментальных данных
Сообщение28.01.2013, 12:48 
mserg в сообщении #676378 писал(а):
Классика жанра получения гладкой аппроксимации – это добавление дополнительных слагаемых в критерий. Выбирается некоторое количество точек (необязательно совпадающие с точками данных), и в них делается аппроксимация первой и/или второй производной с помощью аппроксимируемой функции. Квадраты первой и/или второй производной добавляются с некоторыми весами к критерию. Таким образом, достигается некоторый компромисс между точностью аппроксимации и ее гладкостью.

Общая идея называется «регуляризация».
Спасибо, идея понятна, очень интересно! Насколько я понимаю, жонглирование этими весами будет определять степень компромисса. Кстати, если количество точек у нас фиксировано, то количество узлов для задания производных в функцию ошибки мы можем выбрать любое - хоть в 100 раз больше исходных точек, и таким образом приблизить оцененную производную достаточно хорошо.

Евгений Машеров в сообщении #676503 писал(а):
Иногда локально приближают, например, полиномом (степень которого выбирается существенно меньше числа приближаемых точек), используя тот же МНК, а затем уж его дифференцируют. Но оценка производной и тут получается достаточно приблизительной.
Тоже неплохой вариант, идея лежит на поверхности.

 
 
 
 Re: Аппроксимация экспериментальных данных
Сообщение08.04.2013, 12:44 
привет если еще надо:
http://www.picshare.ru/view/1692280/
краткое описание: код на Wolfram Matematica.
data - это твоя функция линейными преобразованиями приведенная в область {{0,1},{0,1}};
model - модель аппроксимирующей функции с коэффициентами a0-a4

 
 
 
 Re: Аппроксимация экспериментальных данных
Сообщение16.05.2013, 06:54 
simplebomber в сообщении #707276 писал(а):
привет если еще надо:
http://www.picshare.ru/view/1692280/
краткое описание: код на Wolfram Matematica.
data - это твоя функция линейными преобразованиями приведенная в область {{0,1},{0,1}};
model - модель аппроксимирующей функции с коэффициентами a0-a4

Спасибо, функция универсальна для всех наших примеров данных, отличная точность :-)
Только теперь надо самим найти исходные коэффициенты, чтобы применить МНМ. Хотелось бы запрограммировать. :roll:

 
 
 
 Re: Аппроксимация экспериментальных данных
Сообщение16.05.2013, 11:45 
1. $$y = y_{min} +\frac {(y_{max} - y_{min})*y_{max}}{ax^2 + (bx^2 + cx + d) x +  y_{min}}}.$$
Преобразовав эту функцию к виду $$bx^3+ax^2+dx=\frac{(y_{max}-y_{min})y_{max}}{y-y_{min}}-y_{min}$$ легко применяются что МНК, что МНМ. С этой нашей хитрой функцией все вроде понятно, ее СОА = $1,317484462$ (средняя ошибка аппроксимации) при $b=0,0205$, $a=-0,7135$, $c=54,92492$
2. Функция вида $$y=e^{\frac 1 {ax^3+bx^2+cx+d}},$$ линеаризуема и работать с ней легко, СОА = $2,996392834$ при $a=0,0000001033138$, $b=-0,0000191759894$, $c=0,0013078453483$, $d=0,164599678$. Наибольшая погрешность. По сути это полином 3-й степени, и в некоторых случаях он хорошо подходит из-за двух перегибов.
3. $$f(x)=a+b(x+c)^d$$
Функция такого типа почему-то даже не рассматривалась... :-(
4. $$y(x)=a \exp (bx^c) + d \eqno (1)$$
Возможно лучшее что нам подходит. В начале пытались найти все четыре коэффициента, дело в том что, мы пытаемся запрограммировать аппроксимацию, поэтому первым делом выполняем вручную. Потом решили положить ее в точку $(0;435)$, с одной стороны это нам нравиться, а с другой упрощает задачу поиска коэффициентов, их уже получается два :-) СОА =$1,812498852$ при $a=299$, $b=-0,137789822$, $c=0,706075481$, $d=136$. И такие значения получились из системы уравнения полученной по принципу наименьшего кол-ва данных (возможно ошибаюсь в названии) $$\begin{cases}
1.73=-b36^c\\
2.4=-b60^c\\
\end{cases}.$$
Получили мы ее, подставив в исходную формулу $(1)$ две пары данных $(36;189)$ и $(60;161)$. Думаю если еще взять пару итераций по Методу наименьших модулей, то полученные поправки сведут СОА к 1% (теоретизирую)!
5. Функция вида $$y=ae^{{bx^{1+cx+dx^2+fx^3}}}.$$
Вроде такой вид, можете посмотреть выше, это последняя из предложенных. Хорошая функция, погрешность как и у остальных в принципе, поэтому останавливаемся на 4! Вот как-то так...

Хотелось бы почитать ваши замечания, комментарии и конструктивную критику :roll: Спасибо всем кто помогал 8-)

P.S. В исходном ряде нету числа 140, опечатался!

 
 
 
 Re: Аппроксимация экспериментальных данных
Сообщение16.05.2013, 13:07 
Аватара пользователя
Александрович в сообщении #675982 писал(а):
Вот чуть лучшее приближение:
$y(x)=370.1\exp(x^{0.0635}-x^{0.237})+64.0$
Средняя относительная ошибка - 0.9%, максимальное относительное отклонение - 2.7%.

 
 
 
 Re: Аппроксимация экспериментальных данных
Сообщение17.05.2013, 08:19 
Александрович в сообщении #724571 писал(а):
Александрович в сообщении #675982 писал(а):
Вот чуть лучшее приближение:
$y(x)=370.1\exp(x^{0.0635}-x^{0.237})+64.0$
Средняя относительная ошибка - 0.9%, максимальное относительное отклонение - 2.7%.

Да, это формула немного лучше чем формула 4. Но мы с ней пока не разобрались, а вопрос довольно простой, но у нас вызвал ступор...Нужно найти первоначальное приближение коэффициентов $b$ и $c$. $a=299$, $d=136$ - получается система $$\begin{cases}
36^b-36^c=\ln\frac{y_{13}-d}{a}\\
60^b-60^c=\ln\frac{y_{21}-d}{a}\\
\end{cases}, $$ решить её не получается. Если кто-нибудь читая это сообщение знает как решить, подскажите пожалуйста :-) Любое решение содержащее графическую часть не подходит, по возможности аналитически бы :roll:

 
 
 
 Re: Аппроксимация экспериментальных данных
Сообщение17.05.2013, 09:51 
Аватара пользователя
vitalmago в сообщении #724541 писал(а):
4. $$y(x)=a \exp (bx^c) + d \eqno (1)$$
Возможно лучшее что нам подходит. В начале пытались найти все четыре коэффициента, дело в том что, мы пытаемся запрограммировать аппроксимацию, поэтому первым делом выполняем вручную. Потом решили положить ее в точку $(0;435)$, с одной стороны это нам нравиться, а с другой упрощает задачу поиска коэффициентов, их уже получается два :-) СОА =$1,812498852$ при $a=299$, $b=-0,137789822$, $c=0,706075481$, $d=136$. И такие значения получились из системы уравнения полученной по принципу наименьшего кол-ва данных (возможно ошибаюсь в названии) $$\begin{cases}
1.73=-b36^c\\
2.4=-b60^c\\
\end{cases}.$$
Получили мы ее, подставив в исходную формулу $(1)$ две пары данных $(36;189)$ и $(60;161)$. Думаю если еще взять пару итераций по Методу наименьших модулей, то полученные поправки сведут СОА к 1% (теоретизирую)!

Вы же вроде бы решили.

 
 
 
 Re: Аппроксимация экспериментальных данных
Сообщение17.05.2013, 10:07 
Аватара пользователя
Аналитически вряд ли, численно - скажем, методом Ньютона-Рафсона. Простенькая схема есть, к примеру, в древнем Мак-Кракен и Дорн, Численные методы и программирование на Фортране, с. 187.
Ну, или любой пакет, МАТЛАБ, скажем, умеет.

 
 
 
 Re: Аппроксимация экспериментальных данных
Сообщение17.05.2013, 10:49 
Александрович в сообщении #724967 писал(а):
vitalmago в сообщении #724541 писал(а):
4. $$y(x)=a \exp (bx^c) + d \eqno (1)$$
Возможно лучшее что нам подходит. В начале пытались найти все четыре коэффициента, дело в том что, мы пытаемся запрограммировать аппроксимацию, поэтому первым делом выполняем вручную. Потом решили положить ее в точку $(0;435)$, с одной стороны это нам нравиться, а с другой упрощает задачу поиска коэффициентов, их уже получается два :-) СОА =$1,812498852$ при $a=299$, $b=-0,137789822$, $c=0,706075481$, $d=136$. И такие значения получились из системы уравнения полученной по принципу наименьшего кол-ва данных (возможно ошибаюсь в названии) $$\begin{cases}
1.73=-b36^c\\
2.4=-b60^c\\
\end{cases}.$$
Получили мы ее, подставив в исходную формулу $(1)$ две пары данных $(36;189)$ и $(60;161)$. Думаю если еще взять пару итераций по Методу наименьших модулей, то полученные поправки сведут СОА к 1% (теоретизирую)!

Вы же вроде бы решили.

Это две разные системы...с произведением было легко,а вот с разницей показательных функций как-то посложнее :-(
Евгений Машеров в сообщении #724974 писал(а):
Аналитически вряд ли, численно - скажем, методом Ньютона-Рафсона. Простенькая схема есть, к примеру, в древнем Мак-Кракен и Дорн, Численные методы и программирование на Фортране, с. 187.
Ну, или любой пакет, МАТЛАБ, скажем, умеет.

Ньютон-Рафсон заинтересовал, попробуем...

 
 
 
 Re: Аппроксимация экспериментальных данных
Сообщение17.05.2013, 12:23 
Аватара пользователя
vitalmago в сообщении #724988 писал(а):
а вот с разницей показательных функций как-то посложнее :-(

Сначала считайте для одной функции, а на вторую выйдете через анализ регрессионных остатков.

 
 
 
 Re: Аппроксимация экспериментальных данных
Сообщение17.05.2013, 12:52 
Александрович в сообщении #725025 писал(а):
vitalmago в сообщении #724988 писал(а):
а вот с разницей показательных функций как-то посложнее :-(

Сначала считайте для одной функции, а на вторую выйдете через анализ регрессионных остатков.

Да чтож такое, столько нового, можно изучать и изучать :lol: Большое спасибо, посмотрим что это и как работает. Ответы на вопросы, дают лишь повод для других вопросов :wink:

 
 
 
 Re: Аппроксимация экспериментальных данных
Сообщение17.05.2013, 17:16 
Аватара пользователя
 ! 
simplebomber в сообщении #707276 писал(а):
привет если еще надо:
http://www.picshare.ru/view/1692280/
краткое описание: код на Wolfram Matematica.
data - это твоя функция линейными преобразованиями приведенная в область {{0,1},{0,1}};
model - модель аппроксимирующей функции с коэффициентами a0-a4
simplebomber, предупреждение за неправильное оформление формул и фамильярность

 
 
 
 Re: Аппроксимация экспериментальных данных
Сообщение17.05.2013, 19:51 
Аватара пользователя
Можно немного перепараметризовать.
$36^a=u$
$36^b=v$
Тогда $60^a=u^{1.1425486}$, аналогично и для второй
Т.е. у нас уравнения вида
$u-v=A$
$u^{1.1425486}-v^{1.1425486}=B$
Или
$u^{1.1425486}-(u-A)^{1.1425486}=B$
А тут уже Ньютоном.

 
 
 [ Сообщений: 59 ]  На страницу Пред.  1, 2, 3, 4


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group