Может ли 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
Другие вопросы по тегам