Выпуск индекса Numpy Array - PullRequest
0 голосов
/ 08 марта 2019

Я пытаюсь реализовать метод 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)

Я получаю ошибку: недопустимый индекс для скалярной переменной. Где я установил значение x0под функцией newtons_method, есть идеи, что происходит не так?

1 Ответ

0 голосов
/ 08 марта 2019

При вызове функции newtons_method элемент [[1], [1]], т.е. [1], передается в качестве параметра x0.Внутри функции используется x0 [0] [0], что дает недопустимый индекс ошибки скалярной переменной.

Вам следует передать x0s в качестве параметра, если вы хотите использовать оба элемента.

x0s = np.array([[1],[1]])
newtons_method(f, df, x0s, 1)
...