Ввод (из файла):
x^2-x+2,
x^3-1,
-2 2
Требуемый вывод:
intersection: (1.5747,2.9051)
Мне нужно сначала вычислить пересечение координат x, y между двумя математическими функциями, используя алгоритм Ньютона-Рефсона, сначала Я ввожу данные из файла, затем использую func_sum
для вычисления двух функций f
и g
и отправляю функцию h
(res * f
и g
) в функцию NR
, чтобы найти root. Я не уверен, что делаю все правильно, я пытаюсь найти решение.
import random
def diff(f):
''' returns the numeric derivative of f '''
h = 0.000001
return (lambda x: (f(x+h)-f(x))/h)
def NR(f, epsilon=10**(-10), n=100):
''' finds an approximation to a root of
f using the Newton Raphson method '''
deriv = diff(f)
x0 = random.uniform(-10, 10)
while (abs(deriv(x0))<epsilon):
x0 = random.uniform(-10, 10)
x=x0; y=f(x); count=1
print("{0}. x={1}, f(x)={2}".format(count,x,y))
while(abs(y) > epsilon and count <= n):
count += 1
y=f(x)
x = x - y/deriv(x)
print("{0}. x={1}, f(x)={2}".format(count,x,y))
if count > n:
return None
return (lambda a,b : x in range(a,b))
def func_sum(f_Func, g_Func):
''' function calculate the sum of f and g '''
def h(x):
return f_Func(x) + g_Func(x)
return h
def main():
f=open('input.txt','r')
line=f.read().split('\n')
f_Func = eval('lambda x:'+ line[0]) # f(x)
g_Func = eval('lambda x:'+ line[1]) # g(x)
h_Func = func_sum(f_Func,g_Func)
# f(h) = f(x)+ g(x)
limts = line[2].split()
a = int(limts[0]) ; b = int(limts[1]) # a b are limits
print('intersection: ', NR(h_Func)(a,b))
main()