Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <cmath>
- #include <iomanip>
- using namespace std;
- class Matrix
- {
- public:
- double X[3];
- double A[3][4];
- double L[3][3];
- double U[3][3];
- Matrix()
- {
- A[0][0]=0.46;
- A[0][1]=1.72;
- A[0][2]=2.53;
- A[0][3]=2.44;
- A[1][0]=1.53;
- A[1][1]=-2.32;
- A[1][2]=-1.83;
- A[1][3]=2.83;
- A[2][0]=0.75;
- A[2][1]=0.86;
- A[2][2]=3.72;
- A[2][3]=1.06;
- X[0]=0;
- X[1]=0;
- X[2]=0;
- }
- void setSize(int size)
- {
- m_size=size;
- }
- int getSize()
- {
- return m_size;
- }
- void MainElement();
- void Triangle();
- void Solve();
- void LU();
- void print()
- {
- cout.setf(ios::left);
- for(int i=0;i<m_size;++i)
- {
- for(int j=0;j<m_size+1;++j)
- cout<<setw(8)<<A[i][j]<<" ";
- cout<<endl;
- }
- cout<<endl;
- cout<<endl;
- }
- private:
- int m_size;
- };
- int main()
- {
- Matrix Matr;
- int size;
- cout<<"Enter size of matrix"<<endl;
- cin>>size;
- Matr.setSize(size);
- /* for(int i=0;i<size;++i)
- for(int j=0;j<size+1;++j)
- cin>>Matr.A[i][j];*/
- cout<<endl;
- cout<<"Method of LU"<<endl<<endl;
- Matr.LU();
- for(int i=0;i<size;++i)
- cout<<"X"<<i+1<<"= "<<Matr.X[i]<<endl;
- cout<<endl;
- cout<<endl<<"Method of Gauss"<<endl<<endl;
- Matr.MainElement();
- Matr.print();
- Matr.Triangle();
- Matr.print();
- Matr.Solve();
- Matr.print();
- for(int i=0;i<size;++i)
- cout<<"X"<<i+1<<"= "<<Matr.X[i]<<endl;
- cout<<endl;
- return 0;
- }
- void Matrix::MainElement()
- {
- for(int i=0;i<m_size;++i)
- {
- double MaxEl=fabs(A[i][i]);
- int MaxIndex=i;
- for(int j=i;j<m_size;++j)
- {
- if(fabs(A[j][i])>fabs(MaxEl))
- {
- MaxEl=fabs(A[j][i]);
- MaxIndex=j;
- }
- }
- for(int j=0;j<m_size+1;++j)
- {
- double temp=A[i][j];
- A[i][j]=A[MaxIndex][j];
- A[MaxIndex][j]=temp;
- }
- }
- }
- void Matrix::Triangle()
- {
- for(int i=0;i<m_size-1;++i)
- {
- for(int j=i+1;j<m_size;++j)
- {
- double temp=A[j][i];
- for(int n=i;n<m_size+1;++n)
- {
- A[j][n]-=A[i][n]*temp/A[i][i];
- }
- }
- }
- }
- void Matrix::Solve()
- {
- X[m_size-1]=A[m_size-1][m_size]/A[m_size-1][m_size-1];
- for(int i=m_size-2;i>=0;--i)
- {
- X[i]=A[i][m_size];
- for(int j=i+1;j<m_size;++j)
- {
- X[i]-=A[i][j]*X[j];
- }
- X[i]/=A[i][i];
- }
- }
- void Matrix::LU()
- {
- for(int i=0;i<m_size;++i)
- {
- U[0][i]=A[0][i];
- L[i][0]=A[i][0]/A[0][0];
- }
- for(int i=1;i<m_size;++i)
- {
- for(int j=i;j<m_size;++j)
- {
- for(int k=0;k<i;++k)
- {
- U[i][j]=A[i][j]-L[i][k]*U[k][j];
- L[j][i]=(1/U[i][i])*(A[j][i]-L[j][k]*U[k][i]);
- }
- }
- }
- for(int i=0;i<m_size;++i)
- for(int j=i+1;j<m_size;++j)
- {
- L[i][j]=0;
- U[j][i]=0;
- }
- cout.setf(ios::left);
- cout<<"L matrix"<<endl<<endl;
- for(int i=0;i<m_size;++i)
- {
- for(int j=0;j<m_size;++j)
- {
- cout<<setw(8)<<L[i][j]<<" ";
- }
- cout<<endl;
- }
- cout<<endl<<"U matrix"<<endl<<endl;
- for(int i=0;i<m_size;++i)
- {
- for(int j=0;j<m_size;++j)
- {
- cout<<setw(8)<<U[i][j]<<" ";
- }
- cout<<endl;
- }
- double y[3];
- y[0]=A[0][3]/L[0][0];
- y[1]=(A[1][3]-y[0]*L[1][0])/L[1][1];
- y[2]=(A[2][3]-L[2][0]*y[0]-L[2][1]*y[1])/L[2][2];
- cout<<endl<<"y1= "<<y[0]<<endl<<"y2= "<<y[1]<<endl<<"y3= "<<y[2]<<endl<<endl;
- X[2]+=y[2]/U[2][2];
- X[1]+=(y[1]-U[1][2]*X[2])/U[1][1];
- X[0]+=(y[0]-U[0][2]*X[2]-U[0][1]*X[1])/U[0][0];
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement