使用许多参数最小化功能

时间:2017-07-26 10:49:11

标签: python variables optimization minimize

我想最小化一个函数以获得一些参数'值:a,e,I,Omega,om,tp。

我使用这个"模块" :docs.scipy.org/doc/scipy/reference/generated/scipy.optimize.minimize.html。

我的功能有13个参数:

Function I want to reduce

我已导入:from scipy.optimize import minimize。然后我尝试将其最小化。并且发生错误:

Minimize code + error message

有人会帮忙解决这个问题吗?

PS:我在一周前开始使用python来解释这个程序的语法,但是我愿意提高自己。

from numpy import *
import numpy as np
import scipy as sp
from scipy.optimize import minimize
import matplotlib.pyplot as plt
from pylab import *
from os import chdir
chdir("/Users/benjaminjaillant/Desktop")

def Chi_VLT(a,e,I,tp,Omega,om,Mbh,R0,Vr_bh,alpha_bh,V_alp_bh,delta_bh,V_del_bh):
    return sum(((Vr_etoile(t_vr_VLT*365*24*3600,a,e,I,tp,om,Mbh,Vr_bh)/1000)-vr_VLT)**2/vr_error_VLT**2) + sum(((alpha_etoile_IR(t_orbit_VLT*365*24*3600,a,e,I,tp,Omega,om,Mbh,alpha_bh,V_alp_bh,R0)*206264806.246)-Ra_VLT)**2/Ra_error_VLT**2) + sum(((delta_etoile_IR(t_orbit_VLT*365*24*3600,a,e,I,tp,Omega,om,Mbh,delta_bh,V_del_bh,R0)*206264806.246)-Dec_VLT)**2/Dec_error_VLT**2)


x0 = [1.5e14,0.8,2.5,63.10e9,4,1,8.5e36,2.5e20,2000,1.3e-8,-10e-18,2e-9,1.5e-17]

res = minimize(Chi_VLT, x0 , method='nelder-mead',options={'xtol': 1e-4,'maxiter':50 ,'disp': True})

print res.message
print res.x

2 个答案:

答案 0 :(得分:0)

最小化例程需要一个ndarray,比如说guess作为初始函数参数,并接受一个额外的参数元组x0,这可能构成了你的成本函数中的系数。如果你重写CHI_VLT作为第一个arg和ndarray然后相应的剩余参数应该工作。

res = minimize(CHI_VLT, guess, args=x0,...)

答案 1 :(得分:0)

我猜你在这里弄乱了整个事情。

你的函数scipy.optimize.minimize需要两个必要的位置参数,  funx0

您需要ndarray作为x0

在你的情况下,你的乐趣Chi_VLT需要13个参数,你需要使用args=(tuple, containing, 13, items)传递它

然后,只有你才能最大限度地减少你的乐趣。