Я пытался закодировать в методе обратного Эйлера, и я почти уверен, что близок к завершению. Однако я не знаю, почему я получаю эту ошибку о умножении последовательности на число с плавающей точкой. Тем более, что я успешно использовал похожую строку кода для метода forward. Кроме того, я почти уверен, что в этом выражении ничего не содержится в списке . Может кто-нибудь помочь, пожалуйста?
t=Symbol('t')
u=Symbol('u')
def backwardEuler(f, t0, tN, u0, h):
tlist = [t0+h]
ulist = [u0]
t=Symbol('t')
u=Symbol('u')
f = lambdify([t,u], f)
iterations = (tN-t0)/h
for i in range(int(iterations)):
expression = ulist[i] + h*(f(tlist[i],u))
eqn = Eq(expression, u)
u = solve(eqn)
ulist.append(u)
t = t0+h*(i+2)
tlist.append(t)
approx = ulist[-1]
print(approx)
backwardEuler(-3*t*u-u**2, 1, 2, 0.5, 0.1)
backwardEuler(-3*t*u-u**2, 1, 2, 0.5, 0.05)
backwardEuler(-3*t*u-u**2, 1, 2, 0.5, 0.025)