Я получаю ValueError при написании графика метода для метода Ньютона - PullRequest
0 голосов
/ 21 января 2020

У меня есть задание для школы. Прежде всего, вы можете помочь мне подтвердить, что я правильно понял вопрос? А также код кажется несколько хорошо? До этого были другие задачи, такие как создание класса с двухмерной функцией, запись метода Ньютона и так далее. А теперь этот вопрос. Я еще не закончил программировать, но я немного застрял и чувствую, что не знаю точно, что делать. На чем мне запустить мой метод Ньютона? По пункту P. Создаю ли я его так, как сделал в методе Plot?

Это вопрос:

Напишите график метода, который проверяет зависимость метода Ньютона от нескольких начальных векторов x0. Этот метод должен отобразить то, что описано в следующих шагах:
• С помощью команды meshgrid установить сетку из N2 точек в наборе G = [a, b] × [c, d] (параметры N , a, b, c и d - параметры методов). Вы получаете две матрицы X и Y, где указанная c точка сетки определена как pij = (Xij, Yij)

class fractals2D(object):
Allzeroes = []       #a list to add all stored values from each run of newtons method
def __init__(self,f, x):
    self.f=f
    f0 = self.f(x)          #giving a variable name with the function to use in ckass
    n=len(x)               #for size of matrice
    jac=zeros([n])        #creates an array to use for jacobian matrice
    h=1.e-8                 #to set h for derivative
    self.jac = jac
    for i in range(n):     #creating loop to take partial derivatives of x and y from x in f
        temp=x[i]  
        #print(x[i])
        x[i]=temp +h        #why setting x[i] two times?  
        #print(x[i])
        f1=f(x)
        x[i]=temp
        #print(x[i])
        jac[:,i]=(f1-f0)/h
def Newtons_method(self,guess):
    f_val = f(guess)
    self.guess = guess

    for i in range(40):


        delta = solve(self.jac,-f_val)
        guess = guess +delta
        if norm((delta),ord=2)<1.e-9:
            return guess    #alist for storing zeroes from one run
def ZeroesMethod(self, point):
    point = self.guess
    self.Newtons_method(point)             
                  #adds zeroes from the run of newtons to a list to store them all
    self.Allzeroes.append(self.guess)
    return (len(self.Allzeroes))          #returns how many zeroes are found 

def plot(self, N, a, b, c, d):
    x = np.linspace(a, b, N)
    y = np.linspace(c, d, N)
    P = [X, Y] = np.meshgrid(x, y)
    return P    #calling ZeroesMethos with our newly meshed point of several arrays







x0 = array([2.0, 1.0])    #creates an x and y value?  
x1= array([1, -5]) 
a= array([2, 8])
b = array([-2, -6])



def f(x):
    f = np.array(
            [x[0]**2 - x[1] + x[0]*cos(pi*x[0]),
             x[0]*x[1] + exp(-x[1]) - x[0]**(-1)])

Это сообщение об ошибке, которое я получаю:

delta = решить (self.ja c, - f_val) TypeError: неверный тип операнда для унарного -: 'NoneTyp

...