Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- int _n()
- {
- int n;
- std::cout << "enter size and matrix: ";
- std::cin >> n;
- return n;
- }
- double** _mec2(int t)
- {
- double** a = new double* [t];
- for (int i = 0; i < t; i++)
- a[i] = new double[t];
- return a;
- }
- double** _mec2(int t1, int t2)
- {
- double** a = new double* [t1];
- for (int i = 0; i < t1; i++)
- a[i] = new double[t2];
- return a;
- }
- double* _mec1(int t)
- {
- return new double[t];
- }
- void _mer2(double** t1, int t2)
- {
- for (int i = 0; i < t2; i++)
- delete[] t1[i];
- delete[] t1;
- }
- void _mer1(double* t1)
- {
- delete[] t1;
- }
- void _cin2(double** t1, int t2)
- {
- for (int i = 0; i < t2; i++)
- for (int j = 0; j < t2; j++)
- std::cin >> t1[i][j];
- }
- void _cin2(double** t1, int t2, int t3)
- {
- for (int i = 0; i < t2; i++)
- for (int j = 0; j < t3; j++)
- std::cin >> t1[i][j];
- }
- void _cin1(double* t1, int t2)
- {
- for (int i = 0; i < t2; i++)
- std::cin >> t1[i];
- }
- void _cout2(double** t1, int t2)
- {
- std::cout << '\n';
- for (int i = 0; i < t2; i++)
- {
- for (int j = 0; j < t2; j++)
- std::cout << t1[i][j] << ' ';
- std::cout << '\n';
- }
- std::cout << '\n';
- }
- void _cout2(double** t1, int t2, int t3)
- {
- std::cout << '\n';
- for (int i = 0; i < t2; i++)
- {
- for (int j = 0; j < t3; j++)
- std::cout << t1[i][j] << ' ';
- std::cout << '\n';
- }
- std::cout << '\n';
- }
- void _cout1(double* t1, int t2)
- {
- std::cout << '\n';
- for (int i = 0; i < t2; i++)
- std::cout << t1[i] << ' ';
- std::cout << '\n';
- }
- double _30_a(double** a, int n)
- {
- double s = 0;
- for (int i = 0; i < n; i++)
- s += a[i][i];
- return s;
- }
- //norma
- double _30_b(double** a, int n)
- {
- double max;
- for (int i = 0; i < n; i++)
- {
- double s = 0;
- for (int j = 0; j < n; j++)
- {
- s += abs(a[i][j]);
- }
- if (!i || s > max)
- max = s;
- }
- return max;
- }
- //transpose
- void _30_v(double**& c, double** a, int n)
- {
- for (int i = 0; i < n; i++)
- for (int j = 0; j < n; j++)
- c[i][j] = a[i][j];
- for (int i = 1; i < n; i++)
- for (int j = 0; j < i; j++)
- c[i][j] = c[j][i];
- }
- //mul scalar
- void _30_g(double**& c, double** a, int m, int n, double l)
- {
- for (int i = 0; i < m; i++)
- for (int j = 0; j < n; j++)
- c[i][j] = l * a[i][j];
- }
- //sum
- void _30_d(double**& c, double** a, double** b, int m, int n)
- {
- for (int i = 0; i < m; i++)
- for (int j = 0; j < n; j++)
- c[i][j] = a[i][j] + b[i][j];
- }
- //mul mat
- void _30_e(double**& c, double** a, int m, int n, double** b, int t)
- {
- for (int i = 0; i < m; i++) //умножение матриц А и (В - Е)
- for (int j = 0; j < t; j++)
- {
- c[i][j] = 0;
- for (int m = 0; m < n; m++)
- c[i][j] += a[i][m]*b[m][j];
- }
- }
- double** _null_or_E(int t, bool is_identity)
- {
- double** c = _mec2(t);
- for (int i = 0; i < t; i++)
- for (int j = 0; j < t; j++)
- if (is_identity && i == j)
- c[i][j] = 1;
- else
- c[i][j] = 0;
- return c;
- }
- //pow
- void _30_j(double**& b, double** a, int n, int z)
- {
- b = _null_or_E(n, true);
- double** c = _mec2(n);
- double** t = _mec2(n);
- _30_g(c, a, n, n, 1);
- int m = z;
- while (m > 0)
- {
- if (m % 2)
- {
- m--;
- _30_g(t, b, n, n, 1);
- _30_e(b, t, n, n, c, n);
- }
- else
- {
- m /= 2;
- _30_g(t, c, n, n, 1);
- _30_e(c, t, n, n, c, n);
- }
- }
- _mer2(c, n);
- _mer2(t, n);
- }
- void _31_a(double**& c, double** a, int n, int m)
- {
- c = _null_or_E(n, false);
- double** t1 = _mec2(n);
- double** t2 = _mec2(n);
- for (int i = 0; i < m; i++)
- {
- _30_j(t1, a, n, i);
- _30_g(t2, c, n, n, 1);
- _30_d(c, t2, t1, n, n);
- }
- _mer2(t1, n);
- _mer2(t2, n);
- }
- void _31_b(double**& c, double** a, double** b, int n, int m)
- {
- c = _null_or_E(n, false);
- double** t1 = _mec2(n);
- double** t2 = _mec2(n);
- for (int i = 1; i <= 2 * m; i += 2)
- {
- _30_j(t1, a, n, i);
- _30_g(t2, c, n, n, 1);
- _30_d(c, t2, t1, n, n);
- _30_j(t1, b, n, i + 1);
- _30_g(t2, c, n, n, 1);
- _30_d(c, t2, t1, n, n);
- }
- _mer2(t1, n);
- _mer2(t2, n);
- }
- void _31_v(double**& c, double** a, double** b, int n, int m)
- {
- c = _null_or_E(n, false);
- double** t1 = _mec2(n);
- double** t2 = _mec2(n);
- double** t3 = _mec2(n);
- double** t4 = _mec2(n);
- for (int i = 1; i <= m; i++)
- {
- _30_j(t1, a, n, i);
- _30_j(t2, b, n, m - i + 1);
- _30_e(t3, t1, n, n, t2, n);
- _30_j(t4, c, n, 1);
- _30_d(c, t4, t3, n, n);
- }
- _mer2(t1, n);
- _mer2(t2, n);
- _mer2(t3, n);
- _mer2(t4, n);
- }
- void _32(double** a, double** b, double** c, double** d, int n, double**& x, double**& y)
- {
- double** t1 = _mec2(n);
- double** t2 = _mec2(n);
- double** t3 = _mec2(n);
- double** t4 = _mec2(n);
- _30_e(t3, a, n, n, d, n);
- _30_e(t4, b, n, n, c, n);
- _30_d(y, t3, t4, n, n);
- _30_e(t1, a, n, n, c, n);
- _30_e(t2, b, n, n, d, n);
- _30_g(t2, t2, n, n, -1);
- _30_d(x, t3, t4, n, n);
- _mer2(t1, n);
- _mer2(t2, n);
- _mer2(t3, n);
- _mer2(t4, n);
- }
- int main()
- {
- int m = _n();
- int n = _n();
- double** a = _mec2(m);
- _cin2(a, m);
- double** b = _mec2(m);
- _cin2(b, m);
- double** x = _mec2(m, m);
- _30_e(x, a, m, m, b, m);
- _cout2(x, m, m);
- _mer2(x, m);
- _mer2(a, m);
- _mer2(b, m);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement