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

求解含3个未知数的二元方程组:Numpy代码错误求助

问题分析与解决方案

一、NumPy代码错误排查

你的代码报错的核心原因:

  • 这是2个方程、3个未知数的欠定线性系统,不存在唯一解
  • np.linalg.inv()仅支持处理方阵(行数=列数),而你的M1是2行3列的非方阵,无法执行求逆操作

正确的NumPy求解方式

对于欠定系统,可通过伪逆或最小二乘法获取其中一个特解,示例代码:

import numpy as np

M1 = np.array([[10., 5., 0.5], [1., 1., 1.]])                        
v1 = np.array([100., 100.])

# 方法1:伪逆求解
pinv_M1 = np.linalg.pinv(M1)
solution = pinv_M1.dot(v1)
print("伪逆求解的一个特解:", solution)

# 方法2:最小二乘法求解
solution_lstsq, _, _, _ = np.linalg.lstsq(M1, v1, rcond=None)
print("最小二乘解:", solution_lstsq)

注:两种方法得到的都是无穷多解中的一个,若题目隐含非负整数要求(比如实际场景中的物品数量),需要额外筛选。

二、for循环实现方案(针对非负整数解场景)

这类方程组通常对应实际问题,要求x、y、z为非负整数,可通过双层循环遍历验证:

# x的最大可能值:10x ≤100 → x≤10
for x in range(0, 11):
    # y的最大可能值:5y ≤100-10x → y≤20-2x
    for y in range(0, 21 - 2*x):
        z = 100 - x - y
        # 验证第一个方程
        if 10*x + 5*y + 0.5*z == 100:
            print(f"找到非负整数解:x={x}, y={y}, z={z}")

运行后会得到唯一符合要求的解:x=1, y=9, z=90

补充:通解推导(无整数限制时)

从第二个方程得 z=100-x-y,代入第一个方程化简后得到:

19x + 9y = 100

因此通解为:x=t,y=(100-19t)/9,z=100 - t - (100-19t)/9(t为任意实数,若要求非负则需满足对应约束条件)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 02:18:18