Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <cmath>
- #include <vector>
- #include <algorithm>
- #include <chrono>
- using namespace std::chrono;
- using namespace std::literals;
- using matrix = std::vector<std::vector<double>>;
- std::vector<double> iterationMethod(const matrix& A, const std::vector<double>& b)
- {
- for (int j = 0; j < A.size(); ++j)
- {
- double sum = 0;
- for (int i = 0; i < A.size(); ++i)
- {
- if (j != i)
- {
- sum += A[j][i];
- }
- }
- if (sum >= std::abs(A[j][j]))
- {
- throw std::runtime_error("wrong matrix");
- }
- }
- matrix C = A;
- std::vector<double> F = b;
- for (int j = 0; j < C.size(); ++j)
- {
- for (int i = 0; i < C.size(); ++i)
- {
- if (j == i)
- {
- C[j][i] = 0;
- }
- else
- {
- C[j][i] /= A[j][j];
- C[j][i] *= -1;
- }
- }
- }
- for (int i = 0; i < F.size(); ++i)
- {
- F[i] /= A[i][i];
- }
- std::vector<double> prev(b.size(), 0);
- std::vector<double> cur(b.size(), 0);
- double maxDif = 0;
- double accuracy = 0.001f;
- do
- {
- prev = cur;
- maxDif = 0;
- for (int j = 0; j < C.size(); ++j)
- {
- double sum = 0;
- for (int i = 0; i < C.size(); ++i)
- {
- sum += C[j][i] * prev[i];
- }
- cur[j] = sum + F[j];
- }
- for (int i = 0; i < cur.size(); ++i)
- {
- double dif = std::abs(cur[i] - prev[i]);
- if (dif > maxDif)
- {
- maxDif = dif;
- }
- }
- }
- while (maxDif > accuracy);
- return cur;
- }
- int main()
- {
- std::vector<double> res = iterationMethod(m, b);
- time_point<high_resolution_clock> endTime = clock.now();
- std::cout << "Result = { ";
- for (auto& i : res)
- {
- std::cout << i << " ";
- }
- std::cout << "}" << std::endl;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement