scipy.optimize.minimize два разных вывода для одного и того же (?) ввода - PullRequest
0 голосов
/ 09 марта 2019

У меня есть функция func(x). Я хочу знать x для func(x)-7=0. Поскольку точного реального ответа нет, я подумал, что minimize будет хорошей идеей.

from scipy.optimize import minimize

def func(x): # testing function which leads to the same behaviour
    return (x * 5 + x * (1 - x) * (6-3*x) * 5)

def comp(x): #  comparison function which should get zero
    return abs(((func(x)) - 7))

x0 = 0.
x_real = minimize(comp, x0) # minimize comparison function to get x

print(x_real.x)

Последний print дает мне [ 0.7851167]. Следующие print ...

print(comp(x_real.x))
print(comp(0.7851167))

... приводит к различным выходам:

[  1.31290960e-08]
6.151420706146382e-09

Может кто-нибудь объяснить мне это поведение?

1 Ответ

0 голосов
/ 10 марта 2019

РЕДАКТИРОВАТЬ: Я думаю, что я понял ваш вопрос неправильно.Округление числа, как вы делали в операторах печати, очевидно, приведет к некоторым различиям (которые довольно малы (около 1e-9)).

Чтобы найти все x, вы должны применить некоторый метод глобального решения или начать сдругая начальная точка, чтобы найти все локальные минимы (как видно на графике).

У уравнения, однако, есть два решения.

def func(x): # testing function which leads to the same behaviour
    return (x * 5 + x * (1 - x) * (6-3*x) * 5)

import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(-0.1,1,100)
plt.plot(x, func(x)-7)
plt.plot(x, np.zeros(100))
plt.show()

Функция:

enter image description here

...