#python #local-variables #newtons-method
#python #локальные переменные #метод ньютонов
Вопрос:
У меня есть задание, в котором я должен выяснить, сходятся ли некоторые значения для x_0, но мой код, похоже, выдает несвязанную локальную ошибку, когда я проверяю значения выше 0,5.
import numpy as np
from sympy import *
import sympy
from math import atan
from scipy import misc
x = symbols('x')
def f(x):
return atan(x) 1
def newton(x):
if f(x) > 0:
x_new = x - (f(x)/misc.derivative(f, x))
return x_new
def newton_iter(x, tol):
error = abs(f(x))
iterasjoner = 0
while error > tol and iterasjoner < 10000:
try:
x = newton(x)
except OverflowError:
print("Kan ikke konvergere")
break
error = abs(f(x))
iterasjoner = 1
print(f"Antall iterasjoner: {iterasjoner}, error: {error}")
print(f"Konvergerer etter {iterasjoner} iterasjoner")
newton_iter(1.2, 10e-6)
#print(newton(1.2))
и я продолжаю получать:
File "C:line 39, in <module>
newton_iter(1.2, 10e-6)
File "C: line 29, in newton_iter
x = newton(x)
File "C:, line 22, in newton
return x_new
UnboundLocalError: local variable 'x_new' referenced before assignment
Что я делаю не так?
Ответ №1:
Вы не определяете переменную во всех случаях. Если f(x) не является положительным, вы его не устанавливаете. Вы не можете ссылаться на значение для возврата. Вам нужно обработать другой случай:
def newton(x):
if f(x) > 0:
x_new = x - (f(x)/misc.derivative(f, x))
else:
# Do something to set x_new
return x_new