牛顿法在数组中声明具有变化系数的函数

时间:2019-10-20 17:20:21

标签: python python-3.x

因此,在解决贝曼方程式时,我没有几个问题。

我有一个功能。 我有一个用作二维网格的矩阵(例如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)
  • 在任何情况下,牛顿函数都不能将x视为未知数。它说 没有定义。

0 个答案:

没有答案