2014 dxdy logo

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

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


Правила форума


В этом разделе нельзя создавать новые темы.

Если Вы хотите задать новый вопрос, то не дописывайте его в существующую тему, а создайте новую в корневом разделе "Помогите решить/разобраться (М)".

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

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

Обязательно просмотрите тему Правила данного раздела, иначе Ваша тема может быть удалена или перемещена в Карантин, а Вы так и не узнаете, почему.



Начать новую тему Ответить на тему На страницу Пред.  1, 2, 3  След.
 
 Re: Помогите придумать апроксимацию
Сообщение05.06.2014, 22:13 


05/09/12
2587
А зачем рождать различные арксинусы/экспоненты, работающие на всем интервале и все равно считающиеся через ряды? Массив точек потребует немножко памяти, его размер (шаг) зависит от выбранного способа интерполяции и может быть всего несколько десятков точек - функция достаточно гладкая, зато считаться будет гораздо быстрее одной громоздкой формулы.

ЗЫ вдобавок, этот метод и производные нужных порядков с заданной точностью легко аппроксимирует, а одна красивая формула - очень вряд ли! Ради интереса можете проверить точность аппроксимации производной вашим "шедевром математического искусства".

 Профиль  
                  
 
 Re: Помогите придумать апроксимацию
Сообщение05.06.2014, 22:49 
Аватара пользователя


26/05/12
1694
приходит весна?
_Ivana в сообщении #872204 писал(а):
проверить точность аппроксимации
В книге сказано, что она не превышает $1.5\cdot10^{-7}$. Не думаю, что там соврали.

_Ivana в сообщении #872204 писал(а):
всего несколько десятков точек - функция достаточно гладкая
Это через чур оптимистичное утверждение ещё надо проверить на практике. Часто бывает так, что функция в плане гладкости на пределе совершенства, а аппроксимировать её как следует весьма сложно.

В общем, буду пробовать, а там видно будет, какие проблемы возникнут.

 Профиль  
                  
 
 Re: Помогите придумать апроксимацию
Сообщение05.06.2014, 22:59 


05/09/12
2587
_Ivana в сообщении #872204 писал(а):
точность аппроксимации производной

B@R5uk в сообщении #872221 писал(а):
Не думаю
Правильно, думать не надо - надо просто проверить.
B@R5uk в сообщении #872221 писал(а):
Часто бывает так, что функция в плане гладкости на пределе совершенства, а аппроксимировать её как следует весьма сложно.
Если пытаться во что бы то ни стало найти одну формулу для всего интервала, то возможно. А если сделать по-нормальному, как уже было не раз предложено - то нет никаких сложностей.

 Профиль  
                  
 
 Re: Помогите придумать апроксимацию
Сообщение05.06.2014, 23:04 
Аватара пользователя


26/05/12
1694
приходит весна?
Пока мне видятся следующая проблема. Разбивая область определения функции на отрезки и аппроксимируя функцию на каждом участке своим полиномом мне необходимо подбирать их коэффициенты так, чтобы 1) функция приближалась наилучшим образом при наименьшем числе коэффициентов (наименьшей степени полинома), 2) на границах полиномы должны гладко стыковаться. Сплайны в этом плане не подходят, так как они удобны для интерполяции (когда набор точек, в которых функция известна существенно ограничен), о их применимости для аппроксимации я никаких теорем не знаю, а практика показала, что они не удобны.

Тут мне видится один путь: требовать, чтобы на концах отрезка не только значения аппроксимирующих полиномов равнялись значениям функции, но их их (полиномов и функции) производные совпадали. Это приведёт к небольшой избыточности в суммарном количестве коэффициентов полиномов, за то будет легче искать аппроксимацию. Если есть какие-нибудь идеи по этому поводу, буду рад услышать.

-- 06.06.2014, 00:05 --

_Ivana в сообщении #872227 писал(а):
надо просто проверить.
Прошу прощения, проглядел. Мне даже стало интересно, как там обстоят дела.

 Профиль  
                  
 
 Re: Помогите придумать апроксимацию
Сообщение06.06.2014, 02:46 


