增量缩放功能

| 如果您知道\'input1 \'严格在0到1之间,或者通常是\'min \'和\'max \'(其中min和max已知在0到1之间,但不严格地在0和1之间),您是否会确保“输入1”以“输入2”给出的数值跳变递增或递减,并确保新值严格在最小值和最大值之间,并且永远不会达到最小值或最大值?     
已邀请:
        您需要一个分布函数,最好是一个可逆的函数(该逆函数称为分位数函数)。 换句话说,您需要一个带有
lim[x->-oo] f(x) = 0
lim[x->oo] f(x) = 1
的单调严格递增的连续函数f。 如果您有这样的分布函数f及其反函数f⁻¹,那么您的调整函数将得到以下内容:
g (x, Δ) = f( f⁻¹(x) + Δ )
对于0到1之间的值,对于其他间隔
[a, b]
,我们需要使用缩放函数
s
对其进行缩放:
s(x) = (b-a)·x + a,     s⁻¹(y) = (y-a)/(b-a)
然后调整功能得到
h(x, Δ) = s(g(s⁻¹(x), Δ) = s( f( f⁻¹(s⁻¹(x)) + Δ )).
一个容易用Java计算的分布函数是
f(x) = 1 - 0.5 * exp(-x)   for 0 ≤ x
f(x) =     0.5 * exp( x)   for x ≤ 0
分位数功能
f⁻¹(y) = - log(2 - 2y)  for   y ≤ 0.5
f⁻¹(y) =   log(2 y)     for 0.5 ≤ y
从此构建您的调整功能只是将它们组合在一起。 当然,这仅在您的数字精度极限内起作用–您无法任意接近1。     
        我相信以下内容应将input1保持在ѭ9之内
input1 = ((input1 - min + input2) % (max - min)) + min; 
    
        您可以使用最小/最大
 public static int adjust(int n, int adjust, int min, int max) {
      return adjust0(n, adjust, min+1, max-1);
 }

 private static int adjust0(int n, int adjust, int trueMininum, int trueMaximum) {
      return Math.max(trueMininum, Math.min(trueMaximum, n + adjust));
 }
这将允许您调整您的值,并确保它在最小值和最大值之间,但绝不在这些值之间。     

要回复问题请先登录注册