gpt4 book ai didi

python - 如何创建等效于 Excel Solver valueof 函数?

转载 作者:行者123 更新时间:2023-12-04 04:07:54 25 4
gpt4 key购买 nike

我有以下等式:
x/0,2 * (0,2+1)+y/0,1*(0,1+1) = 26.34

X 和 Y 的初始值分别设置为 4.085 和 0.17。我需要找到 X 和 Y 的值,它们满足方程并且与初始设定值有最低公差。换句话说,|4.085 - x| 的总和和 |0.17 - y|被最小化。

使用 Excel Solver Valueof 函数很容易找到:我们在公式结果中插入 x 和 y 作为要更改的变量以达到 26 enter image description here

这是我的 python 代码(我正在尝试为此使用 sympy)

        x,y = symbols('x y')
eqn = solve([Eq(x/0.2*(0.2+1)+y/0.1*(0.1+1),26)],x,y)
print(eqn)

但是我得到了奇怪的结果 {x: 4.33333333333333 - 1.83333333333333*y}

谁能帮我解这个方程式?

最佳答案

你得到的答案并不奇怪,它只是你所问问题的答案。您有一个关于两个变量 xy 的方程,这个问题的解通常不是唯一的(有时是无限的)。现在,您可以添加一个额外的条件(例如不等式)或更改可能解决方案的数字域(如 Diophantine equations )。您可以在 Sympy 中执行其中任何一个,在下面的示例中,我使用 solvesetx 上找到了针对您在 Real 域中的问题的解决方案:

from sympy import symbols, Eq, solveset

x,y = symbols('x y')
eqn = solveset(Eq(1.2 * x / 0.2 + 1.1 * y / 0.1, 26), x, Reals)
print(eqn)

输出:

Intersection(FiniteSet(4.33333333333333 - 1.83333333333333*y), Reals)

如您所见,x 上的解是一个有限集,即 y 上的直线与实数的交点。任何特定的解决方案都可以通过直接评估 y 来找到。

这等同于 x = 4.33333333333333 - 1.83333333333333 * y 如果您在估计值 y = 0.17 中计算此等式,您将获得 x = 4.0216 (接近您的 x = 4.085 猜测值)。

编辑:

在分析了你问题中新增的信息后,我想我终于明白了:你的问题是一个约束优化问题。现在,我不经常使用 Excel,但我敢打赌,这种优化是在后台使用 Lagrange multipliers 进行的。 .在您的特定情况下,目标函数表示解 (x, y) 与点 (4.085, 0.17) 的偏差。为方便起见,我选择此函数作为它们之间的欧几里得距离(由于导数的不连续性,您建议的绝对值可能会出现问题)。约束函数就是您提供的方程式。要用 Sympy 解决这个问题,可以使用这样的东西:

import sympy as sp

# Define symbols and functions
x, y, lamb = sp.symbols('x, y, lamb', real=True)
func = sp.sqrt((x - 4.085) ** 2 + (y - 0.17) ** 2) # Target function
const = 1.2 * x / 0.2 + 1.1 * y / 0.1 - 26 # Constraint function

# Define Lagrangian
lagrang = func - lamb * const

# Compute gradient of Lagrangian
grad_lagrang = [sp.diff(lagrang, var) for var in [x, y, lamb]]

# Solve the resulting system of equations
spoints = sp.solve(grad_lagrang, [x, y, lamb], dict=True)

# Print stationary points
print(spoints)

输出:

[{x: 4.07047770700637, lamb: -0.0798086884467563, y: 0.143375796178345}]

因为在我们的例子中只找到了一个固定点,所以这是最优解(尽管这只是必要条件)。 lamb 乘数的值可以舍弃,因此 x, y = 4.070, 0.1434。希望这会有所帮助。

关于python - 如何创建等效于 Excel Solver valueof 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62216463/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com