Advertisement
kamillo111

Jacobi

May 23rd, 2016
49
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.66 KB | None | 0 0
  1. #include <iostream>
  2.  
  3.  
  4. using namespace std;
  5.  
  6.  
  7. double A[4][4]={{2,0,0,0},{0,5,0,0},{ 0,0,10,0},{0,0,0,4}};
  8. double L[4][4]={{0,0,0,0},{0,0,0,0},{ 0,0,0,0},{0,0,0,0}};
  9. double U[4][4]={{0,0,0,0},{0,0,0,0},{ 0,0,0,0},{0,0,0,0}};
  10. double b[4]={10,5,20,8 };
  11.  
  12. double l(int j, int i){
  13.  
  14. if ( i > j){
  15. return 0;
  16. }
  17. if (i==j){
  18. return 1;
  19. }
  20.  
  21. if ( i<j){
  22.  
  23.  
  24. double suma=0;
  25. for (int k=0; k <=i-1;k++){
  26. suma += L[j][k]*U[k][i];
  27.  
  28. }
  29.  
  30. double wynik = (A[j][i]-suma)/(U[i][i]);
  31. return wynik;
  32.  
  33. }
  34.  
  35. }
  36.  
  37.  
  38.  
  39. double u(int i, int j){
  40.  
  41. if ( i > j){
  42. return 0;
  43. }
  44.  
  45. if ( i<=j){
  46.  
  47.  
  48. double suma=0;
  49. for (int k=0; k <=i-1;k++){
  50. suma += L[i][k]*U[k][j];
  51.  
  52. }
  53.  
  54.  
  55. return (A[i][j]-suma) ;
  56.  
  57. }
  58.  
  59. }
  60.  
  61. void Gauss_Siedl(){
  62.  
  63. int size=4;
  64. double* x = new double[size];
  65.  
  66. for (int i=0; i<size;i++){
  67. x[i]=0;
  68. }
  69.  
  70.  
  71. cout << "Metoda Siedla" << endl;
  72.  
  73.  
  74. int it;
  75. it =30;
  76.  
  77. for (int i=0 ; i<it; i++){
  78.  
  79.  
  80. for (int k=0; k<size;k++){
  81.  
  82.  
  83. double suma1=0;
  84. double suma2=0;
  85.  
  86. for (int j=0;j<k-1;j++){
  87.  
  88. suma1+=A[k][j]*x[j];
  89.  
  90. }
  91.  
  92. for (int j=k+1;j<size;j++){
  93.  
  94. suma2+=A[k][j]*x[j];
  95.  
  96. }
  97.  
  98. x[k]=(-suma1 - suma2 + b[k])/A[k][k];
  99.  
  100. }
  101.  
  102.  
  103. }
  104.  
  105. for (int i=0;i<size;i++){
  106.  
  107. cout << x[i] << endl;
  108.  
  109. }
  110.  
  111. cout << endl;
  112. cout << endl;
  113. }
  114.  
  115. void Jacobi( ){
  116.  
  117. int size =4;
  118. double* x = new double[size];
  119.  
  120. for (int i=0; i<size;i++){
  121. x[i]=0;
  122. }
  123. cout << "Jacobi" << endl;
  124.  
  125.  
  126. int it;
  127. it=30;
  128.  
  129. cout << endl;
  130.  
  131. for (int i=0 ; i<it; i++){
  132. for (int k=0; k<size;k++){
  133.  
  134. double suma=0;
  135. for (int j=0;j<size;j++){
  136.  
  137. if(k==j){
  138. continue;
  139. }
  140. suma+=A[k][j]*x[j];
  141.  
  142. }
  143.  
  144.  
  145. x[k]=(-suma+b[k])/A[k][k];
  146.  
  147. }
  148.  
  149.  
  150.  
  151. }
  152.  
  153.  
  154. for (int i=0;i<size;i++){
  155.  
  156. cout << x[i] << endl;
  157.  
  158. }
  159.  
  160. }
  161.  
  162.  
  163.  
  164.  
  165. int main(){
  166.  
  167.  
  168. /* for(int i=0;i<4;i++){
  169.  
  170. for (int j=0;j<4; j++)
  171. {
  172.  
  173. U[i][j]=u(i,j);
  174.  
  175. }
  176.  
  177. for (int j=0;j<4; j++)
  178. {
  179. L[j][i]=l(j,i);
  180.  
  181.  
  182. }
  183.  
  184. }
  185.  
  186. for (int i=0;i<4;i++){
  187.  
  188. for (int j=0;j<4;j++){
  189. cout<< L[i][j] << " ";
  190. }
  191.  
  192. cout << endl;
  193. }
  194.  
  195.  
  196. cout << endl;cout << endl;cout << endl;
  197.  
  198. for (int i=0;i<4;i++){
  199.  
  200. for (int j=0;j<4;j++){
  201. cout<< U[i][j] << " ";
  202. }
  203.  
  204. cout << endl;
  205. }
  206. */
  207.  
  208. Jacobi();
  209. Gauss_Siedl();
  210.  
  211.  
  212.  
  213.  
  214.  
  215.  
  216. system ("pause");
  217. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement