Может ли Python оптимизировать входные данные моей функции для получения целевого значения?
Я пытался найти метод, похожий на Solver в Excel, где я могу указать конкретное значение для функции, с которой нужно сходиться. Я не хочу минимальной или максимальной оптимизации.
Например, если моя функция: f(x) = A^2 + cos(B) - sqrt(C)
Я хочу, чтобы f(x) = 1,86, есть ли метод Python, который может выполнить итерацию решения для A, B и C, чтобы получить как можно ближе к 1,86? (учитывая допустимую ошибку для целевого значения?)
1 ответ
Решение
Вам нужен алгоритм поиска корня для вашей проблемы. Требуется только небольшое преобразование. Найдите корни для g (x):
g(x) = A^2 + cos(B) - sqrt(C) - 1.86
С помощью scipy.optimize.root
Обратитесь к документации:
import numpy as np
from scipy import optimize
# extra two 0's as dummy equations as root solves a system of equations
# rather than single multivariate equation
def func(x): # A,B,C represented by x ndarray
return [np.square(x[0]) + np.cos(x[1]) - np.sqrt(x[2]) - 1.86, 0, 0]
result = optimize.root(func , x0 = [0.1,0.1,0.1])
x = result.x
A, B, C = x
x
# array([ 1.09328544, -0.37977694, 0.06970678])
Теперь вы можете проверить свое решение:
np.square(x[0]) + np.cos(x[1]) - np.sqrt(x[2])
# 1.8600000000000005