diff options
Diffstat (limited to 'works/life/numerical-analysis-lab/JacobianIteration.cpp')
-rw-r--r-- | works/life/numerical-analysis-lab/JacobianIteration.cpp | 101 |
1 files changed, 0 insertions, 101 deletions
diff --git a/works/life/numerical-analysis-lab/JacobianIteration.cpp b/works/life/numerical-analysis-lab/JacobianIteration.cpp deleted file mode 100644 index 20aa923..0000000 --- a/works/life/numerical-analysis-lab/JacobianIteration.cpp +++ /dev/null @@ -1,101 +0,0 @@ -#include <cstdlib> -#include <ctime> -#include <iomanip> -#include <iostream> - -void PrintMatrix(int n, double **a) { - for (int i = 0; i < n; ++i) { - for (int j = 0; j < n; ++j) { - std::cout << a[i][j] << ' '; - } - std::cout << '\n'; - } -} - -void PrintEquation(int n, double **a, double *b) { - for (int i = 0; i < n; ++i) { - for (int j = 0; j < n; ++j) { - std::cout << a[i][j] << ' '; - } - std::cout << b[i] << '\n'; - } -} - -void JacobianIteration(int n, double *x, double **a, double *b) { - double *x_new = new double[n]; - - for (int r = 0; r < n; r++) { - x_new[r] = b[r]; - for (int c = 0; c < n; c++) { - if (c != r) { - x_new[r] -= a[r][c] * x[c]; - } - } - x_new[r] /= a[r][r]; - } - - for (int r = 0; r < n; r++) { - x[r] = x_new[r]; - } - - delete[] x_new; -} - -double GetDiff(int n, double *x, double **a, double *b) { - double diff = 0; - for (int r = 0; r < n; r++) { - for (int c = 0; c < n; c++) { - diff += a[r][c] * x[c]; - } - diff -= b[r]; - } - return diff; -} - -int main() { - std::cout << std::showpos << std::fixed << std::setprecision(3); - - const int n = 6; - double **a = new double *[n]; - double *b = new double[n]; - double *x = new double[n]; - - for (int i = 0; i < n; i++) { - x[i] = 0; - a[i] = new double[n]; - for (int j = 0; j < n; j++) { - std::cin >> a[i][j]; - } - std::cin >> b[i]; - } - - std::cout << "Equation:\n"; - PrintEquation(n, a, b); - - int count = 0; - - while (true) { - std::cout << "Solution:\n"; - for (int i = 0; i < n; i++) { - std::cout << x[i] << '\n'; - } - - double diff = GetDiff(n, x, a, b); - std::cout << "diff: " << diff << '\n'; - if (std::abs(diff) < 1e-6) - break; - count++; - std::cout << "Now doing iteration " << count << '\n'; - JacobianIteration(n, x, a, b); - - if (count > 100) - break; - } - - std::cout << "Final Solution:\n"; - for (int i = 0; i < n; i++) { - std::cout << x[i] << '\n'; - } - - return 0; -} |