• API
• FAQ
• Tools
• Archive
SHARE
TWEET

# Untitled

a guest Mar 25th, 2019 67 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
1. #include <iostream>
2. #include <stdlib.h>
3. #include <fstream>
4. #include <string>
5. #include <iomanip>
6. #include <math.h>
7. double TOLX = 1.0e-5;
8. double TOL0 = 1.0e-5;
9. int nmax = 15;
10. const int SIZE = 4;
11.
12. double A[SIZE][SIZE] = {    {100.,1.,-2.,3.},
13.                             {4.,300.,-5.,6.},
14.                             {7.,-8.,400.,9.},
15.                             {-10.,11.,-12.,200.} };
16. double B[SIZE] = { 395.,603.,-415.,-606. };
17.
18. double estymator(double x2[], double x1[]) {
19.     double max = 0;
20.     double tab[SIZE];
21.     for (int i = 0; i < SIZE; i++) {
22.         tab[i] = x2[i] - x1[i];
23.         if (fabs(tab[i]) > max)
24.             max = fabs(tab[i]);
25.     }
26.     std::cout << "Estymator: " << max << std::endl;
27.     return max;
28. }
29. double residuum(double x[], double b[], double a[][SIZE]) {
30.     double r[SIZE] = { 0.,0.,0.,0. };
31.     double max;
32.     for (int i = 0; i < SIZE; i++)
33.     {
34.         for (int j = 0; j < SIZE; j++)
35.         {
36.             r[i] += a[i][j] * x[j];
37.         }
38.         r[i] = fabs(r[i] - b[i]);
39.     }
40.     max = r[0];
41.     for (int i = 1; i < SIZE; i++)
42.     {
43.         if (r[i] > max)
44.         {
45.             max = r[i];
46.         }
47.     }
48.     std::cout << "Residuum=" << max << " ";
49.     return max;
50. }
51. double jacobi(double tab[][SIZE], double b[SIZE]) {
52.     double arr[SIZE][SIZE],D[SIZE], b2[SIZE], x2[SIZE], x1[SIZE] = { 1.,1.,1.,1. };
53.     int n = 0;
54.     for (int i = 0; i < SIZE; i++)
55.     {
56.         for (int j = 0; j < SIZE; j++)
57.         {
58.             arr[i][j] = tab[i][j];
59.         }
60.     }
61.     //D^-1
62.     for (int i = 0; i < SIZE; i++)
63.     {
64.         D[i] = 1. / arr[i][i];
65.         arr[i][i] = 0;
66.         //ok
67.     }
68.     //b * D --> wspolczynnik c
69.     for (int i = 0; i < SIZE; i++)
70.     {
71.         b2[i] = D[i] * b[i];
72.         //ok
73.     }
74.     //przeksztalcenie macierzy A
75.     for (int i = 0; i < SIZE; i++)
76.     {
77.         for (int j = 0; j < SIZE; j++)
78.         {
79.             if(i!=j)
80.             arr[i][j] = arr[i][j] * ((-1)*D[i]);
81.         }
82.     }
83.     int num = 0;
84.     //algorytm
85.     for (int k = 0; k < nmax; k++)
86.         {
87.             for (int i = 0; i < SIZE; i++)
88.             {
89.                 x2[i] = b2[i];
90.                 for (int j = 0; j < SIZE; j++)
91.                 {
92.                     x2[i] += arr[i][j] * x1[j];
93.                 }
94.             }
95.             num++;
96.             std::cout << "Iteracja " << num << "  ";
97.             for (int i = 0; i < SIZE; i++)
98.             {
99.                 std::cout << "x" << i+1 << "=" << x2[i] << "  ";
100.             }
101.             residuum(x2, B, A);
102.             if(estymator(x2, x1) < TOLX && residuum(x2, B, A) < TOL0)break;
103.             for (int i = 0; i < SIZE; i++) {
104.                 x1[i] = x2[i];
105.             }
106.             std::cout << std::endl<<std::endl;
107.         }
108.     return 0;
109. }
110. int main() {
111.
112.     double X[SIZE] = {1.,1.,1.,1.};
113.     jacobi(A, B);
114.     getchar();
115.     return 0;
116. }
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy.

Top