Java 中的插值:将随机数从一个范围映射到另一个范围

Interpolation in Java: Mapping a random number from one range to another

我从一个范围 (x,y) 生成了一个数字 z 并想将 z 映射到另一个范围 (p,q)

这里似乎使用 matlab 回答了这个问题:

https://www.mathworks.com/matlabcentral/answers/379380-mapping-of-a-random-number-in-one-range-to-another-range

我需要在 java 中执行此操作,但还需要了解此 'interp1' 在做什么。

A​​pache commons-math 有几个可用的插值器:

https://commons.apache.org/proper/commons-math/javadocs/api-3.0/org/apache/commons/math3/analysis/interpolation/package-summary.html

对于 matlab 的 interp1 函数,还有随时可用的文档,如果您只是想了解更多关于它的功能:

https://www.mathworks.com/help/matlab/ref/interp1.html

据我了解,您正在寻找 Matlab 中的这个 vq = interp1(x,v,xq) 特定函数。 x是原来的范围,v是原来的值(一个或多个),xq是新的范围。

Matlab 状态 "vq = interp1(x,v,xq) returns interpolated values of a 1-D function at specific query points using linear interpolation."

Wiki 关于 Linear Interpolation,它基本上就是您要实现的,将数字从一个范围映射到另一个范围。

我发现这可能会解决您的问题,请检查一下。 Mapping a numeric range onto another

interp1,使用默认的"linear"插值方法,使用通过点(x,p)和(y,q)的直线来找到具有X-的点的Y坐标坐标等于 z.

static double interp1(double x, double y, double p, double q, double z) {
  return p + (q - p) * (z - x) / (y - x);
}