05/09/12
2587
Попробовал немножко поинтерполировать вашу функцию. При равномерном шаге $0.01$ и интерполяции локальным кубическим сплайном Эрмита с оценкой производных в краях интервала по 7 точкам (по-русски говоря, на каждом интервале полином третьей степени, коэффициенты рассчитываются за несколько сложений/умножений, итоговый сплайн непрерывен и имеет непрерывную первую производную) ошибка интерполяции на интервале $[0, 0.5]$ не превышает $6\cdot 10^{-8}$ - при заданном шаге для этого интервала потребуется хранить массив всего 50 значений функции. При аргументе больше $0.6$ при таком шаге ошибка резко уменьшается, при аргументе большем $1$ - до $1\cdot 10^{-11}$ и менее - можно выбрать более редкий шаг - существенно уменьшить массив хранимых значений.
При том же шаге и локальном сплайне Эрмита пятой степени (непрерывен сам сплайн и его первая и вторая производные, производные рассчитываются также по 7 точкам), ошибка на интервале $[0, 0.1]$ не превышает $3.5\cdot 10^{-8}$ (нужны всего 10 значений функции), на $[0.1, 0.15]$ не превышает $1\cdot 10^{-9}$ и далее порядок ошибки падает аналогично первому сплайну.
Изображение
Если непонятно, могу написать формулы интерполяции данных сплайнов. Также можно легко скомбинировать эти сплайны с вашей найденной аппроксимацией в начальном интервале и вашим алгоритмом расчета хвоста.

 Профиль  
                  
 
 Re: Помогите придумать апроксимацию
Сообщение06.06.2014, 07:34 


14/01/11
3039
B@R5uk в сообщении #872095 писал(а):
Sender, не совсем понял, что вы предлагаете.

