当输入和输出中存在变量时,使用矩阵符号求解线性系统
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
。由于对于 a1
和 a0
的几乎所有可能值,我们都有 a1-a0 != 0
它遵循对于几乎所有参数值,系统没有解决方案。
如果您希望 SymPy 找到例如的值a0
和 a1
以便有一个解决方案然后你可以使问题中未知数的那些部分:
In [25]: linsolve(equations[:3], [x,y,a0,a1])
Out[25]: {(a₁, 0, a₁, a₁)}
这表示您可以为 a1
的任何值提供 a0=a1
的解决方案。解决方案将是 x=a1
和 y=0
.
我想使用 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
。由于对于 a1
和 a0
的几乎所有可能值,我们都有 a1-a0 != 0
它遵循对于几乎所有参数值,系统没有解决方案。
如果您希望 SymPy 找到例如的值a0
和 a1
以便有一个解决方案然后你可以使问题中未知数的那些部分:
In [25]: linsolve(equations[:3], [x,y,a0,a1])
Out[25]: {(a₁, 0, a₁, a₁)}
这表示您可以为 a1
的任何值提供 a0=a1
的解决方案。解决方案将是 x=a1
和 y=0
.