我想将scipy.optimize与符号化字符一起使用
from scipy.optimize import minimize
from sympy.utilities.lambdify import lambdify
import sympy as sp
x1, x2, x3, x4 = sp.symbols('x1 x2 x3 x4')
FormulaMain = sp.symbols('-2*x1**2*x3+6*x1**2*x4+13*x1**2-3*x1*x2**2+x1*x2+3*x1*x3**2-3*x4+103')
HandleMain = lambdify((x1,x2,x3,x4),FormulaMain,'numpy')
bnds = ((-1, 1), (-1, 1), (-1, 1), (-1, 1))
PrintParams = minimize(HandleMain,[1,1,1,1],method='SLSQP',bounds=bnds)
print PrintParams
当我运行代码时,我得到
<lambda>() takes exactly 4 arguments (1 given)
我想我已经用[1,1,1,1]输入了4个参数,我是否需要对代码进行任何更改?
首先:欢迎来到SO!
据我所知,lambdify()
不能处理向量。此外,使用Sympy时,确定雅可比很容易。您可以尝试:
import numpy as np
from scipy.optimize import minimize
from sympy.utilities.lambdify import lambdify
import sympy as sy
sy.init_printing() # LaTeX like pretty printing for IPython
x1, x2, x3, x4 = sy.symbols('x1 x2 x3 x4')
xx = (x1, x2, x3, x4)
f = -2*x1**2*x3+6*x1**2*x4+13*x1**2-3*x1*x2**2+x1*x2+3*x1*x3**2-3*x4+103
f_n = lambdify(xx, f, modules='numpy')
# Build Jacobian:
jac_f = [f.diff(x) for x in xx]
jac_fn = [lambdify(xx, jf, modules='numpy') for jf in jac_f]
def f_v(zz):
""" Helper for receiving vector parameters """
return f_n(zz[0], zz[1], zz[2], zz[3])
def jac_v(zz):
""" Jacobian Helper for receiving vector parameters """
return np.array([jfn(zz[0], zz[1], zz[2], zz[3]) for jfn in jac_fn])
bnds = ((-1, 1), (-1, 1), (-1, 1), (-1, 1))
zz0 = np.array([1, 1, 1, 1])
rslts = minimize(f_v, zz0, method='SLSQP', jac=jac_v, bounds=bnds)
print(rslts)
问题内容: 在lambda中,局部变量需要是最终变量,而实例变量则不需要。为什么这样? 问题答案: 字段和局部变量之间的根本区别在于,当JVM创建lambda实例时,将复制局部变量。另一方面,字段可以自由更改,因为对它们的更改也将传播到外部类实例(它们的范围是整个外部类,如Boris所指出的)。 考虑到匿名类,闭包和Labmdas的最简单方法是从可变范围的角度来看。想象一个为传递给闭包的所有局部变
如何确定流中对象的不同属性的最小值和最大值?我已经看到了关于如何得到同一变量的最小值和最大值的答案。我还看到了关于如何使用特定对象属性(例如)获取最小值或最大值的答案。但是我如何获得流中所有“x”属性的最小值和所有“y”属性的最大值呢? 假设我有一个Java
问题内容: 首先,我在python脚本中编写了以下代码: 我将其保存在一个名为 然后在命令窗口中编写以下命令: 运行此命令后,出现以下错误: 我本来希望得到这个: 有人可以告诉我如何解决这个问题吗? 问题答案: 使用PowerShell时,我遇到了相同的问题,该修复程序对我有效: 而不是使用,请尝试
问题内容: 在Linux上的环境变量中可以存储的数据量是否有限制,如果可以,它是什么? 对于Windows,我发现以下KB文章总结为:Windows XP或更高版本:8191个字符Windows 2000 / NT 4.0:2047个字符 问题答案: 我认为Linux上没有针对每个环境的变量限制。所有环境变量的总大小在execve()时受到限制。有关更多信息,请参见此处的“参数和环境大小的限制”
问题内容: 在许多Java源代码中(例如),我看到了类似的东西; 我了解基本模式(锁定,最终解锁),但是我的问题是, 为什么在使用它之前先对本地作用域的Lock变量进行赋值? 为什么这样做而不是以下内容? 它会影响优化吗?第一个示例可以防止锁变粗吗? 评论后编辑 :如果您真的不知道为什么会出现这种情况,请不要添加答案。这是从Java来源获得的,@author标记是Doug Lea,所以我很确定它的
问题内容: 我有一个程序,其中有一个用户可以编辑的文本框。当用户按下按钮时,将创建一个对话框,显示用户的文本和确认“是/否”选项。 这段代码可以正常工作,但是我的第一个版本无法编译。我的IDE抱怨我不应该创建字符串 ,而应该这样做。 这让我开始思考。在这种情况下会增加什么?例如,如果我选择保留对Dialog的引用,并通过另一种方法显示它,该怎么办?这意味着上面的方法将返回。那么变量如何持续存在呢?
下面的示例类无法编译: 此代码的编译错误消息是: 但是,对于包含以下方法的类,Java不会生成任何错误消息: 关于初始化及其要求,为什么Java对最终实例变量和最终局部变量的处理不同?谢谢
这是可能的吗,以及如何使用这样的逻辑进行一行(或短)var赋值: 我试图做到: 但得到一个错误:“运算符|未在字符串上定义”。 所以我来自JS,并试图实现: 但要“走” 由于它是静态类型的Lang,我的意思是如果b == " "(空字符串)