Ну вот есть у вас 2 функции $f_1(x)$ и $f_2(x)$, заданные на $\mathbb{R}$. Вы хотите получить функцию $$f(x)=\left\{\begin{matrix}
f_1(x),\;x<0
\\ 
f_2(x),\;x\geqslant 0.
\end{matrix}\right.$$

В вашем распоряжении имеется функция
$$\theta(x)=\left\{\begin{matrix}
0,\;x<0
\\ 
1,\;x\geqslant 0.
\end{matrix}\right.$$
Тогда искомую функцию можно задать в виде $f(x)=f_1(x)\theta(-x)+f_2(x)\theta(x).$
P.S. Не путать с тета-функциями, упомянутыми ИСН. :-)

 Профиль  
                  
 
 Re: Помогите придумать апроксимацию
Сообщение06.06.2014, 11:24 
Аватара пользователя


26/05/12
1694
приходит весна?
_Ivana в сообщении #872284 писал(а):
...и интерполяции локальным кубическим сплайном Эрмита...

Я так понял, вы предлагаете затабуировать именно значения функции с каким-то шагом. А в промежутках считать по соседним точкам. Это самый простой подход, и функция всегда будет совпадать со своей аппроксимацией в точках табуирования. Но не смотря на это, мне он кажется не совсем рациональным. В промежуточных точках функция может отличаться от аппроксимации при таком подходе сильнее, чем если использовать "мягкую" аппроксимацию, которая не заставляет совпадать функцию и аппроксимацию в каждой точке таблицы.
_Ivana в сообщении #872284 писал(а):
При аргументе больше $0.6$ при таком шаге ошибка резко уменьшается
Это весьма закономерно. Во-первых, чем больше аргумент, тем меньше членов ряда играют роль. Для аргументов больших $2.0$ можно считать, остаётся всего одна экспонента. А во-вторых, функция вблизи нуля ведёт себя очень плохо: есть подозрение, что все производные в нуле раны нулю, а чем старше производная, тем сильнее и чаще она осциллирует:

Изображение

_Ivana в сообщении #872284 писал(а):
Попробовал немножко поинтерполировать вашу функцию.
Раз уж на то пошло, может сверим таблицы значений функции? Вдруг я не правильно что-то посчитал? Вот моя таблица.

 Профиль  
                  
 
 Re: Помогите придумать апроксимацию
Сообщение06.06.2014, 15:17 


05/09/12
2587
Продолжая про сплайны. Если хранить заранее рассчитанные значения первой и второй производной, то объем таблицы увеличится втрое, но и точность возрастет. На графиках показаны ошибки интерполяции самой функции и ее первой производной - можете посмотреть порядок точности. Шаг тот же, $0.01$, сплайн 5 порядка, коэффициенты считаются еще быстрее в отличие от предыдущего случая - нам не надо оценивать производные, они уже есть. На данном интервале потребуется всего 3 таблицы по 20 точек.
Изображение Изображение

ЗЫ не вижу смысла придумывать что-то еще, когда представленный сплайн дает такой результат при минимуме затрат. Хотя, можно сделать неравномерный шаг (например, экспоненциальный), при этом сложность расчета коэффициентов почти не изменится.

ЗЗЫ моя таблица значений функции на вашем шаге разумеется не совпадает с вашей, мне моя кажется симпатичнее, но в пост на форуме она не влезла, а своего сайта на народе у меня нет - могу отправить ее в текстовом виде вам на почту, например.

 Профиль  
                  
 
 Re: Помогите придумать апроксимацию
Сообщение06.06.2014, 16:24 
Аватара пользователя


26/05/12
1694
приходит весна?
_Ivana в сообщении #872469 писал(а):
таблица значений функции разумеется не совпадает с вашей
В каком знаке различие? Как это различие плавает в начале, в середине и в конце таблицы?

 Профиль  
                  
 
 Re: Помогите придумать апроксимацию
Сообщение06.06.2014, 16:26 


05/09/12
2587
Детально не анализировал, могу скинуть таблицу. Могу еще попробовать дошлифовать функцию для большей точности.

UPD посмотрел, у вас 16 знаков выведено, а у меня только 15 в длинном формате вывода Матлаба, поэтому где у вас последний знак пляшет, у меня все визуально красиво, а точность похоже одинакова. Но в любом случае ее более чем достаточно, чтобы ловить ошибки в 15 знаке после запятой.

 Профиль  
                  
 
 Re: Помогите придумать апроксимацию
Сообщение06.06.2014, 20:04 
Аватара пользователя


26/05/12
1694
приходит весна?
Функция$$g\left(x\right)=1-\exp\left(-\frac{1}{a_0+a_1 x+a_2 x^2+a_3 x^3+a_4 x^4+a_5 x^5+a_6 x^6} \right)$$где$$\begin{align}
  & a_0=0.00064291 \\ 
 & a_1=1.55906286 \\ 
 & a_2=-2.4098668 \\ 
 & a_3=14.494017 \\ 
 & a_4=-59.45774 \\ 
 & a_5=148.0868 \\ 
 & a_6=-160.06805 
\end{align}$$приближает мой ряд на отрезке $[0,0.2]$ с точностью не хуже $10^{-7}$:

Изображение

_Ivana, можете попробовать проверить по вашим данным, ни где я не напортачил?

(Константы)

Код:
a=[
   160.06805
  -148.08680
   059.45774
  -014.494017
   002.4098668
  -001.55906286
  -000.00064291
    ];

 Профиль  
                  
 
 Re: Помогите придумать апроксимацию
Сообщение06.06.2014, 20:10 


05/09/12
2587
Проверю, когда до Матлаба доберусь. Константы бы дублировали в теге кода, чтобы напрямую копипастить... Пора бы уже точность аппроксимации производных проверить, что у "шедевра математического искусства", что у этого приближения. За сплайны то я в этом смысле не переживаю, по понятным причинам.

 Профиль  
                  
 
 Re: Помогите придумать апроксимацию
Сообщение06.06.2014, 20:19 
Аватара пользователя


26/05/12
1694
приходит весна?
_Ivana в сообщении #872584 писал(а):
Константы бы дублировали в теге кода
Сделано!

_Ivana в сообщении #872584 писал(а):
Пора бы уже точность аппроксимации производных проверить, что у "шедевра математического искусства"
У шедевра проверял (правда, производную численно считал). В нуле какая-то острая неприятность, а так очень даже не плохо: не хуже $3\cdot 10^{-6}$

 Профиль  
                  
 
 Re: Помогите придумать апроксимацию
Сообщение06.06.2014, 21:06 


05/09/12
2587
Проверил, все так. Только на будущее, константы в коде это хорошо, но не заставляйте людей додумываться, что вы им поменяли знаки, убрав минус из показателя экспоненты.
Также проверил точность аппроксимации производной - на заданном интервале ошибка вплоть до $1\cdot 10^{-5}$ - если я не ошибся, считал численно при разных шагах, что неплохо, но далеко от желаемой вами же точности. А теперь вопрос - и сдалась вам экспонента, считающаяся через ряд, да еще с такой производной? Вы принципиально не любите предложенные мною сплайны или это спортивный интерес поиска философского камня?

 Профиль  
                  
 
 Re: Помогите придумать апроксимацию
Сообщение06.06.2014, 21:22 
Аватара пользователя


26/05/12
1694
приходит весна?
_Ivana в сообщении #872602 писал(а):
что вы им поменяли знаки
Упс! Это следствие бездумного копипаста из текста скрипта. Прошу прощения.
_Ivana в сообщении #872602 писал(а):
и сдалась вам экспонента
Ну, она очень хорошо отражает тот факт, что у функции в нуле особенность. И опять же, я получил желаемую точность с помощью всего семи (!!!) вспомогательных цифр.
_Ivana в сообщении #872602 писал(а):
не любите предложенные мною сплайны
Если честно, я не понял, как они работают. Сплайн проводится через две табличных точки, между которыми ищется значение, при этом первая и вторая производная сплайна на концах так же задана таблицей. Правильно? Получается 6 параметров и 5-я степень полинома?

-- 06.06.2014, 22:35 --

Посчитал производную математического шедевра по-чесному аналитически. Сравнил с оригинальной производной функции ошибок. Максимальная ошибка вблизи нуля и не превышает $8\cdot 10^{-6}$. На мой взгляд, это очень хорошая аппроксимация. Хотя, конечно, всё зависит от приложений.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 41 ]  На страницу Пред.  1, 2, 3  След.

Модераторы: Модераторы Математики, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group