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

如何使用Python求解乘法形式的非线性方程组?

求解乘法型非线性方程组的Python实现方案

可以实现,根据你的场景可选择两种不同的方案:

方案1:对数转换为线性方程组求解(仅适用于所有系数、未知量、右侧值均为正数的场景)

乘法运算取对数后可直接转换为加法运算,完全适配你之前用的np.linalg.lstsq求解逻辑,运算速度快、结果稳定,不需要调整参数。

原理说明

对乘法等式两边同时取自然对数,即可把乘积转为加和:
比如你的示例方程组3x*4y = 19、2x*2y=23,取对数后变为:

ln(3) + ln(x) + ln(4) + ln(y) = ln(19)
ln(2) + ln(x) + ln(2) + ln(y) = ln(23)

转换后即为关于ln(x)、ln(y)的线性方程组,求解后取指数即可得到原未知量的值。

适配你的11维场景的代码逻辑

import numpy as np
# 对系数矩阵和右侧向量取对数
ln_A = np.log(A)
ln_b = np.log(b)
# 构造转换后的线性方程组求解ln(x)
# 可根据你的乘积规则调整构造逻辑,求解后取exp得到x
ln_x = np.linalg.lstsq(ln_A, ln_b - np.sum(ln_A, axis=1), rcond=None)[0]
x = np.exp(ln_x)

方案2:通用非线性求解器求解(支持未知量为负、为0的所有场景)

如果你的场景存在负数或0,无法取对数,可以用scipy.optimize提供的非线性求解工具直接求解,不需要做公式转换。

示例代码(以你给出的2变量场景为例)

import numpy as np
from scipy.optimize import fsolve

# 定义残差函数:把所有等式移项为 左侧乘积 - 右侧值,求解目标是让残差为0
def equations(vars):
    x, y = vars
    eq1 = 3 * x * 4 * y - 19
    eq2 = 2 * x * 2 * y - 23
    return [eq1, eq2]

# 设置初始猜测值,11维场景可直接传入np.ones(11)
init_guess = [1, 1]
# 求解得到未知量
x, y = fsolve(equations, init_guess)

注意事项

  • 非线性方程组可能存在无解、多解的情况,最终求解结果和初始猜测值有关,可根据你的业务场景调整初始值拿到符合预期的解
  • 11维的求解规模很小,不需要担心性能问题

内容的提问来源于stack exchange,提问作者Waqar ul islam

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 18:45:03