首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Python出现返回值错误,最大化拉格朗日函数求解出现ValueError: The user-provided objective function must return a scalar value?

Python出现返回值错误,最大化拉格朗日函数求解出现ValueError: The user-provided objective function must return a scalar value?

提问于 2024-03-10 17:16:28
回答 0关注 0查看 42

import numpy as np

from scipy.optimize import minimize

# 定义混合水样的实测组分

y = np.array([[33.99],      

    [-90.40],

    [-11.10]])  # 实测组分

# 定义参考端元水样的浓度

F = np.array([[101.80,-82.20,-9.40],

 [141.60,-97.50,-12.70],

[45.24,-100.00,-13.70 ]])

# 定义误差协方差矩阵,这里假设误差是正态分布的

# 计算协方差矩阵

A = np.cov(y)

# 定义拉格朗日函数

def lagrange_function(delta, lambd):

L_p = np.exp(-0.5 * np.dot(np.dot((y - np.dot(F.T, delta)).T, np.linalg.inv(A)), (y - np.dot(F.T, delta)))) - lambd * (np.dot(delta.T, np.ones(len(delta))) - 1)

return -L_p # 负号是因为我们使用优化库的最小化函数

# 初始化拉格朗日乘子

lambda_p = 0

# 定义约束条件

constraint = ({'type': 'eq', 'fun': lambda delta: np.sum(delta) - 1})

# 初始化混合比

initial_delta = np.ones(F.shape[0]) / F.shape[0]

# 最大化拉格朗日函数

result = minimize(fun=lambda delta: lagrange_function(delta, lambda_p), x0=initial_delta, constraints=constraint)

# 输出最优混合比

optimal_delta = result.x

print("Optimal mixing ratios:", optimal_delta)

回答

和开发者交流更多问题细节吧,去 写回答
相关文章

相似问题

相关问答用户
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档