Найти область функции, учитывая ее корень

Мне нужна помощь в написании метода, который получает функцию и некоторое число у и возвращает х такой, что 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,

Другие вопросы по тегам