J'essaye d'écrire une fonction pour résoudre le problème d'une variable d'une autre fonction en python, un peu comme ce que fait le solveur Excel. Pour simplifier mon exemple, j'ai une fonction qui prend en compte plusieurs variables puis calculer un prix. Je transmettrai des valeurs réelles (a, b, c, d, x) dans cette fonction afin qu'elle renvoie une valeur numérique.retour résoudre pour une variable en utilisant python
def calc_price(a,b,c,d,x):
value = a+b*c-d + x
return value
Maintenant, on me donne un prix cible, et a, b, c, d. Seule inconnue est la variable x, donc je veux revenir à la variable x. Je veux construire ceci dans une fonction qui prend dans les mêmes variables que calc_price, avec une variable supplémentaire target_price.
def solve(target_price, a,b,c,d):
#this function takes in values for target_price, a,b,c,d
#and should do something like this:
target_price = calc_price(a,b,c,d,x)
solve for x <---------this is the part I'm not sure how to do
return x
J'ai créé une fonction comme ceci ci-dessous pour revenir résoudre la valeur x par une boucle, mais il est inefficace dans le calcul de grands ensembles de données, donc je suis à la recherche d'une solution plus efficace.
def solve(target_price,a,b,c,d):
x = 0.01
while x < 1:
if abs(target_price - calc_price(a,b,c,d,x)) < 0.001:
return x
x += 0.001
Merci!
[scipy.optimize.minimize_scalar] (https://docs.scipy.org/doc/scipy-0.19.1/reference/generated /scipy.optimize.minimize_scalar.html). Ce sera l'étalon-or (en méthodes numériques, chercher des systèmes d'algèbre informatique pour l'autre monde, pas nécessairement recommandé). Si c'est un code trop lourd/lib-dépendance: recherchez root-finding et co. – sascha
@sascha, ne vous voulez pas dire la norme 'Golden' :-) https://docs.scipy.org/doc/scipy-0.19.1/reference/optimize.minimize_scalar-golden.html –
Assez sympa Stuart. Mais je voudrais utiliser brent (au moins quand quelqu'un l'a déjà mis en œuvre pour moi) :-) – sascha