LINUX.ORG.RU
ФорумTalks

Обратная функция

 , ,


1

3

Работаю с python (scipy, numpy).

Есть у меня функция y = f(x). Мне надо найти x, при котором производная y' = a.

Если б я мог найти обратную функцию, то это было бы легко, но я не могу найти как это сделать. Помогите плиз.

Перемещено tailgunner из science

Не знаю ваших сай- и нумпаев, да и информации маловато. Но если в лоб,

x = x0
while x < x1:
    if abs((f(x+dx) - f(x)) / dx - a) < epsilon:
        break
    x += dx
print x

Отрезок и точность по вкусу.

JaneDoe
()
Ответ на: комментарий от lu4nik

f(x) задана как угодно. Ну допустим аналитически (хотя в общем случае это функция после интерполяции или апроксимации).

Closius
() автор топика
Ответ на: комментарий от JaneDoe

Это понятно конечно. Но в питоне этот код может долго работать (при увеличении точности), поэтому и думаю может что-то такое есть в scipy так как там на С написано, не хочу изобретать велосипед.

Closius
() автор топика
Ответ на: комментарий от Closius

Если почти в лоб:

block_count = 0
block_size = 100
for i in range(0, block_count):
  x1 = numpy.array(range(i * 100, (i+1)*100, dx))
  x2 = x1 + dx
  values = numpy.abs((f(x1) - f(x2)) / dx - a)
Но выигрыш будет только от числодробления в numpy, да

alex4321
()
Ответ на: комментарий от alex4321

И разумеется - эту f ещё надо написать так, чтобы оно использовало по большей части возможности numpy. Ну и до кучи c range наверняка ошибся.

alex4321
()

Загуглил в сайпай. Как-то так.

from scipy.misc import derivative
from scipy.optimize import fsolve

def g(x):
     return derivative(f, x, dx=1e-3) - a

print(fsolve(g, some_guess))

Правда, я все равно не понимаю, зачем тебе обратная функция, если только не нужно решать уравнение для многих a. Но поиск обратной по сути — это и есть решение того же уравнения. Так что если все-таки надо обращать — только аналитически и вручную. Ну или с помошью какой-нибудь maxima/axiom/etc.

JaneDoe
()
Ответ на: комментарий от Closius

(хотя в общем случае это функция после интерполяции или апроксимации).

И кто тебе мешает эту функцию аналитически продифференцировать, а потом просто решить уравнение f'(x)=a численно?

Зачем тебе вообще обратная?

dikiy ★★☆☆☆
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.