当输入和输出中存在变量时,使用矩阵符号求解线性系统

Solving a linear system using matrices symbolically when variables are present in the input and output

我想使用 Sympy 来象征性地求解线性方程组,但我在某些地方有 0,这导致 linsolve 失败。

[1]: https://i.stack.imgur.com/vcGD4.png

import sympy as sp
a0,a1,b0,b1 = sp.symbols("a_0 a_1 b_0 b_1")
system = (sp.Matrix([[1,0],[1,1],[0,1],[0,0]]),sp.Matrix([a0,a1,sp.S.Zero,sp.S.Zero]))
print(sp.linsolve(system,[b0,b1]))
#Returns the empty set

我明白为什么会出现问题,Sympy 试图根据输入 b_0 和 b_1 来解决这个系统,但是由于这个矩阵在技术上不一致,所以没有解决方案。但是,如果尝试从输出的角度求解,则存在有效解,即 a_0 = b_0、a_1 = a_0 和 b_1 = 0。

我不知道“从输出的角度来看”是什么意思。这些是你的方程式:

In [20]: A, b = system

In [21]: lhs = A*Matrix([x, y])

In [22]: equations = [Eq(lhs[i], b[i]) for i in range(4)]

In [23]: for eq in equations:
    ...:     pprint(eq)
    ...: 
x = a₀
x + y = a₁
y = 0
True

最后一个等式清楚地表明我们需要 y=0,但前两个等式暗示 y=a1-a0。由于对于 a1a0 的几乎所有可能值,我们都有 a1-a0 != 0 它遵循对于几乎所有参数值,系统没有解决方案。

如果您希望 SymPy 找到例如的值a0a1 以便有一个解决方案然后你可以使问题中未知数的那些部分:

In [25]: linsolve(equations[:3], [x,y,a0,a1])
Out[25]: {(a₁, 0, a₁, a₁)}

这表示您可以为 a1 的任何值提供 a0=a1 的解决方案。解决方案将是 x=a1y=0.