📄 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 + -