Не могли бы вы предложить дифференцируемое приближение для функции round
Matlab?
Функция round
выглядит так:
Я хотел бы дифференцируемую функцию, которая [близко] напоминает ту, что на рисунке.
Не могли бы вы предложить дифференцируемое приближение для функции round
Matlab?
Функция round
выглядит так:
Я хотел бы дифференцируемую функцию, которая [близко] напоминает ту, что на рисунке.
Вы можете написать производную, используя дельту Дирака — это называется "гребенка Дирака".
Также вы можете записать функцию округления как сумму шаговых функций Хевисайда.
для обоих есть много приближений - просто выберите дифференцируемое.
Что ж, y=x
дифференцируема и, если отойти достаточно далеко, выглядит точно так же, как ваша целевая функция. Он отличается от round
тем, что отображает вещественные числа в вещественные числа, а не действительные числа в целые числа.
Я не думаю, что имеет смысл говорить о дифференцируемости функций от вещественных к целым числам для чего-либо, кроме тривиальных функций, таких как f(r) = 1 for all r in Reals
.
Вероятно, вы сможете приблизиться к ступенчатой функции, разумно выбрав тригонометрическую функцию. Например, это
сюжет sin(x)+x
. Если бы у меня было больше времени, я, вероятно, мог бы настроить его так, чтобы он проходил через (k,k)
для всех целых чисел k
, но у меня его нет, поэтому я оставлю это вам или другим прохожим.
Производная вашей функции почти везде равна 1. Если возможно, просто используйте 1.
Если вам действительно нужно сделать функцию гладкой, рассмотрите возможность использования фильтра нижних частот.
y=x
если вы посмотрите на это издалека!
- person High Performance Mark; 14.08.2012