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

Python求解欠定非线性方程组时scipy.least_squares广播错误咨询

问题解答

1. 报错原因

你遇到的报错完全是参数传入和维度计算的逻辑错误,和least_squares是否支持欠定系统无关,具体错误有两处:

  • 初始值维度不匹配:你求解的是4个未知数的方程组,但调用least_squares时传入的初始猜测是长度为5的数组np.asarray((1,1,1,1,1)),维度直接对不上。
  • 自定义函数f的广播逻辑错误:你的Lins数组形状是(2,4,3)(2个方程、4个未知数对应多项式、3项系数),当输入x是长度为4的向量时,你构造的X没有对齐维度,导致两个数组无法广播相乘。

2. 欠定系统适配性说明

scipy.optimize.least_squares本身完全支持求解欠定非线性系统,它默认使用的TRF算法可以处理方程数少于未知数的场景,输出最小二乘意义下的最优解。

3. 修正后可运行代码

import numpy as np
from scipy.optimize import least_squares

# 原始输入系数
Lins = np.array([[[1, 2, 3], [4, 5, 6], [1, 5, 2], [5, 2, 6]], 
                 [[7, 2, 3], [4, 5, 6], [5, 8, 7], [2, 1, 4]]], np.int32)
b = np.array([52, 62])

# 修正后的方程组构造函数
def f(x):
    # x为长度4的向量,对应x1~x4
    X = np.array([x**2, x, np.ones_like(x)]).T  # 形状(4,3),每行对应一个未知数的[二次项,一次项,常数项]
    X = X[np.newaxis, :, :]  # 扩展维度为(1,4,3),匹配Lins的(2,4,3)广播规则
    return np.sum(Lins * X, axis=(1, 2))

# 修正初始值为4个1,调用求解器
x_sol = least_squares(lambda x: f(x) - b, np.ones(4), bounds=(0, 1)).x
print("求得的解x1~x4:", x_sol)
print("代入方程计算结果:", f(x_sol))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 06:54:05