Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- http://algorithmlib.org/rotation_slay
- #include <iomanip>
- #include<iostream>
- #include <math.h>
- #include <vector>
- using namespace std;
- void prnt(vector<vector<double>> &matrix){
- int i, j;
- for (i = 0; i < matrix.size(); i++){
- for (j = 0; j < matrix[i].size(); j++){
- cout << matrix[i][j] << fixed << setprecision(8)<< " ";
- }
- cout << "\n";
- }
- cout << "\n";
- }
- void TUDA_SUDA(vector<vector<double>>&A, vector<double>&otv){// метод вращения
- int n = A.size();
- int count = 0;
- for (int k = 0; k < n; k++){
- for (int i = k + 1; i < n; i++){
- double cos = A[k][k] / sqrt(A[k][k] * A[k][k] + A[i][k] * A[i][k]); //sqr(cos) + sqr(sin) = 1;
- double sin = A[i][k] / sqrt(A[k][k] * A[k][k] + A[i][k] * A[i][k]); //
- for (int j = k; j <= n; j++){
- double prm = cos*A[k][j] + sin*A[i][j];
- A[i][j] = -sin*A[k][j] + cos*A[i][j];
- A[k][j] = prm;
- prnt(A);
- }
- cout << "Q " << count++ << " A\n";
- prnt(A);
- }
- }
- //Обратный ход:
- otv[n - 1] = A[n - 1][n] / A[n - 1][n - 1];
- A[n - 1][n] = otv[n - 1];
- for (int i = n - 2; i >= 0; i--){
- for (int j = i + 1; j < n; j++)
- {
- otv[i] = A[i][n] - otv[j] * A[i][j];
- A[i][n] = otv[i];
- }
- otv[i] /= A[i][i];
- }
- }
- int main(){
- setlocale(LC_ALL, "rus");
- int n, m;
- cout << "размерность: ";
- cin >> n;
- m = n + 1;
- vector<vector<double>> Ab(n, vector<double>(m));
- /*Ab[0] = { -93.6, 23.8, 13.7, 10 };
- Ab[1] = { 11.14, 23.18, 41.3, 15.9 };
- Ab[2] = { 13, 15.3, 19.3, 32.6 };*/
- //0.686098 4.43678 -2.29026
- for (int i = 0; i < Ab.size (); i++){
- for (int j = 0; j < Ab[i].size (); j++){
- cin >> Ab[i][j];
- }
- cout<<endl;
- }
- cout << "Начальная матрица.\n";
- prnt(Ab);
- system("pause");
- vector<double> X(n);
- TUDA_SUDA(Ab, X);
- cout << "Результат:\n";
- for (int i = 0; i < n; i++){
- cout << "x" << i + 1 << "=" << X[i] << endl;
- }
- system("pause");
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement