📄
字号:
#include<iostream>//确定矩阵a,at的维数#define M 4#define N 2using namespace std;//定义矩阵类Aclass A{public: //对类A中的数组a[M][N]初始化 void set() { cout<<"请按行依次输入矩阵A的元素:\n"; for(int i=0;i<M;i++) for(int j=0;j<N;j++) cin>>a[i][j]; } //声明类的成员函数,用于对矩阵a[m][n]求转置 void T(); //将运算符重载函数声明为类的友元 friend A operator *(A &A1,A &A2); //声明函数,用于实现矩阵at与矩阵y相乘 void complex(double y[4][1]); //用于存放at*a的结果 double temp1[N][N]; //用于存放at*y的结果 double temp2[2][1];private: //用于表示公式中的A double a[M][N]; //用于表示公式中A的转置阵 double at[N][M]; };//定义类的成员函数void A::T(){ for(int i=0;i<M;i++) for(int k=0;k<N;k++) at[k][i]=a[i][k];}//定义运算符重载函数A operator *(A &A1,A &A2){ for(int i=0;i<N;i++) for(int k=0;k<N;k++) A1.temp1[i][k]=A1.at[i][0]*A2.a[0][k]+A1.at[i][1]*A2.a[1][k]+A1.at[i][2]*A2.a[2][k]+A1.at[i][3]*A2.a[3][k]; return A1;}//定义类的成员函数void A::complex(double y[4][1]){ for(int i=0;i<2;i++) temp2[i][0]=at[i][0]*y[0][0]+at[i][1]*y[1][0]+at[i][2]*y[2][0]+at[i][3]*y[3][0];}int main(){ double y[4][1]={11,3,6,14}; //创建类的对象A1 A A1; //对A1中的a初始化 A1.set(); //对A1中的a求转置 A1.T(); //实现at*a并将结果存于temp1 A1=A1*A1; double t1[2][2]; //将temp1的值传给t1 for(int i=0;i<N;i++) for(int k=0;k<N;k++) t1[i][k]=A1.temp1[i][k]; //实现at*y并将结果存于temp2 A1.complex(y); double t2[2][1]; //将temp2的值传给t2 for(i=0;i<2;i++) t2[i][0]=A1.temp2[i][0]; double X,Y; //求用最小二乘法转化出的新的方程组的解 X=(t2[1][0]*t1[0][1]-t1[1][1]*t2[0][0])/(t1[0][1]*t1[1][0]-t1[1][1]*t1[0][0]); Y=(t2[0][0]-t1[0][0]*X)/t1[0][1]; //输出计算结果 cout<<"经用最小二乘法知,所求方程组的近似解为:\n"<<"X="<<X<<'\t'<<"Y="<<Y<<endl; return 0;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -