Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python sympy替换只工作一次_Python_Sympy - Fatal编程技术网

Python sympy替换只工作一次

Python sympy替换只工作一次,python,sympy,Python,Sympy,我的代码怎么了? 替换函数仅在第一次使用时有效。 我使用了sympy和定义的变量。 它只工作了一次,然后当我使用for循环时, 它不再工作了。 我试着把发生的事情打印出来 x1, x2 = sym.symbols('x1 x2') t = sym.Symbol('t') f = 2.0*x1*x2 + 2.0*x2 - x1**2 - 2.0*x2**2 df1 = sym.diff(f, x1) df2 = sym.diff(f, x2) init1 = 0.5 init2 = 0.5 def

我的代码怎么了? 替换函数仅在第一次使用时有效。 我使用了sympy和定义的变量。 它只工作了一次,然后当我使用for循环时, 它不再工作了。 我试着把发生的事情打印出来

x1, x2 = sym.symbols('x1 x2')
t = sym.Symbol('t')
f = 2.0*x1*x2 + 2.0*x2 - x1**2 - 2.0*x2**2
df1 = sym.diff(f, x1)
df2 = sym.diff(f, x2)
init1 = 0.5
init2 = 0.5
def st(f, df1, df2, init1, init2):
  for i in range(2):
    grad1 = df1.subs([(x1,init1),(x2,init2)])
    grad2 = df2.subs([(x1,init1),(x2,init2)])
    print(grad1, grad2)
    t1 = init1 + grad1 * t
    t2 = init2 + grad2 * t
    print(f)
    func = f.subs([(x1, t1), (x2, t2)])
    print(f)
    print(func)
    dfunc = sym.diff(func, t)
    print(dfunc)
    s = np.asarray(solve(dfunc, t))
    init1 = init1+s*grad1
    init2 = init2+s*grad2
    print(init1)
st(f, df1, df2, init1, init2)
结果呢

0
0 1.00000000000000
-x1**2 + 2.0*x1*x2 - 2.0*x2**2 + 2.0*x2
-x1**2 + 2.0*x1*x2 - 2.0*x2**2 + 2.0*x2
3.0*t - 2.0*(1.0*t + 0.5)**2 + 1.25
-4.0*t + 1.0
[0.500000000000000]
1
0.500000000000000 0
-x1**2 + 2.0*x1*x2 - 2.0*x2**2 + 2.0*x2
-x1**2 + 2.0*x1*x2 - 2.0*x2**2 + 2.0*x2
-x1**2 + 1.5*x1 + 0.375
0
[]

如果将
s
行更改为
s=solve(dfunc,t)[0]
(使用Symphy的
solve
),您将获得

>>> st(f, df1, df2, init1, init2)
0 1.00000000000000
-x1**2 + 2.0*x1*x2 - 2.0*x2**2 + 2.0*x2
-x1**2 + 2.0*x1*x2 - 2.0*x2**2 + 2.0*x2
3.0*t - 2.0*(1.0*t + 0.5)**2 + 1.25
1.0 - 4.0*t
0.500000000000000
0.500000000000000 0
-x1**2 + 2.0*x1*x2 - 2.0*x2**2 + 2.0*x2
-x1**2 + 2.0*x1*x2 - 2.0*x2**2 + 2.0*x2
0.75*t - 0.25*(t + 1)**2 + 1.125
0.25 - 0.5*t
0.750000000000000
我怀疑转换
np
对象时出现了一些问题。通过获取
[0]
解算
结果,您将只处理SymPy表达式