Merlin - 10 months ago 103
Python Question

# How to use flag with scipy.optimize fsolve

This is a simplified version of code. When run with no flag, I get results.
But, when I use flags it throws errors. I need to run this code through fsolve. The code has been simplified.

Error: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

``````import numpy as np
from scipy.optimize import fsolve

price = np.array([39, 34, 29, 25, 21])
S     = np.repeat(300, len(price))
flag  = np.array([1, 1, 0, 1, 1])

def Val(S, flag = 0):
p = 4
if   flag == 0: p = S * flag
elif flag == 1: p = S * flag
return p

val = lambda x: Val(S, flag) - price
print fsolve(val, np.repeat(35, len(S)))
``````

Answer Source

This solves the problem:

``````    import numpy as np
from scipy.optimize import fsolve

price = np.array([39, 34, 29, 25, 21])
S     = np.repeat(300, len(price))
flag  = np.array([1, 1, 0, 1, 1])

def Val(S, flag = 0):
return np.where(flag, S + price, S - price )

val = lambda x: Val(S, flag) - price
print fsolve(val, np.repeat(35, len(S)))
``````