Python 多参数极小化函数
我想最小化一个函数,以获得一些参数的值:a,e,I,ω,om,tp 我使用这个“模块”:docs.scipy.org/doc/scipy/reference/generated/scipy.optimize.minimize.html 我的函数有13个参数: 我从scipy导入:Python 多参数极小化函数,python,variables,optimization,minimize,Python,Variables,Optimization,Minimize,我想最小化一个函数,以获得一些参数的值:a,e,I,ω,om,tp 我使用这个“模块”:docs.scipy.org/doc/scipy/reference/generated/scipy.optimize.minimize.html 我的函数有13个参数: 我从scipy导入:。优化导入最小化。然后我尝试将其最小化。然后出现错误: 有人能帮忙解决这个问题吗 PS:我一周前开始使用python,这可以解释程序的语法,不过我愿意改进自己 from numpy import * import n
。优化导入最小化
。然后我尝试将其最小化。然后出现错误:
有人能帮忙解决这个问题吗
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
最小化例程需要一个ndarray,比如
guess
,作为初始函数参数,并接受一个额外的参数元组x0,它可能构成代价函数中的系数。如果你重写CHI_VLT,将其作为第一个arg和一个ndarray,然后将其余的参数作为第一个arg和一个ndarray,那么它应该可以工作
res = minimize(CHI_VLT, guess, args=x0,...)
我猜你是在搞乱整件事 函数
scipy.optimize.minimize
接受两个必需的位置参数,
fun
和x0
您需要ndarray
asx0
在您的例子中,您的funChi_VLT
需要13个参数,您需要使用args=(tuple,containing,13,items)
那么只有你才能最小化你的乐趣。大家好:),我不知道如何编辑我的帖子。Î就在这里,在标签下面,请发布你函数的代码,而不是图片所有代码??阅读它不会太复杂吗?我们只需要相关且可复制的部分。从外观上看,优化器试图使用单参数x0(列表…)而不是其内容调用函数。您可以先尝试将x0转换为所需类型的nd数组。谢谢,伙计,我尝试过了,但现在的问题是:TypeError:minimize()最多需要12个参数(给定16个),我不知道python是如何工作的!谢谢,你的意思是我必须写:最小化(Chi_VLT,x0,args=(a,e,i…(13个参数)),方法='nelder-mead')?是的。没关系。我写道:x0=(1.5e14,0.8,2.5,63.10e9,4,1,8.5e36,2.5E202000,1.3e-8,-10e-18,2e-9,1.5e-17)res=最小化(Chi_VLT,x0,args=(a,e,I,tp,Omega,om,Mbh,R0,Vr_bh,alpha_bh,V_alp bh,delta_bh,V_del bh),V_bh),method='nelder-mead-options=(a,e,e,e,e,I,I,I,I,I,I,I,I,I,I,I,I,I,I,I,I,I,I,I,I,I,I,I,I,I,I,I,I,I,I,I,根据“a”、“e”程序。。没有定义