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';
- }
- vector<double> Gauss(vector<vector<double> > a) {
- vector<double> res(a.size());
- // Приведение к верхнетреугольному виду
- for (int i = 0; i < a.size(); i++) {
- if (a[i][i] == 0) {
- for (int j = i + 1; j < a.size(); j++) {
- if (a[i][j] != 0) {
- swap(a[i], a[j]);
- break;
- }
- }
- }
- for (int q = i + 1; q < a.size(); q++) {
- double k = a[q][i] / a[i][i];
- for (int j = 0; j < a[i].size(); j++) {
- a[q][j] -= a[i][j] * k;
- }
- }
- print(a);
- }
- // Решение СЛАУ
- for (int i = a.size() - 1; i >= 0; i--) {
- if (a[i][i] == 0) {
- vector<double> t;
- return t;
- }
- double x = a[i][a[i].size() - 1] / a[i][i];
- for (int j = i - 1; j >= 0; j--) {
- a[j][a[j].size() - 1] -= a[j][i] * x;
- }
- res[i] = x;
- }
- return res;
- }
- vector<vector<double> > trans(vector<vector<double> > a) {
- vector<vector<double> > b(a.size(), vector<double>(a[0].size(), 0));
- for (int i = 0; i < a.size(); i++) {
- b[i][i] = 1;
- }
- int n = a.size();
- for (int i = 0; i < a.size(); i++) {
- double k = a[i][i];
- for (int j = 0; j < n; j++) {
- a[i][j] = a[i][j] / k;
- b[i][j] = b[i][j] / k;
- }
- for (int q = i + 1; q < a.size(); q++) {
- double k = a[q][i] / a[i][i];
- for (int j = 0; j < a[i].size(); j++) {
- a[q][j] -= a[i][j] * k;
- b[q][j] -= b[i][j] * k;
- }
- }
- }
- for (int i = 1; i < n; i++) {
- for (int q = i - 1; q >= 0; q--) {
- double k = a[q][i] / a[i][i];
- for (int j = 0; j < a[i].size(); j++) {
- a[q][j] -= a[i][j] * k;
- b[q][j] -= b[i][j] * k;
- }
- }
- }
- return b;
- }
- 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];
- }
- }
- vector<double> ans = Gauss(a);
- if (ans.size() == 0) {
- cout << "No solution!";
- }
- else {
- for (int i = 0; i < ans.size(); i++) {
- printf("x%d = %.3f\n", i, ans[i]);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement