Дифференцируемая аппроксимация функции round() Matlab

Не могли бы вы предложить дифференцируемое приближение для функции round Matlab?

Функция round выглядит так:

введите здесь описание изображения

Я хотел бы дифференцируемую функцию, которая [близко] напоминает ту, что на рисунке.


person user92382    schedule 14.08.2012    source источник


Ответы (3)


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

Также вы можете записать функцию округления как сумму шаговых функций Хевисайда.

для обоих есть много приближений - просто выберите дифференцируемое.

person bdecaf    schedule 14.08.2012
comment
Например, cos(Pix)^100 выглядит как (ненормализованная) гребенка Дирака, тогда integrals.wolfram.com/index.jsp?expr=cos%28PIx%29^100&random=false дает примитив f(x) и (f(x)-f (0.5))/(f(1.5)-f(0.5)) дает довольно крутую лестницу. - person aka.nice; 15.08.2012
comment
Не могли бы вы уточнить, какую дельту Дирака можно использовать? - person xxx222; 28.11.2016
comment
Большое спасибо! - person xxx222; 28.11.2016
comment
я почти всегда выбирал приближение как сумму гауссов. Но это полностью зависит от вашего дальнейшего рабочего процесса - неудачный выбор может сильно его усложнить. - person bdecaf; 28.11.2016

Что ж, y=x дифференцируема и, если отойти достаточно далеко, выглядит точно так же, как ваша целевая функция. Он отличается от round тем, что отображает вещественные числа в вещественные числа, а не действительные числа в целые числа.

Я не думаю, что имеет смысл говорить о дифференцируемости функций от вещественных к целым числам для чего-либо, кроме тривиальных функций, таких как f(r) = 1 for all r in Reals.

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

введите здесь описание изображения

сюжет sin(x)+x. Если бы у меня было больше времени, я, вероятно, мог бы настроить его так, чтобы он проходил через (k,k) для всех целых чисел k, но у меня его нет, поэтому я оставлю это вам или другим прохожим.

person High Performance Mark    schedule 14.08.2012
comment
Чтобы добавить к ответу, вы можете добавить треугольную волну en.wikipedia.org/wiki/Triangle_wave до х. Таким образом, вы можете подойти как можно ближе к ступенчатой ​​функции. - person bdecaf; 14.08.2012
comment
Хм, треугольная волна не дифференцируема в бесконечном числе точек или в конечном числе точек в любом диапазоне. - person High Performance Mark; 14.08.2012
comment
Правда - поторопился :) . Я имел в виду, что вы можете добавить преобразование Фурье к некоторому порядку. - person bdecaf; 14.08.2012
comment
х - sin(2pi x)/(2pi) - person Tiana; 20.05.2018

Производная вашей функции почти везде равна 1. Если возможно, просто используйте 1.

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

person Vic    schedule 14.08.2012
comment
Как я уже сказал изначально y=x если вы посмотрите на это издалека! - person High Performance Mark; 14.08.2012