Numpy 数组索引问题

我正在尝试为多变量场景实现 Newtons_method。我正在尝试输出多次迭代,但出现索引错误


import symengine

from symengine import var

import numpy as np

vars =var("x y")

sol=[]

def jacob():

    f = ['2*x+y**2-8','x**2-y**2+x*y-3'] # Define function

    J = symengine.zeros(len(f),len(vars)) # Initialise Jacobian matrix

    # Fill Jacobian matrix with entries

    for i, fi in enumerate(f):

        for j, s in enumerate(vars):

            J[i,j] = symengine.diff(fi, s)

            sol.append(J[i,j])

    a = np.array([sol[0],sol[1],sol[2],sol[3]])

    return a


def eval1(func,val1,val2):

    z=[]

    for b in func:

        b=str(b)

        x=val1

        y=val2

        z.append(eval(b))

    return np.array([[z[0],z[1]],[z[2],z[3]]])



def newtons_method(f, df, x0, e):

    q=10

    while q > e:

        q=q-1

        x0 = np.absolute(x0 - (np.array([[f(x0[0][0])],[df(x0[1][0])]]))/(eval1(jacob(),x0[0][0],x0[1][0])))

    print('Root is at: ', x0)

    print('f(x) at root is: ', f(x0))



def f(x):

    return 2*x+y**2-8


def df(x):

    return x**2-y**2+x*y-3

x0s = np.array([[1],[1]])


for x0 in x0s:

    newtons_method(f, df, x0, 1)

我收到错误:标量变量的索引无效。 我在 newtons_method 函数下将值设置为 x0 的地方,对出了什么问题有什么想法吗?


慕少森
浏览 127回答 1
1回答

犯罪嫌疑人X

当调用 newtons_method 函数时,[[1],[1]] 即 [1] 的元素作为参数 x0 被传递。在函数内部,x0[0][0] 已被使用,它为标量变量错误提供了无效索引。如果您想同时使用这两个元素,您应该将 x0s 作为参数传递。x0s = np.array([[1],[1]]) newtons_method(f, df, x0s, 1)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python