Попробовал создать небольшой скрипт, чтобы протестировать различные части скрипта polyRoots. Когда я попытался использовать функцию deflating poly, я получаю сообщение об ошибке. У них нет ничего сложного в этом коде, и я не уверен, почему он не работает.Python - объект 'function' не имеет атрибута 'deflPoly'
import polyRoots as pr
print("Deflation of polynomial: ")
print(pr.polyRoots.deflPoly([20, -36, 7, 3], -5))
Я получаю следующее сообщение об ошибке:
File "C:temp.py", line 13, in <module>
print(pr.polyRoots.deflPoly([20, -36, 7, 3], -5))
AttributeError: 'function' object has no attribute 'deflPoly'
Сценарий polyRoots книга код ресурса из численных методов для проектирования. Она заключается в следующем:
## module polyRoots
''' roots = polyRoots(a).
Uses Laguerre's method to compute all the roots of
a[0] + a[1]*x + a[2]*x^2 +...+ a[n]*x^n = 0.
The roots are returned in the array 'roots',
'''
from evalPoly import *
import numpy as np
import cmath
from random import random
def polyRoots(a,tol=1.0e-12):
def laguerre(a,tol):
x = random() # Starting value (random number)
n = len(a) - 1
for i in range(30):
p,dp,ddp = evalPoly(a,x)
if abs(p) < tol: return x
g = dp/p
h = g*g - ddp/p
f = cmath.sqrt((n - 1)*(n*h - g*g))
if abs(g + f) > abs(g - f): dx = n/(g + f)
else: dx = n/(g - f)
x = x - dx
if abs(dx) < tol: return x
print('Too many iterations')
def deflPoly(a,root): # Deflates a polynomial
n = len(a)-1
b = [(0.0 + 0.0j)]*n
b[n-1] = a[n]
for i in range(n-2,-1,-1):
b[i] = a[i+1] + root*b[i+1]
return b
n = len(a) - 1
roots = np.zeros((n),dtype=complex)
for i in range(n):
x = laguerre(a,tol)
if abs(x.imag) < tol: x = x.real
roots[i] = x
a = deflPoly(a,x)
return roots
Неопределенный, что вызывает эту ошибку, как это на самом деле только одна строка кода для каждого запроса дефляции. Пожалуйста, порекомендуйте.
Элементы обоих текущих ответов являются правильными и актуальными. Имена, определенные внутри функции, являются локальными для этой функции и не отображаются вне этой функции. Кажется, вы объединяете функции и классы Python (или, возможно, функции и модули). Я не думаю, что вы получите гораздо больше подробностей или объяснений, чем это у пользователей Stack Overflow (не потому, что они не хотят помогать, а потому, что ответ на этот тип вопроса, похоже, учит вас основам Python); попробуйте прочитать [tutorial] (https://docs.python.org/2/tutorial/). –