Advertisement
Guest User

laba3

a guest
Mar 26th, 2017
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.08 KB | None | 0 0
  1. #include <iostream>
  2. #include <cmath>
  3. #include <iomanip>
  4.  
  5. using namespace std;
  6.  
  7. class Matrix
  8. {
  9. public:
  10. double X[3];
  11. double A[3][4];
  12. double L[3][3];
  13. double U[3][3];
  14. Matrix()
  15. {
  16.  
  17. A[0][0]=0.46;
  18. A[0][1]=1.72;
  19. A[0][2]=2.53;
  20. A[0][3]=2.44;
  21. A[1][0]=1.53;
  22. A[1][1]=-2.32;
  23. A[1][2]=-1.83;
  24. A[1][3]=2.83;
  25. A[2][0]=0.75;
  26. A[2][1]=0.86;
  27. A[2][2]=3.72;
  28. A[2][3]=1.06;
  29. X[0]=0;
  30. X[1]=0;
  31. X[2]=0;
  32. }
  33. void setSize(int size)
  34. {
  35. m_size=size;
  36. }
  37. int getSize()
  38. {
  39. return m_size;
  40. }
  41. void MainElement();
  42. void Triangle();
  43. void Solve();
  44. void LU();
  45. void print()
  46. {
  47. cout.setf(ios::left);
  48. for(int i=0;i<m_size;++i)
  49. {
  50. for(int j=0;j<m_size+1;++j)
  51. cout<<setw(8)<<A[i][j]<<" ";
  52. cout<<endl;
  53. }
  54. cout<<endl;
  55. cout<<endl;
  56. }
  57. private:
  58. int m_size;
  59. };
  60. int main()
  61. {
  62. Matrix Matr;
  63. int size;
  64. cout<<"Enter size of matrix"<<endl;
  65. cin>>size;
  66. Matr.setSize(size);
  67. /* for(int i=0;i<size;++i)
  68. for(int j=0;j<size+1;++j)
  69. cin>>Matr.A[i][j];*/
  70. cout<<endl;
  71. cout<<"Method of LU"<<endl<<endl;
  72. Matr.LU();
  73. for(int i=0;i<size;++i)
  74. cout<<"X"<<i+1<<"= "<<Matr.X[i]<<endl;
  75. cout<<endl;
  76.  
  77.  
  78. cout<<endl<<"Method of Gauss"<<endl<<endl;
  79. Matr.MainElement();
  80. Matr.print();
  81. Matr.Triangle();
  82. Matr.print();
  83. Matr.Solve();
  84. Matr.print();
  85. for(int i=0;i<size;++i)
  86. cout<<"X"<<i+1<<"= "<<Matr.X[i]<<endl;
  87. cout<<endl;
  88. return 0;
  89. }
  90.  
  91. void Matrix::MainElement()
  92. {
  93. for(int i=0;i<m_size;++i)
  94. {
  95. double MaxEl=fabs(A[i][i]);
  96. int MaxIndex=i;
  97. for(int j=i;j<m_size;++j)
  98. {
  99. if(fabs(A[j][i])>fabs(MaxEl))
  100. {
  101. MaxEl=fabs(A[j][i]);
  102. MaxIndex=j;
  103. }
  104. }
  105. for(int j=0;j<m_size+1;++j)
  106. {
  107. double temp=A[i][j];
  108. A[i][j]=A[MaxIndex][j];
  109. A[MaxIndex][j]=temp;
  110. }
  111. }
  112. }
  113.  
  114. void Matrix::Triangle()
  115. {
  116. for(int i=0;i<m_size-1;++i)
  117. {
  118. for(int j=i+1;j<m_size;++j)
  119. {
  120. double temp=A[j][i];
  121. for(int n=i;n<m_size+1;++n)
  122. {
  123. A[j][n]-=A[i][n]*temp/A[i][i];
  124. }
  125. }
  126. }
  127. }
  128.  
  129. void Matrix::Solve()
  130. {
  131. X[m_size-1]=A[m_size-1][m_size]/A[m_size-1][m_size-1];
  132. for(int i=m_size-2;i>=0;--i)
  133. {
  134. X[i]=A[i][m_size];
  135. for(int j=i+1;j<m_size;++j)
  136. {
  137. X[i]-=A[i][j]*X[j];
  138. }
  139. X[i]/=A[i][i];
  140. }
  141. }
  142.  
  143. void Matrix::LU()
  144. {
  145. for(int i=0;i<m_size;++i)
  146. {
  147. U[0][i]=A[0][i];
  148. L[i][0]=A[i][0]/A[0][0];
  149. }
  150. for(int i=1;i<m_size;++i)
  151. {
  152. for(int j=i;j<m_size;++j)
  153. {
  154. for(int k=0;k<i;++k)
  155. {
  156. U[i][j]=A[i][j]-L[i][k]*U[k][j];
  157. L[j][i]=(1/U[i][i])*(A[j][i]-L[j][k]*U[k][i]);
  158. }
  159. }
  160. }
  161.  
  162. for(int i=0;i<m_size;++i)
  163. for(int j=i+1;j<m_size;++j)
  164. {
  165. L[i][j]=0;
  166. U[j][i]=0;
  167. }
  168.  
  169. cout.setf(ios::left);
  170. cout<<"L matrix"<<endl<<endl;
  171. for(int i=0;i<m_size;++i)
  172. {
  173. for(int j=0;j<m_size;++j)
  174. {
  175. cout<<setw(8)<<L[i][j]<<" ";
  176. }
  177. cout<<endl;
  178. }
  179. cout<<endl<<"U matrix"<<endl<<endl;
  180. for(int i=0;i<m_size;++i)
  181. {
  182. for(int j=0;j<m_size;++j)
  183. {
  184. cout<<setw(8)<<U[i][j]<<" ";
  185. }
  186. cout<<endl;
  187. }
  188.  
  189. double y[3];
  190. y[0]=A[0][3]/L[0][0];
  191. y[1]=(A[1][3]-y[0]*L[1][0])/L[1][1];
  192. y[2]=(A[2][3]-L[2][0]*y[0]-L[2][1]*y[1])/L[2][2];
  193. cout<<endl<<"y1= "<<y[0]<<endl<<"y2= "<<y[1]<<endl<<"y3= "<<y[2]<<endl<<endl;
  194.  
  195. X[2]+=y[2]/U[2][2];
  196. X[1]+=(y[1]-U[1][2]*X[2])/U[1][1];
  197. X[0]+=(y[0]-U[0][2]*X[2]-U[0][1]*X[1])/U[0][0];
  198.  
  199. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement