You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用scipy.optimize.minimize时遇非均匀形状ValueError的解决方案咨询

解决scipy.optimize.minimize中矩阵构造的ValueError问题

问题背景

尝试用scipy.optimize.minimize寻找函数取0时的x值,函数最终输出单个数值,但内部包含矩阵操作,运行时触发如下错误:

ValueError: setting an array element with a sequence. The requested array has an inhomogeneous shape after 1 dimensions. The detected shape was (6,) + inhomogeneous part.

报错原因

  1. 矩阵行长度不一致:构造矩阵A时,第二行[0 - 1, 4, 2*x, 0, 0]仅包含5个元素,而其他行都是6个元素,numpy无法生成形状均匀的二维数组,导致报错。
  2. 输入参数类型不匹配:scipy.optimize.minimize会将单变量的初始值x0转换为1维numpy数组传入目标函数,但example函数定义输入为float类型,直接使用会导致后续计算的变量成为数组,可能引发潜在问题。

修复方案

  • 修正矩阵A的第二行,补充一个元素(如0),确保每行都有6个元素,符合6x6矩阵的要求。
  • 在example函数开头将输入的数组x转换为标量,比如x = x.item(),适配函数内部的标量计算逻辑。
  • 调整x的取值下界,避免d = 14*np.sqrt(1/x)中出现除以0的情况,将bounds设为(1e-6, 10000)。

完整修复代码

import numpy as np
from scipy.optimize import minimize
from scipy.linalg import solve

def example(x) -> float:
    # 将minimize传入的数组x转换为标量
    x = x.item()
    a = 4
    b = 4*x
    c = 18*np.sin(x)
    d = 14*np.sqrt(1/x)

    # 修正第二行,补充一个0,确保每行6个元素
    A = np.matrix([[0, 0, 0, -1, 1, -1],
                   [0 - 1, 4, 2*x, 0, 0, 0],
                   [1, 3*x-4, 4, 18, 2, 0],
                   [0, 0, 1, 0, 0, 0],
                   [3*x, 2*a, b, d, 0, 0],
                   [0, 0, d, d-c, 0, 0]
                   ])

    b_vec = np.matrix([[0],
                       [0],
                       [b-c],
                       [c/d],
                       [4*a],
                       [b*a-c]
                       ])

    C1, C2, C3, C4, C5, C6 = np.squeeze(solve(A, b_vec))

    val = C1 * np.sin(a * 2) + C2 * c**2 + 4*C3*x**2 + d*C4 + C5*x + C6

    return val

func = lambda x: example(x)
# 调整下界避免除以0
result = minimize(func, x0=15, bounds=[(1e-6, 10000)])
print(result)

说明

修复后函数可正常运行,scipy.optimize.minimize能正常执行优化流程。注意矩阵构造时需严格保证每行元素数量一致,同时处理好minimize输入参数的类型转换,避免因数组与标量混合计算引发的问题。

内容的提问来源于stack exchange,提问作者ContourplotTroubles

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 11:50:31