Что не так с моими кодами? функция замены работает только в первый раз. Я использовал sympy и определенные переменные. Он работал только один раз, а затем, когда я использую для l oop, он больше не работает. Пытался распечатать, что происходит.
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
[]