Дозвольте запропонувати найбільш загальне рішення, що відповідає вимогам: це дасть вам найбільшу гнучкість у виборі та оптимізації.
Ми можемо інтерпретувати "S-подібну" як монотонно зростаючу криву (тому що перетворення повинно бути однозначною), що складається з однієї частини, увігнутої вгору, та іншої частини, увігнутої вниз. Ми можемо зосередитись на тому, щоб ліва половина увігнута вниз, тому що інший тип (з лівою половиною увігнутою вгору) отримується шляхом інвертування таких перетворень.
Оскільки трансформація повинна бути диференційованою, вона повинна мати зменшувану похідну у лівій половині та зростаючу похідну в правій половині. Незалежно від того, похідна повинна бути негативною і може бути нульовою лише в ізольованій точці (якщо вона взагалі: мінімальне значення похідної дає найменший нахил перетворення.)ff′
Не потрібно, щоб похідна була диференційованою, але в якості практичного питання ми можемо припустити, що вона є диференційованою майже скрізь із похідною . f′′
Ця друга похідна може зробити практично нічого : все , що ми вимагаємо, щоб
вона інтегральна,
є меншим або рівним нулю для всіх значень у деякому лівому інтервалі та[0,k)
більший або дорівнює нулю для всіх значень у правому інтервалі .(k,1]
Такі функції (та їх обертання) параметризують набір усіх рішень. f′′ (Існує деяка надмірність: це вирішується за допомогою останнього етапу нормалізації, описаного нижче.)
Фундаментальна теорема обчислення дозволяє нам відновити з будь-якої такої специфікації. Це є,f
f′(x)=∫x0f′′(t)dt
і
f(x)=∫x0f′(t)dt.
Умови на гарантії того, що зростає монотонно від його віз можна меншим до деякого максимального . Нарешті, нормалізують шляхом ділення значення попереднього інтеграла від .f′′ff(0)f(1)=CfC
Ось ілюстрація, що починається з версії випадкової прогулянки для другої похідної. У ньому похідні не були нормалізовані, але перетворення було.f
Щоб застосувати цей підхід, ви можете почати з аналітичного виразу для , можливо, варіюється кінцевою кількістю параметрів. Ви також можете вказати його, вказавши деякі точки вздовж його графіка та інтерполюючи між ними - за умови, що інтерполятор поважає негативність значень на та позитивність на . Останнє - метод, що застосовується для створення ілюстрації. Відповідний код (нижче) містить деталі обчислення.f′′[0,k)(k,1]R
Такий підхід дозволяє проектувати будь-яку трансформацію, яка вам подобається. Ви можете почати, накресливши криву S, оцінюючи її (відносні) нахили , а з цього оцінюючи її нахили. Вкажіть деякий щоб відповідати останньому малюнку, а потім перейдіть до обчислення а потім .f′f′′f′f
Зауважте, що , які спочатку увігнуті, а потім увігнуті вниз, також можна отримати, відкинувши на початку. Критична умова створення кривої S-подібної форми полягає в тому, що (крім можливих екскурсій на множині міри нуль) фактично може перетнути нуль не більше одного разу.ff′′f′′
До речі, рішення виникає, встановлюючи майже скрізь, роблячи постійним і позитивним, звідки лінійно; нормалізація забезпечує нахил а перехоплення - . (Зробивши постійним і негативним, виробляється рішення .)f(x)=xf′′(x)=0f′f10f′f(x)=1−x
n <- 51 # Number of interpolation points
k.1 <- floor(n * 2/3) # Width of the left-hand interval
k.2 <- n - k.1 # ............ right-hand interval
x <- seq(0, 1, length.out=n) # x coordinates
set.seed(17)
# Generate random values of the second derivative that are first negative,
# then positive. Modify to suit.
y.2 <- (c(runif(k.1, -1, 0), 0.5*runif(k.2, 0, 1))) * abs(cos(3*pi * x)) +
c(rep(-.1, k.1), rep(.5,k.2))
# Recover the first derivative and then the transformation. Control the
# minimum slope of the transformation.
y.1 <- cumsum(y.2)
y.1 <- y.1 - min(y.1) + 0.005 * diff(range(y.1))
y <- cumsum(y.1)
y <- (y - y[1]) / (y[n] - y[1]) # Normalize the transformation
#
# Plot the graphs.
par(mfrow=c(1,3))
plot(x, y.2, type="l", bty="n", main="Second derivative")
points(x, y.2, pch=20, cex=0.5)
abline(h=0, col="Red", lty=3)
plot(x, y.1, type="l", bty="n", lwd=2, main="First derivative")
abline(h=0, col="Red", lty=3)
plot(x, y, type="l", lwd=2, main="Transformation")