我想最小化一个函数以获得一些参数'值:a,e,I,Omega,om,tp。
我使用这个"模块" :docs.scipy.org/doc/scipy/reference/generated/scipy.optimize.minimize.html。
我的功能有13个参数:
我已导入:from scipy.optimize import minimize
。然后我尝试将其最小化。并且发生错误:
有人会帮忙解决这个问题吗?
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
答案 0 :(得分:0)
最小化例程需要一个ndarray,比如说guess
作为初始函数参数,并接受一个额外的参数元组x0,这可能构成了你的成本函数中的系数。如果你重写CHI_VLT作为第一个arg和ndarray然后相应的剩余参数应该工作。
res = minimize(CHI_VLT, guess, args=x0,...)
答案 1 :(得分:0)
我猜你在这里弄乱了整个事情。
你的函数scipy.optimize.minimize
需要两个必要的位置参数,
fun
和x0
。
您需要ndarray
作为x0
在你的情况下,你的乐趣Chi_VLT
需要13个参数,你需要使用args=(tuple, containing, 13, items)
传递它
然后,只有你才能最大限度地减少你的乐趣。