首页 > 解决方案 > 如何最小化 Python 中 for 循环生成的多参数函数?

问题描述

我想最小化函数 (loglikely_ftn(x, *data, t)) 但有错误(表达式不能包含赋值)。loglikely_ftn 需要数据中的一对参数来求和所有 log_prob(x, i, j, t)。i, j 是参数,t 是固定值。

def loglikely_ftn(x, *data, t):
    c =[*data]
    n=int(len(c)/2)
    ndata = zip(c[:n], c[n:])
    s = 0
    for i,j in ndata:
        f = log_prob(x, i, j, t)
        s += f
    return s

log_prob 只是具有 3 个参数的 x 函数。

def log_prob(x, measurement_output, param_mes, t):
        l = -1 * np.log(1/2 + ((-1)**(measurement_output)) * 1/2 *((np.cos(t))*(np.cos(param_mes)) - (np.sin(x[0]))*(np.cos(x[1]))*(np.sin(param_mes))*(np.sin(t))))
        return l

我正在尽量减少喜欢;

Data_output=[1,0,1,0]
Data_mes =[2,3,4,5] 
data = Data_output + Data_mes

x0=[random.random() * np.pi, random.random() * 2 * np.pi  ]
res = minimize(loglikely_ftn, x0, args=(*data, t=2), bounds = [(0, np.pi),(0, 2* np.pi)])

但是有 SyntaxError: expression cannot contain assignment,也许你的意思是“==”?

我需要知道(1)有没有更好的方法来制作 loglikely_ftn?(2) 如何正确分配参数?

标签: pythonfor-loopzipargsminimize

解决方案


推荐阅读