Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <vector>
- #include <iostream>
- std::vector<double> gauss(std::vector<std::vector<double>> X, std::vector<double> Y)
- {
- // Uwaga funkcja zmienia wartości X i Y
- // Dlatego polecam używać wywoływania przez wartość
- // Samo stworzy ładną kopię
- const int n = X.size();
- for(int i{0}; i<n-1; i++)
- {
- for(int row{i+1}; row<n; row++)
- {
- double ulamek = X[row][i] / X[i][i];
- Y[row] -= ulamek * Y[i];
- for (int col{0}; col<n; col++)
- X[row][col] -= ulamek * X[i][col];
- }
- }
- // Tablica na xi
- std::vector<double> xi{};
- // Domyślnie ustawia wartości na 0
- xi.resize(n);
- xi[n-1] = Y[n-1]/X[n-1][n-1];
- for (int i{n-2}; i>-1; i--)
- {
- double x = Y[i];
- for (int j{n-1}; j>-1; j--)
- x -= X[i][j] * xi[j];
- xi[i] = x/X[i][i];
- }
- return xi;
- }
- int main()
- {
- std::vector<std::vector<double>> X {
- {1,2,-1},
- {3,4,1},
- {2,-2,3}
- };
- std::vector<double> Y = {5, 9, -1};
- auto xi{ gauss(X,Y) };
- for (const auto& x: xi)
- std::cout << x << std::endl;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement