如何用C++程序判定一组向量是否线性相关?

如何用C++程序判定一组向量是否线性相关?,第1张

用矩阵

先进行初等行变换

试试程序吧 我试了几个 正确的

你要是看到哪里不对再联洞派穗系我吧~~

#include<iostream.h>

void main()

{

int **p,n,m,j,i,temp,tem,q

//输入向量

cout<<"输入向量维数:"

cin>>n

cout<<"输入向量个数:"

cin>>m

p=new int *[m]

for ( i=0i<mi++)

p[i] = new int[n]

for(i=0i<mi++)

{

cout<<"输入第"<<i+1<<"个向量"

for(j=0j<nj++)

cin>>*(*(p+i)+j)

}

//输出向量组

for(i=0i<mi++)

{

for(int j=0j<nj++)

cout<<*(*(p+i)+j)<<"\t"

cout<<endl

}

//矩阵初等变换

for(j=0j<nj++)

{

for(i=ji<mi++)//j列首元非零行首元变一

{

if(*(*(p+i)+j)!=0)

for(q=0q<nq++)

*(*(p+i)+q)/=*(*(p+i)+j)

}

for(i=ji<mi++)/羡衫/使j列剩唯一非零元或全是零

{

if(*(*(p+i)+j)!=0)

{

temp=i

for(i+=1i<mi++)

{

if(*(*(p+i)+j)!=0)

for(q=0q<nq++)

*(*(p+i)+q)-=*(*(p+temp)+q)

}

for(q=0q<nq++)//与第一行交换下次循环不纳卜作处理

{

tem=*(*(p+temp)+q)

*(*(p+temp)+q)=*(*(p+j)+q)

*(*(p+j)+q)=tem

}

}

}

}

//判断是否有全部为零行

for(i=0i<mi++)

{

tem=0

for(j=0j<nj++)

if(*(*(p+i)+j)==0)

tem++

if(tem==n)

cout<<"线性相关"<<endl

}

if(tem<n)

cout<<"线性无关"

}

根据齐次线性方程组的仔衫陵理论,当向念戚量的个数大于每个向量元素的个数时,向量组肯定线性相关。当向量的个数等于元素的个数时,由向量组组成的行列式为0时向量组线性相关。

1,2,3

34,56,23

6,5,7

2,3,4

4组向量线性相关,只要向量的个数大于元素的个数。

当向量元素的个数大于向量组的个数时就需要判断向量组矩阵的秩,当秩小于元素个数时,向量组线性相关。当秩大于塌汪等于元素个数时线性无关。当元素个数很多时矩阵的秩需要用程序计算。即使元素个数少时一般的矩阵也没什么简便的求秩方法。用计算机编程来求是方便的。就是用高斯消元法,用c语言,vb都可以。excel好像不行。用matlab可以求矩阵的秩用rank()命令。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12402525.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-25
下一篇 2023-05-25

发表评论

登录后才能评论

评论列表(0条)

保存