Найти область функции, учитывая ее корень
Мне нужна помощь в написании метода, который получает функцию и некоторое число у и возвращает х такой, что f(x) = y
, Функция дифференцируема с использованием метода Ньютона:
from random import *
def diff_param(f,h=0.001):
return (lambda x: (f(x+h)-f(x))/h)
def NR(func, deriv, epsilon=10**(-8), n=100, x0=None):
""" returns a number such that f(number) == 0"""
if x0 is None:
x0 = uniform(-100.,100.)
x=x0; y=func(x)
for i in range(n):
if abs(y)<epsilon:
#print (x,y,"convergence in",i, "iterations")
return x
elif abs(deriv(x))<epsilon:
#print ("zero derivative, x0=",x0," i=",i, " xi=", x)
return None
else:
#print(x,y)
x = x- func(x)/deriv(x)
y = func(x)
#print("no convergence, x0=",x0," i=",i, " xi=", x)
return None
Мне нужно написать метод source(f,y)
который возвращает x
такой, что f(x) = y
,
def source(f,y):
1 ответ
Решение
Вам нужно найти нули g(x) = f(x)-y:
def source(f,y):
def g(x):
return f(x)-y
x = NR(g, diff_param(g))
return x
Это возвращает один x
, но могут быть и другие. Чтобы найти их, вам нужно попробовать другие начальные значения x0
,