- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有以下等式:
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
这是我的 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}
谁能帮我解这个方程式?
最佳答案
你得到的答案并不奇怪,它只是你所问问题的答案。您有一个关于两个变量 x
和 y
的方程,这个问题的解通常不是唯一的(有时是无限的)。现在,您可以添加一个额外的条件(例如不等式)或更改可能解决方案的数字域(如 Diophantine equations )。您可以在 Sympy 中执行其中任何一个,在下面的示例中,我使用 solveset 在 x
上找到了针对您在 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/
打开几个编写宏/代码的示例,我突然被一个似乎安全的代码卡住了。求解器 (SOLVER.XLAM) 这是值得注意的,我想从我的系统中删除它。我想这不是一个相关的代码。谁能告诉我我应该怎么做?我已经安装了
是否可以使用 MSF api 将变量指定为半整数(V = 0 或 a = 5; Q1 = 5; Q2 10 * VPositive<= V <= 20 * VPositive ] ] 如果您使用
我正在研究线性和非线性编程(优化)框架的选项。 要求是: 支持大约线性和非线性规划问题。 100-1000 个变量和最多约 1000 个约束(我认为这很简单)。非线性问题具有涉及多个变量的乘法或除法的
SMT-Solver 可用于约束求解。众所周知,CSP 求解器也用于约束求解多年。那么 SMT 求解器与 CSP 求解器相比有什么优势呢? 最佳答案 这完全取决于你想做什么。您可以将两者都转换为 SA
我正在查看 Caffe LeNet 教程 here我想到了一个问题: 这两个代码有什么区别: self.solver.step(1) 和 self.solver.net.forward() # tr
我正在使用 CBC 求解器在 PyCharm 上解决优化问题,但一直遇到此错误: 错误:求解器 (cbc) 返回非零返回代码 (3221225781) 和 pyutilib.common._excep
我是 microsoft excels 求解器的用户,我很确定不可能求解最大化两个值。我想知道是否有人可能有另一种聪明的方法来做到这一点。 基本上,我有一列介于 1 到 30 之间的数字,我需要查看它
我想从数值的角度理解混合建模(特别是状态事件)背后的一般思想(尽管我不是数学家 :))。鉴于以下 Modelica 模型: model BouncingBall constant Real g
最近,我开始研究形式验证技术。在文献中,模型检查器和求解器可以以某种方式互换使用。 但是,模型检查器和求解器如何相互连接? p.s.如果建议提供一些论文或链接,我将不胜感激。 最佳答案 为了执行模型检
我希望这对某人来说是显而易见的。我只使用过 GLPK/MathProg。 我无法弄清楚 GNU MathProg(在 GLPK 内)中的语法来执行以下操作,例如: set PartsOfWeek; s
我有一个(对我来说)非常复杂的问题。我有两个向量: vectora <- c(111, 245, 379, 516, 671) vectorb <- c(38, 54, 62, 67, 108) 此外
我在 VBA 循环中使用 Excel 2007 中的内置求解器来解决许多不同的问题。有时,求解器会达到最大时间,这会导致出现弹出对话框,询问用户是否要继续、停止或结束。在所有情况下,我都希望它结束
我在 PC 上的 Excel 2010 中创建了一个程序,该程序依赖于 Excel 的内置求解器。我确保它适用于 PC 版 Excel 2010 和 Excel 2013。然后我尝试在 Excel 2
在汽车行业,当您购买汽车时,您有数千种不同的组件可供选择。并非每个组件都是可组合的,因此对于每辆汽车,都存在许多用命题逻辑表达的规则。就我而言,每辆车都有 2000 到 4000 条规则。 它们看起来
有没有办法让我们知道解算器中添加了多少约束?例如,我们初始化一个 z3 求解器 s = Solver(),然后使用 s.add() 添加约束。我们如何获得最终添加到求解器中的约束数量? 最佳答案 您可
我正在尝试修改 ceres 的默认行为,即计算残差的平方和作为成本函数。我希望它只计算总和(残差已经以只能为正的方式计算) 根据文档,我应该使用 ConditionedCostFunction 这是我
我有这个方法来求解根据增量返回 2 种类型数组的二次方程(如果小于零则有复数解) public static final String[] quadEquationSolver(double a, d
p = Int('p') q = Int('q') s = Solver() s.add(1<=p<=9, 1<=q<=19, 5<(3*p-4*q)<10) s.check() print s.mo
“问题”在标题中不应该是问题的情况。 我想为一组问题(类 Problem 的所有子项)实现一个求解器(类 Solver),这些问题或多或少共享同一组方法。我目前的设计是这样的: 在solver.h :
我为所有方向创建了一个单词求解器。它可以水平、垂直和反向查找单词。然而,我在让它走向各个方向时遇到了问题。所以把“你好”放在: H E i l x L p q c L O m 任何人
我是一名优秀的程序员,十分优秀!