2017-10-02 5 views
0

Je sais qu'il y a beaucoup de messages similaires au mien mais je n'arrive pas vraiment à les appliquer à ma situation alors s'il vous plaît je demande votre aide. Au fond, mon code est le suivant:scipy.optimize.fim Erreur: besoin de plus d'1 valeur pour déballer

def Black_min(f, k, ann, vol, ex, cp): 
    d1=(math.log(f/k)+0.5*vol**2*ex)/math.sqrt(vol**2*ex) 
    d2=(math.log(f/k)-0.5*vol**2*ex)/math.sqrt(vol**2*ex) 
    Price=cp*(f*norm.cdf(cp*d1)-k*norm.cdf(cp*d2))*ann*20000 
    return Price 

banana = lambda x: (Price_Cube[0][4]-Black_min(F[0], K[0][4], Annuity[0], x, Expiry[0], CP[4]))**2 
xopt, fopt = scipy.optimize.fmin(func=banana, x0=[Vol_Cube[0][0]], disp=False) 

Price_Cube, K sont des listes de listes avec des numéros à l'intérieur, Rente, expiration et CP sont qu'énumérer. Quand je cours le code, j'obtiens ceci. Je suis conscient que c'est une erreur stupide, mais je ne le vois vraiment pas. Toute aide est appréciée, merci d'avance.

+0

ce qui est Vol_Cube – Harry

+0

Je Je suis désolé j'ai oublié. C'est une liste de listes avec des nombres à l'intérieur comme Price_Cube. – AndrewTG

Répondre

0

Le problème est que vous essayez d'affecter la valeur de retour de fmin à deux variables, xopt et fopt, mais par défaut fmin renvoie uniquement xopt. Vous devriez essayer

xopt = scipy.optimize.fmin(func=banana, x0=[Vol_Cube[0][0]]) 

Si vous souhaitez également la valeur de fonction au minimum, vous devez définir full_output-True, et vous obtenez également quelques autres diagnostics:

xopt, fopt, iter, funccalls, warnflags = scipy.optimize.fmin(func=banana, x0=[Vol_Cube[0][0]], full_output=True) 
+0

Merci beaucoup, avec votre aide j'ai résolu le problème. – AndrewTG