已知双变量求加权混合达目标值的百分比权重计算方法
双变量加权混合匹配目标值的权重计算方法
核心计算逻辑
你只需要解二元一次方程组即可得到精确解,推导过程如下:
设x的权重为w_x(取值范围0-1,乘以100%就是百分比占比),y的权重为w_y,天然满足约束条件:
w_x + w_y = 1
加权和等于目标值的公式为:w_x * x + w_y * y = target
把w_y = 1 - w_x代入上式整理后可得闭式解,没有比这套公式计算效率更高的方案,时间复杂度为O(1):
w_x = (target - y) / (x - y)w_y = 1 - w_x
代入你给出的数值(target=11.82、x=9、y=15)计算:w_x = (11.82 - 15) / (9 - 15) = 0.53,对应x占比53%;w_y=0.47,对应y占比47%,刚好可以加权得到11.82的目标值,你举的55%/45%是近似配比。
可直接复用的函数实现
以下是Python版本的实现,额外加了边界兼容逻辑:
def calc_mix_weight(target: float, x: float, y: float) -> tuple[float, float]: # 兼容x和y相等的特殊场景,此时任意权重混合结果都相同 if abs(x - y) < 1e-9: return (0.5, 0.5) w_x = (target - y) / (x - y) w_y = 1 - w_x # 如果要求权重必须在0-1区间内,可以打开下面的注释做截断 # w_x = max(0.0, min(1.0, w_x)) # w_y = 1 - w_x return (round(w_x, 4), round(w_y, 4)) # 测试你的场景 w_x, w_y = calc_mix_weight(11.82, 9, 15) print(f"x权重:{w_x*100:.2f}%,y权重:{w_y*100:.2f}%")
边界说明
如果计算出来的w_x或w_y不在0-1区间内,说明你给出的target不在x和y的取值区间范围内,无法用两个正权重的混合得到目标值,需要调整x、y的取值或者target的设定。
内容的提问来源于stack exchange,提问作者dl305954
相关产品推荐
相关产品推荐

