You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

使用SymPy linsolve求解线性方程组得到EmptySet结果时,如何求解参数m?

解决SymPy linsolve返回EmptySet的问题,求参数m的值

嘿,我来帮你捋清楚这个问题!为啥你的b部分代码返回了EmptySet,以及该怎么正确求出m的值,我给你一步步拆解:

问题根源

你在b部分的代码里,是让linsolve同时求解**四个变量(x,y,z,m)**满足三个方程组,但实际上你想要的是已知x=1、y=2、z=3时,找到能让第三个方程成立的m值。直接把原方程组丢给linsolve解四个变量的话,前两个方程已经对x,y,z有明确约束,和第三个方程联立后没有公共解,所以返回了EmptySet。

正确的两种解法

方法1:直接代入已知值到目标方程求解

既然已经知道x、y、z的具体值,我们可以把它们代入第三个方程,转化为单变量方程求解m:

import sympy
x,y,z,m = sympy.symbols('x,y,z,m')

# 把x=1,y=2,z=3代入第三个方程
target_eq = x + 3*y + m*z - 4
m_solution = sympy.solve(target_eq.subs({x:1, y:2, z:3}), m)
print(m_solution)  # 输出: [-1]

方法2:构造只含m的方程组用linsolve求解

把已知的x、y、z值代入所有方程,前两个方程会变成恒等式(0=0),第三个方程变成关于m的方程,再用linsolve求解:

import sympy
from sympy.solvers.solveset import linsolve
m = sympy.symbols('m')

# 代入x=1,y=2,z=3后的方程组
ans2 = linsolve([1+2+3-6, 1-2+2*3-5, 1+3*2 + m*3 -4], m)
print(ans2)  # 输出: {-1}

补充说明

你之前a部分的代码能得到结果,是因为隐含了m=1的条件,linsolve可以找到满足所有方程的x,y,z,m组合;但b部分你没有把x,y,z的已知值代入方程,而是让求解器同时解四个变量,自然会因为方程组矛盾返回空集。

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

火山引擎 最新活动