Pozwól, że przedstawię najbardziej ogólne rozwiązanie zgodne z wymaganiami: zapewni Ci największą elastyczność w wyborze i optymalizacji.
Możemy interpretować „w kształcie litery S” jako monotonicznie rosnącą krzywą (ponieważ transformacja powinna być jeden do jednego) składająca się z jednej części wklęsłej w górę i drugiej części wklęsłej w dół. Możemy skupić się na uczynieniu lewej połowy wklęsłym, ponieważ drugi typ (z lewą połówką wklęsłą do góry) uzyskuje się poprzez odwrócenie takich przekształceń.
Ponieważ transformacja ma być różniczkowalna, musi zatem mieć malejącą pochodną w lewej połowie i rosnącą pochodną w prawej połowie. Niezależnie od tego pochodna musi być nieujemna i może wynosić zero tylko w izolowanym punkcie (jeśli w ogóle: minimalna wartość pochodnej daje najmniejszy spadek transformacji).ff′
Nie jest wymagane, aby pochodna była różniczkowalna, ale w praktyce możemy przypuszczać, że jest różniczkowalna prawie wszędzie z pochodną . f′′
Ta druga pochodna może zrobić praktycznie wszystko : potrzebujemy tylko tego
jest całkowalne,
jest mniejsze lub równe zero dla wszystkich wartości w pewnym przedziale po lewej stronie , i[0,k)
jest większe lub równe zero dla wszystkich wartości w prawym przedziale .(k,1]
Takie funkcje (i ich odwrotności) parametryzują zestaw wszystkich rozwiązań. f′′ (Istnieje pewna redundancja: zajmuje się nią ostatni etap normalizacji opisany poniżej.)
Fundamentalne twierdzenie rachunku całkowego pozwala nam odzyskać z dowolnej takiej specyfikacji. To jest,f
f′(x)=∫x0f′′(t)dt
i
f(x)=∫x0f′(t)dt.
Warunki na gwarancji, że wzrasta monotonicznie od jego minimim do pewnego maksymalnego . Wreszcie, normalizacja przez podzielenie wartości poprzedniego całki przez .f′′ff(0)f(1)=CfC
Oto ilustracja rozpoczynająca się od wersji losowego przejścia dla drugiej pochodnej. W nim pochodne nie zostały znormalizowane, ale transformacja została.f
Aby zastosować to podejście, możesz zacząć od wyrażenia analitycznego dla , być może zróżnicowanego o skończoną liczbę parametrów. Możesz to również określić, podając punkty na wykresie i interpolując między nimi - pod warunkiem, że interpolator przestrzega ujemności wartości na i dodatniej na . do wygenerowania ilustracji. Odpowiedni kod (poniżej) zawiera szczegóły obliczeń.f′′[0,k)(k,1]R
Takie podejście pozwala zaprojektować dowolną transformację. Możesz zacząć od szkicowania krzywej S, oszacowania jej (względnych) nachyleń , a następnie oszacowania jej nachyleń. Określ aby dopasować to ostatnie zdjęcie, a następnie przejdź do obliczenia a następnie .f′f′′f′f
Zauważ, że które są najpierw wklęsłe w górę, a następnie wklęsłe w dół, można również uzyskać, negując na początku . Krytycznym warunkiem utworzenia krzywej w kształcie litery S jest to, że (poza możliwymi skokami na zbiorze miary zero) może faktycznie przekroczyć zero.ff′′f′′
Nawiasem mówiąc, rozwiązanie powstaje przez ustawienie prawie wszędzie, co powoduje, że stała i dodatnia, skąd jest liniowy; normalizacja zapewnia, że nachylenie wynosi a punkt przecięcia wynosi . (Ustawienie stałej stałą i ujemną daje rozwiązanie .)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")