Advertisement
Guest User

Untitled

a guest
Apr 24th, 2018
59
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.29 KB | None | 0 0
  1. #include <iostream>
  2. #include <cmath>
  3. #define N 995
  4. #define A1 9
  5. #define A23 -1
  6. using namespace std;
  7.  
  8. void jacobi(double** A, double* b, double* x0, double* x1, double* residuum) {
  9. for (int i = 0; i < N; i++) {
  10. double sum1 = 0, sum2 = 0;
  11. for (int j = 0; j <= i - 1; j++) sum1 += A[i][j] * x0[j];
  12. for (int j = i + 1; j < N; j++) sum2 += A[i][j] * x0[j];
  13. x1[i] = (b[i] - sum1 - sum2) / A[i][i];
  14. x0[i] = x1[i];
  15. }
  16. for (int i = 0; i < N; i++) {
  17. for (int j = 0; j < N; j++) residuum[i] += A[i][j] * x1[j];
  18. residuum[i] -= b[i];
  19. }
  20. }
  21.  
  22. int main() {
  23. double** A = new double*[N];
  24. for (int i = 0; i < N; i++) A[i] = new double[N];
  25. for (int i = 0; i < N; i++)
  26. for (int j = 0; j < N; j++) A[i][j] = 0.0;
  27.  
  28. static double b[N], x0[N], x1[N], residuum[N], norm = 1; //x0 macierz xow poprzednich, x1 macierz xow nowych
  29. for (int i = 0; i < N; i++) {
  30. b[i] = sin(i * 10);
  31. for (int j = 0; j < N; j++) {
  32. if (i == j) A[i][j] = A1;
  33. else if (i == j + 1 || i == j - 1) A[i][j] = A23;
  34. else if (i == j + 2 || i == j - 2) A[i][j] = A23;
  35. }
  36. }
  37. int iter = 0;
  38. while (norm > pow(10, -6) && norm != 0.0) {
  39. double result = 0;
  40. jacobi(A, b, x0, x1, residuum);
  41. for (int i = 0; i < N; i++) result += pow(residuum[i], 2);
  42. norm = sqrt(result);
  43. iter++;
  44. }
  45. return 0;
  46. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement