Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <vector>
- using namespace std;
- void print(vector<vector<double> > a) {
- for (int i = 0; i < a.size(); i++) {
- for (int j = 0; j < a[i].size(); j++) {
- printf("%.3f ", a[i][j]);
- }
- cout << '\n';
- }
- cout << '\n';
- }
- void Progonka(vector<vector<double> > a) {
- vector<double> A(a.size());
- vector<double> B(a.size());
- vector<double> y(a.size());
- y[0] = a[0][0];
- A[0] = -a[0][1] / a[0][0];
- B[0] = a[0][a[0].size() - 1] / a[0][0];
- for (int i = 1; i < a.size() - 1; i++) {
- y[i] = a[i][i] + a[i][i - 1] * A[i - 1];
- A[i] = -a[i][i + 1] / y[i];
- B[i] = (a[i][a[i].size() - 1] - a[i][i - 1] * B[i - 1]) / y[i];
- }
- int l = a.size() - 1;
- y[l] = a[l][l] + a[l][l - 1] * A[l - 1];
- B[l] = (a[l][a[l].size() - 1] - a[l][l - 1] * B[l - 1]) / y[l];
- vector<double> ans(a.size());
- ans[l] = B[l];
- for (int i = l - 1; i >= 0; i--) {
- ans[i] = A[i] * ans[i + 1] + B[i];
- }
- printf("vector A: ");
- for (int i = 0; i < A.size(); i++) {
- printf("%.2f ", A[i]);
- }
- printf("\nvector B: ");
- for (int i = 0; i < B.size(); i++) {
- printf("%.2f ", B[i]);
- }
- for (int i = 0; i < ans.size(); i++) {
- printf("%.2f ", ans[i]);
- }
- }
- vector<double> mul(vector<vector<double> > a, vector<double> b) {
- vector<double> c(b.size());
- for (int i = 0; i < b.size(); i++) {
- for (int q = 0; q < b.size(); q++) {
- c[i] += b[q] * a[i][q];
- }
- }
- return c;
- }
- vector<double> add(vector<double> a, vector<double> b) {
- vector<double> c(a.size());
- for (int i = 0; i < a.size(); i++) {
- c[i] = a[i] + b[i];
- }
- return c;
- }
- void Iter(vector < vector < double> > a)
- {
- int n = a.size();
- vector<vector<double> > A(n, vector<double>(n, 0));
- vector<double> B(n);
- vector<double> x(n);
- for (int i = 0; i < n; i++) {
- B[i] = a[i][a[i].size() - 1] / a[i][i];
- for (int j = 0; j < n; j++) {
- if (i == j) {
- A[i][j] = 0;
- }
- else
- A[i][j] = -a[i][j] / a[i][i];
- }
- }
- x = B;
- for (int q = 0; q < 10; q++) {
- x = add(B, mul(A, x));
- }
- for (int i = 0; i < x.size(); i++) {
- printf("%.2f ", x[i]);
- }
- }
- int main() {
- int n, m;
- cin >> n >> m;
- vector<vector<double> > a(n, vector<double>(m));
- for (int i = 0; i < n; i++) {
- for (int j = 0; j < m; j++) {
- cin >> a[i][j];
- }
- }
- Iter(a);
- //Progonka(a);
- }
- /*
- 3 4
- 2 -1 0 3
- 5 4 2 6
- 0 1 -3 2
- 2 3
- 2 3 5
- 3 2 7
- 3 4
- 10 1 1 12
- 2 10 1 13
- 2 2 10 14
- */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement