先进行初等行变换
试试程序吧 我试了几个 正确的
你要是看到哪里不对再联洞派穗系我吧~~
#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()命令。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)