我有一个数字值的列表x
首先,我指定一个范围。我想从这个范围内的x
中获取值。取值范围从x
的中位数取±R
。我想调整R
以获得特定数量的N
值。我认为实现这一目标的唯一方法是通过某种反馈循环。什么是尽可能接近N
的快速有效的方法?
。
x = ['3','5','1','2','4']
我想要3-R<3<3+R
的值范围,因为3
是中位数。假设是N = 3
。得到的值将是['2','3','4']
, R
工作为1。
示例代码:
N = 3
x = ['3','5','1','2','4']
R = 1
n = some number to allow room for error
y = values of x in range ±R from median
while len(y) > N+n or len(y) < N-n:
if len(y) > N+n:
R -= ADJUST VALUE PROPORTIONAL TO ERROR HERE?
if len(y) < N-n:
R += ADJUST VALUE PROPORTIONAL TO ERROR HERE?
y = values of x in range ±R from median (update y list with new R)
我很天真地尝试用Bolzano定理的方法。先取中位数,然后取离中位数最远的值,把它们之间的距离称为L0。当然,这将包括所有的点。然后用L0除以2,检查有多少个点在这个区间内。还是太多还是太少?
- 如果太多,L0=L, L = L0/2。
- 如果它们太少,L=(L0+L)/2。