因此,在解决贝曼方程式时,我没有几个问题。
我有一个功能。 我有一个用作二维网格的矩阵(例如30 * 30)。对于每个网格值,函数的系数都会改变。对于每种情况的网格,我需要实现牛顿方法。
我认为有两种方法,(1)在函数之前声明函数和派生函数并实现牛顿算法。 (2)使用Sympy。但是事实证明,这两种方法都无法处理网格中系数变化的部分。
问题是当我用“ x”变量以外的参数声明函数时,牛顿方法不能将x视为未知数。
我附上了一些失败的审判。以一维数组作为测试用例。
#### Failed trial 1 ###
const = np.array([2, 1, 2])
def f(x):
global const, i
return (x**2 + const[i]*x)
def f_prime(x):
global const, i
return (2*x + const[i])
def main():
root = np.zeros(3)
for i in range(0, len(const)):
root[i] = optimize.newton(f, 0, fprime=f_prime)
return root
root = main()
print(root)
### Failed trial 2 with Sympy ####
def main():
for i in range(0, len(const)):
const = np.array([2, 1, 2])
x = symbols('x')
f = x**2 + const[i]*x
f_prime = 2*x + const[i]
root[i] = optimize.newton(f, 0, fprime=f_prime)
return root
root = main()
print(root)