你能解出你能计算的大多数东西,例如用二等分法…:def bisection(f, a, b, TOL=0.001, NMAX=100):
"""
Takes a function f, start values [a,b], tolerance value(optional) TOL and
max number of iterations(optional) NMAX and returns the root of the equation
using the bisection method.
"""
n=1
while n<=NMAX:
c = (a+b)/2.0
# decomment to learn more about the process
# print "a=%s\tb=%s\tc=%s\tf(c)=%s"%(a,b,c,f(c))
if f(c)==0 or (b-a)/2.0 < TOL:
return c
else:
n = n+1
if f(c)*f(a) > 0:
a=c
else:
b=c
return None
def solve(y, call_strike, call_premium, n, put_strike, put_premium):
cost = y * call_premium + n * put_premium
def net(fp):
call_profit = max(fp-call_strike, 0)
put_profit = max(put_strike-fp, 0)
tot_profit = call_profit * y + put_profit * n
return tot_profit - cost
return bisection(net, 0, 2 * max(call_strike, put_strike))
if __name__ == '__main__':
# an example...:
print solve(12, 20.0, 3.0, 15, 25.0, 2.0)