查找欠定线性系统中哪些变量是自由的
Find which variables are free in underdetermined linear system
我有一个欠定的线性方程组。例如,这可以通过 SimPy 解决,其中解决方案是一些自由变量的函数。我正在寻找的是那些自由变量。这组变量不是唯一的,但一个选项就足够了。例如
[1 0 1] [x1] = [1]
[0 1 0] [x2] = [1]
[x3]
这里,x2
由第二个方程决定,x1
或x3
都可以作为自由变量。因此,例如集合 {x1}
是我的问题
的有效解决方案
找到它的一种方法是使用 SymPy 并解析解决方案以查找其中使用了哪些变量。这比较麻烦。有更好的方法吗?最好没有任何符号计算(返回自由变量的索引)。
这里问了同样的问题,但没有回答,因为原来提问者想问别的问题:How to determine which one is free variable in the result of sympy.linsolve
他只是想要一个单一的系统解决方案。我想知道自由变量,甚至不需要知道解决方案。
这与 类似,不同之处在于您要求的是自由变量,这些变量对应于我们为列 space 选择基础后剩余的列。因此,集合差异将一个问题减少到另一个问题。这是一个矩阵稍微复杂的例子:
import numpy as np
from scipy.linalg import lu
M = np.array([[1, 1, 0, 1], [0, 0, 1, 0], [0, 0, 7, 0]])
U = lu(M)[2]
basis_columns = {np.flatnonzero(U[i, :])[0] for i in range(U.shape[0])}
free_variables = set(range(U.shape[1])) - basis_columns
答案:{1, 3}
。
注意:所有这些都对浮点错误很敏感,因此如果您在输入中有精确的有理数并希望原样保留它们,SymPy 仍然是首选。
不确定这是否准确,但我认为自由变量是 echelon form 中非关键元素的系数不为零的任何变量,以及它描述的变量。
我有一个欠定的线性方程组。例如,这可以通过 SimPy 解决,其中解决方案是一些自由变量的函数。我正在寻找的是那些自由变量。这组变量不是唯一的,但一个选项就足够了。例如
[1 0 1] [x1] = [1]
[0 1 0] [x2] = [1]
[x3]
这里,x2
由第二个方程决定,x1
或x3
都可以作为自由变量。因此,例如集合 {x1}
是我的问题
找到它的一种方法是使用 SymPy 并解析解决方案以查找其中使用了哪些变量。这比较麻烦。有更好的方法吗?最好没有任何符号计算(返回自由变量的索引)。
这里问了同样的问题,但没有回答,因为原来提问者想问别的问题:How to determine which one is free variable in the result of sympy.linsolve
他只是想要一个单一的系统解决方案。我想知道自由变量,甚至不需要知道解决方案。
这与
import numpy as np
from scipy.linalg import lu
M = np.array([[1, 1, 0, 1], [0, 0, 1, 0], [0, 0, 7, 0]])
U = lu(M)[2]
basis_columns = {np.flatnonzero(U[i, :])[0] for i in range(U.shape[0])}
free_variables = set(range(U.shape[1])) - basis_columns
答案:{1, 3}
。
注意:所有这些都对浮点错误很敏感,因此如果您在输入中有精确的有理数并希望原样保留它们,SymPy 仍然是首选。
不确定这是否准确,但我认为自由变量是 echelon form 中非关键元素的系数不为零的任何变量,以及它描述的变量。