Math 如何检查m n大小的向量是否线性独立?

Math 如何检查m n大小的向量是否线性独立?,math,vector,matrix,linear-algebra,Math,Vector,Matrix,Linear Algebra,免责声明 严格来说,这不是一个编程问题,但大多数程序员不久或以后都要处理数学(特别是代数),因此我认为这个答案在将来可能对其他人有用 现在问题解决了 我试图检查n维的m向量是否是线性独立的。如果m==n,您可以使用向量构建一个矩阵,并检查行列式是否为!=0但是如果mn时,在这种情况下,它们不能线性独立。构造一个矩阵m,其行是向量,并确定m的秩。如果M的秩小于M(向量数),则存在线性相关性。在确定M秩的算法中,您可以在获得一行零后立即停止该过程,但将该算法运行到完成时还可以提供向量生成集的维数。哦

免责声明
严格来说,这不是一个编程问题,但大多数程序员不久或以后都要处理数学(特别是代数),因此我认为这个答案在将来可能对其他人有用

现在问题解决了
我试图检查n维的m向量是否是线性独立的。如果m==n,您可以使用向量构建一个矩阵,并检查行列式是否为!=0但是如果m 有什么提示吗



另请参见。

构建向量矩阵(每个向量一行),并在此矩阵上执行一次运算。如果任何矩阵行被抵消,则它们不是线性独立的


简单的情况是当m>n时,在这种情况下,它们不能线性独立。

构造一个矩阵
m
,其行是向量,并确定
m
的秩。如果
M
的秩小于
M
(向量数),则存在线性相关性。在确定
M
秩的算法中,您可以在获得一行零后立即停止该过程,但将该算法运行到完成时还可以提供向量生成集的维数。哦,确定
M
的秩的算法仅仅是高斯消去法

注意数值不稳定性。参见数字配方第二章开头的警告。

如果
m零行或零列,正交化=>零向量,奇异值分解=>零奇数)


但是,请注意,对于程序员来说,这个问题是一个不好的问题,对于程序来说,这个问题是一个不好的问题。这是因为如果计算能力不是问题,那么最好的方法可能是找到矩阵的奇异值。基本上,您需要找到
M'*M
的特征值,并查看最大值与最小值的比率。如果比率不是很大,则向量是独立的。

检查m行向量是否线性独立的另一种方法是,当放入大小为mxn的矩阵m中时,计算

det(M * M^T)

i、 e.mxm方阵的行列式。当且仅当M有一些依赖行时,它将为零。不过,高斯消去法通常应该更快。

我最近一直在研究这个问题

以前,我发现了一些关于高斯或高斯-乔丹消去的算法,但这些算法大多只适用于平方矩阵,而不适用于一般矩阵

要申请通用矩阵,最好的答案之一可能是:

您可以在各种语言中找到伪代码和源代码。 至于我,我把Python源代码转换成C++,导致上面链接中提供的C++代码在我的模拟中是某种复杂和不合适的。
希望这对你有帮助,祝你好运对不起,我错了


以上链接中提供的源代码结果是错误的,至少我测试过的Python代码和我已经转换过的C++代码都不能生成正确的答案。(而对于上面链接中的示例,结果是正确的:)--)

要测试python代码,只需将
mtx
替换为

[30,10,20,0],[60,20,40,0]
返回的结果如下所示:

[1,0,0,0],[0,1,2,0]
尽管如此,我还是找到了一条出路。就在这一次,我把MATALB源代码转换为代码> > ReFF < /C>函数到C++。您可以运行matlab并使用
type rref
命令来获取
rref
的源代码

<>注意,如果您使用的是一些非常大的值或很小的值,请确保在C++中使用<代码> long double < /COD>数据类型。否则,结果将被截断,并且与matlab结果不一致

我一直在ns2中进行大型模拟,所有观察到的结果都是可靠的。
希望这将帮助您和任何其他遇到此问题的人…

一种非常简单的方法,也不是最有效的计算方法,就是简单地删除随机行,直到
m=n
,然后应用行列式技巧

  • m
    :删除行(使向量更短),直到矩阵为正方形,然后
  • m=n
    :检查行列式是否为0(如您所说)
  • m
    (向量的数量大于其长度):它们是线性相关的(始终)

简而言之,原因是
mxn
方程组的任何解也是
nxn
方程组的解(您试图解
Av=0
)。有关更好的解释,请参见,这比我能解释得更好。

您能更好地解释您的解决方案吗?我应该对什么执行高斯消去?假设你有2个向量(23)(46)。它们映射到以下方程组:
2x+3y=a
4x+6y=b
。如果你尝试用高斯消去x,你会得到
0x+0y=2a-b
。零表示这两个向量不是独立的。对
M
N
进行概括。因此这至少有
O(N^3)
复杂性(取决于我们的度量方式)。你知道有没有(可能是随机化的)
O(n^2)
算法吗?我能用这个高斯消去法进行部分旋转吗?是的,但不是每个独立集附近都有一个依赖集。是的,但这仅仅意味着依赖集上算法的每个输出都有点虚假。你确定它是转置而不是共轭转置吗?你能给出关于随机移除向量分量的方法的参考吗?你如何定义“不是很大”?