⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 qr.cpp

📁 用C++语言实现矩阵的QR分解
💻 CPP
字号:
#include<iostream.h>
#include<math.h>
#define n 4//A阵是4*3的矩阵;
#define s 3//B阵也是4*3的矩阵;
class vector
{private:
 float a[n];
 public:
 vector();
 void setvector();
 float operator*(vector&v);
 vector operator-(vector&v);
 vector operator+(vector&v);
 vector operator=(vector&v);
 vector fun(float ai);
 void printf();
};
vector::vector()
{for(int i=0;i<n;i++)
 a[i]=0;
}
void vector::setvector()
{for(int i=0;i<n;i++)
 cin>>a[i];
}
float vector::operator*(vector &v)//注意返回类型一定写上;
{float mul=0;
for(int i=0;i<n;i++)
mul+=a[i]*v.a[i];
return mul;
}
vector vector::operator-(vector &v)
{vector temp;
for(int i=0;i<n;i++)
temp.a[i]=a[i]-v.a[i];
return temp;
}
vector vector::operator+(vector &v)
{vector temp;
for(int i=0;i<n;i++)
temp.a[i]=a[i]+v.a[i];
return temp;
}
vector vector::fun(float ai)//注意参数不能和数组名相同;
{for(int i=0;i<n;i++)
 a[i]=a[i]*ai;
return *this;
}
vector vector::operator=(vector &v)
{for(int i=0;i<n;i++)
a[i]=v.a[i];
return *this;
}
void vector::printf()
{for(int i=0;i<n;i++)
 cout<<a[i]<<" ";
}
void main()
{int i,j;
float R[s][s];
vector A[s],B[s];
cout<<"input the matrix A(按列输入):\n";
for(i=0;i<s;i++)
A[i].setvector();
/*for(i=0;i<s;i++)//显示A数组;
{A[i].printf();
cout<<endl;
}*/
//cout<<"input the matrix B:\n";
B[0]=A[0];
cout<<"将A阵各列正交化得矩阵(按列输出):\n";
B[0].printf();
cout<<endl;
for(i=1;i<s;i++)
{vector temp,temp1;
 for(j=0;j<i;j++)
 {temp1=B[j];
 temp=temp+temp1.fun((A[i]*B[j])/(B[j]*B[j]));//若将temp1换为B【j】,显然会改变B【j】的数据!!;
 }
 B[i]=A[i]-temp;
 B[i].printf();
 cout<<endl;
}
cout<<"将上阵单位化得矩阵Q^T:\n ";
for(i=0;i<s;i++)
{float ai=1/(float)sqrt(B[i]*B[i]);
B[i]=B[i].fun(ai);
B[i].printf();
cout<<endl;
}
cout<<"上三角矩阵R为:\n";
for(i=0;i<s;i++)
{for(j=0;j<s;j++)
{R[i][j]=B[i]*A[j];
 cout<<R[i][j]<<" ";
}
cout<<endl;
}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -