2 / 2 / 0
Регистрация: 20.05.2021
Сообщений: 37
1

Решение СЛАУ методом квадратного корня

28.03.2022, 15:29. Показов 220. Ответов 0
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброго времени суток! очень нужна ваша помощь! Разбирали как-то одну программу, вся проблема в том, что я не пойму что мы делаем в каждом шаге, объяснили но как-то плохо, не дошло до меня(вот такой я глупый сапожок).Будьте добры, объясните алгоритм - как мы находим верхне и нижне треугольную матрицу? как находим обратную матрицу?
Буду очень благодарна за помощь!
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
#include <iostream>
#include <iomanip>
#include <fstream>
#include <locale.h>
#include <math.h>
using namespace std;
int main()
{setlocale(LC_ALL,"Russian");
int n=6;
int i,j,k,m; float NormA, NormAob, Chislo;
float A[n][n],G1[n][n],G2[n][n], E[n][n], Yf[n][n], Aob[n][n] , AAob[n][n];
float b[n],r[n],y[n],x[n], Norm[n], Normob[n], pk, pk1, pk2, sum, detA, detG;
m=n;
ifstream f("вариант2.txt",ios::in);
 //считываем  матрицу A и вектор-столбец b
    for(i = 0; i < m; i++)
    {for(j = 0; j < m; j++)
        {f >> A[i][j];
        cout << A[i][j]<<" ";}
        cout << "\n";}
    for(i = 0; i < m; i++)
    {f >> b[i];
        cout << b[i]<<" "; }
f.close(); // закрываем т.к. все что нужно мы считали
for(i=0; i<n; i++)
    {for(j=0; j<n; j++)
    {if(i==j)
    {E[i][j]=1;} else E[i][j]=0;} }
 // Найдем норму матрицы A
 for(i=0; i<n; i++)
    {Norm[i]=0;
    for(j=0; j<n; j++)
        {Norm[i]=Norm[i]+fabs(A[i][j]);}}
 NormA=Norm[0];
 for(i=0; i<n; i++)
    {if(Norm[i]>NormA){NormA=Norm[i];}}
//Нахождение матрицы G1 и G2
    G1[0][0]=sqrt(A[0][0]);
    for (j=1; j< m; j++)
        G1[0][j]=A[0][j]/G1[0][0];
    for (i = 1;i < m; i++)
     for(j=0; j<m; j++)
     {if (i==j)
    {   sum=0;
        for (k = 0; k < i; k++ )
            sum=sum + G1[k][i]*G1[k][i];
        pk=A[i][i]-sum;
        G1[i][i]=sqrt(pk);}
        if(i<j){
            sum=0;
            for (k = 0; k < i; k++)
                sum=sum + G1[k][i]*G1[k][j];
            pk=A[i][j]-sum;
            G1[i][j]=pk/G1[i][i];}
        if(i>j) G1[i][j]=0;}
 // нахождение матрицы G2
    for (i=0; i<m; i++)
        for (j=0; j<m ; j++)
            G2[i][j]=G1[j][i];
//Решение G1*y=b
    y[0]=b[0]/G1[0][0];
    for (i=1; i<m; i++)
    {   sum=0;
        for (k=0; k<i; k++)
            sum=sum+G1[k][i]*y[k];
        pk=b[i]-sum;
        y[i]=pk/G1[i][i];}
//Решение G2*x=y
    x[m-1]=y[m-1]/G1[m-1][m-1];
    for (i=m-2; i>=0; i--)
    {   sum=0;
        for (k=i+1; k<m; k++)
            sum=sum+G1[i][k]*x[k];
        pk=y[i]-sum;
        x[i]=pk/G1[i][i];}
// Проверка правильности решения r=A*x-b
    for (i=0; i<m; i++)
    {r[i]=0;
        for (j=0; j < m; j++)
            r[i]=r[i]+A[i][j]*x[j];
        r[i]=r[i]-b[i];}
    cout << "\n";
    for (i=0; i<m ; i++)
    cout << y[i]<< " ";
    cout << "\n";
    for (i=0; i<m ; i++)
    cout << r[i]<< " ";
    detG=1;
    for(i=0; i<m; i++) {
    detG=detG*G1[i][i];}
    detA=detG*detG;
    // Ищем обратную матрицу
    for(int t=0; t<n; t++)
    {Yf[0][t]=E[0][t]/G1[0][0];
      for(i=1; i<n; i++)
        {sum=0; for(k=0; k<i; k++)
    sum=sum+G1[k][i]*Yf[k][t];
    pk1=E[i][t]-sum;
     Yf[i][t]=pk1/G1[i][i];};
       Aob[n-1][t]= Yf[n-1][t]/G1[n-1][n-1];
     for(i=n-2; i>=0; i--){sum=0;
        for (k=i+1; k<n; k++)
            sum=sum+G1[i][k]*Aob[k][t];
        pk2=Yf[i][t]-sum;
        Aob[i][t]=pk2/G1[i][i];}}
  // Найдем норму обратной матрицы Aob
 for(i=0; i<n; i++)
    {Normob[i]=0;
 for(j=0; j<n; j++)
    {Normob[i]=Normob[i]+fabs(Aob[i][j]);}}
 NormAob=Normob[0];
 for(i=0; i<n; i++)
    {if(Normob[i]>NormAob)
    {NormAob=Normob[i];}}
 // число обусловленности
 Chislo=NormA*NormAob;
 // Перемножение матрицы A и обратной к ней Aob
 for(i=0; i<n; i++)
    {for(j=0; j<n; j++)
    {AAob[i][j]=0;
    for(k=0; k<n; k++)
        AAob[i][j]+=A[i][k]*Aob[k][j];}}
    //записываем все в файл
    ofstream f1("Результат0.txt",ios::out);
    f1<< "Массив y ="<<endl;
    for (i=0; i<m ; i++)
    f1 << setw(15)<<y[i];
    f1 << "\n";
    f1<< "Массив x ="<<endl;
    for (i=0; i<m ; i++)
    f1 << setw(15)<<x[i];
    f1 << "\n";
    f1<<"Матрица G1 =" <<endl;
    for(i=0; i<m; i++)
    {for(j=0; j<m; j++)
    f1 <<setw(15)<< G1[i][j];
    f1 << "\n";};
f1<<"Матрица G2 ="<< endl;
    for(i=0; i<m; i++)
    {for (j=0; j<m; j++)
    f1 << setw(15)<<G2[i][j];
    f1 << "\n";};
    f1<< "Массив r ="<< endl;
    for (i=0; i<m ; i++)
    f1 << setw(15)<<r[i];
f1<<endl<< "detA = "<< detA<< endl;
    f1<<endl<<"Норма исходной матрицы= "<<NormA<< endl;
    f1<<endl<<"Норма обратной матрицы= "<<NormAob<< endl;
    f1<<endl<<"Число обусловленности= "<<Chislo<< endl;
    f1<<"Матрица Yf ="<< endl;
    for(i=0; i<m; i++)
        {for (j=0; j<m; j++)
    f1 << setw(15)<<Yf[i][j];
    f1 << "\n";};
     f1<<" Обратная матрица Aob ="<< endl;
    for(i=0; i<m; i++)
     {for (j=0; j<m; j++)
    f1 << setw(15)<<Aob[i][j];
    f1 << "\n";};
    f1<<"Матрица A*Aob ="<< endl;
    for(i=0; i<n; i++)
    {for (j=0; j<n; j++)
    f1 << setw(15)<<AAob[i][j];
    f1 << "\n";};
f1.close();
 return 0;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.03.2022, 15:29
Ответы с готовыми решениями:

Решение СЛАУ методом квадратного корня
Здравствуйте!Помогите мне,пожалуйста. Суть задания написана в теме.Есть блок-схема для данного...

Решение СЛАУ с симметричной матрицей методом квадратного корня
1) Написать вычислительную программу на языке программирования С++ для решения СЛАУ с симметричной...

СЛАУ(метод квадратного корня)
Ребят, помогите с кодом, есть система вида Аx=b , где A - матрица (n*n), b - вектор, x - вектор...

Решение СЛАУ методом отражений
Всем привет. Задали писать курсач. Нужно реализовать метод отражения. Предусмотреть ввод числа...

0
28.03.2022, 15:29
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.03.2022, 15:29
Помогаю со студенческими работами здесь

Решение СЛАУ методом Крамера
Доброго времени суток! Пишу курсовую по методу Крамера. Вроде ничего сложного, но...

Решение СЛАУ методом Якоби
Пытаюсь реализовать метод решения системы линейных уравнений методом Якоби. #include &quot;stdafx.h&quot;...

Решение СЛАУ методом Гаусса
помогите разобраться!!ВЫдает 85 ошибок!!!! #include &lt;stdio.h&gt; #include &lt;conio.h&gt; #include...

Решение СЛАУ методом прогонки
Добрый день,нужно решить СЛАУ методом прогонки,вот СЛАУ и ее решение. коэфф перед х1считается как...

Решение СЛАУ методом Якоби
Решить СЛАУ методом Якоби. Вывести значения решения, график зависимости нормы невязки от номера...

Решение СЛАУ методом Гаусса
У меня программа для решения слау методом Гаусса с выбором главного элемента по столбцам. Что-то...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru