5 / 4 / 1
Регистрация: 14.02.2018
Сообщений: 583
1

Нахождение обратной матрицы

25.01.2019, 00:15. Показов 1994. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
помогите, пожалуйста, для моей матрицы найти обратную ?
моя матрица. Можно уменьшить код для нее?
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
void one_matrix(double y0, double y1, double y2, double y3, double t0, double max_t, double h) {
    const int n = 4; // размерность матрицы
 
    //единичная матрица
    double a[n][n];
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) {
            if (i == j) a[i][j] = 1;
            else a[i][j] = 0;
        }
    }
 
    // якобиан системы
    double jac[n][n];
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) {
            jac[0][0] = (2 * (y2 * (y0 - 0.1) - 50000000.0 * (y1 - 1.0))) / (1.0 - y1);
            jac[0][1] = ((y0 - 0.2)*y0 * y2) / pow((1.0 - y1), 2);
            jac[0][2] = ((y0 - 0.2)*y0) / (1.0 - y1);
            jac[0][3] = 0.0;
            jac[1][0] = y2;
            jac[1][1] = 0.0;
            jac[1][2] = y0;
            jac[1][3] = 0.0;
            jac[2][0] = y3;
            jac[2][1] = 0.0;
            jac[2][2] = 0.0;
            jac[2][3] = y0;
            jac[3][0] = (5 * pow(10, 29)*(exp(-0.75 / y0))*(1.5 + y0)) / pow(y0, 3 / 2);
            jac[3][1] = 0.0;
            jac[3][2] = 0.0;
            jac[3][3] = 0.0;
        }
    }
 
    //умножение матрицы на число
    //cout << "\numn:\n";
    double umn[n][n];
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) {
            jac[i][j] *= (h / 2);
            umn[i][j] = jac[i][j];
            //cout << umn[i][j] << " ";
        }
        //cout << endl;
    }
    
    // моя матрица, к которой нужно найти обратную
    double temp[n][n];
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) {
            temp[i][j] = a[i][j] - umn[i][j];
            //temp[i][j] = a[i][j] - (h/2)*jac[i][j];
            cout << temp[i][j] << "\t\t";
        }
        cout << endl;
    }
}
нашла отдельный код для нахождения обратной матрицы
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
int SLAU(double **matrica_a, int n, double *massiv_b, double *x){
 
    int i, j, k, r;
    double c, M, max, s, **a, *b; 
    
    a = new double *[n];
    for (i = 0; i < n; i++) 
        a[i] = new double[n];
    
    b = new double[n]; 
    for (i = 0; i < n; i++)
        for (j = 0; j < n; j++) 
            a[i][j] = matrica_a[i][j];
 
    for (i = 0; i < n; i++) 
        b[i] = massiv_b[i];
 
    for (k = 0; k < n; k++) {
        max = fabs(a[k][k]);
        r = k;
        for (i = k + 1; i < n; i++)
            if (fabs(a[i][k]) > max) {
                max = fabs(a[i][k]);
                r = i;
            }
        for (j = 0; j < n; j++)
        {
            c = a[k][j];
            a[k][j] = a[r][j];
            a[r][j] = c;
        }
 
        c = b[k]; 
        b[k] = b[r]; 
        b[r] = c; 
        for (i = k + 1; i < n; i++)
        {
            for (M = a[i][k] / a[k][k], j = k; j < n; j++)
                a[i][j] -= M * a[k][j]; 
            b[i] -= M * b[k];
        }
    }
 
    if (a[n - 1][n - 1] == 0)
        if (b[n - 1] == 0) 
            return-1; 
        else return-2;
    else {
        for (i = n - 1; i >= 0; i--)
        {
            for (s = 0, j = i + 1; j < n; j++)
                s += a[i][j] * x[j]; x[i] = (b[i] - s) / a[i][i];
 
        }
        return 0;
    } 
    for (i = 0; i < n; i++) 
        delete[] a[i]; 
    delete[] a;
 
    delete[] b;
 
}
 
int INVERSE(double **a, int n, double **y) {
    int i, j, res; 
    double *b, *x; 
    b = new double[n]; 
    x = new double[n]; 
    for (i = 0; i < n; i++) {
        for (j = 0; j < n; j++)
            if (j == i)
                b[j] = 1; 
            else
                b[j] = 0;
        res = SLAU(a, n, b, x);    
        if (res != 0) break;
        else
            for(j = 0; j < n; j++)
                y[j][i] = x[j];
    }
          
    delete[] x;
    delete[] b;
 
    if (res != 0)   return -1;
    else return 0;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.01.2019, 00:15
Ответы с готовыми решениями:

Умножение матрицы на матрицу, и нахождение обратной матрицы
Здравствуйте! нужно написать программу, которая могла бы производить всякие операции над матрицами...

Нахождение обратной матрицы
Нужна помощь, уже сломал мозг, требуется ввод матрицы клавиатуры, затем она должна считать...

Нахождение обратной матрицы
Доброго времени суток! Напишите, пожалуйста, кому не сложно, простой, понятный код нахождения...

Нахождение обратной матрицы
Доброго времени суток! Помогите, пожалуйста, с нахождением обратной матрицы. Нашел такой код тут на...

1
5 / 4 / 1
Регистрация: 14.02.2018
Сообщений: 583
25.01.2019, 23:40  [ТС] 2
помогите пожалуйста...
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
25.01.2019, 23:40
Помогаю со студенческими работами здесь

Нахождение обратной матрицы
Доброго времени суток! Возникла необходимость найти обратную матрицу любым из способов, так как в...

Нахождение обратной матрицы
Здравствуйте, уважаемые программисты! Прощу помощи. Для заданной матрицы A(3,3), найти обратную А...

Нахождение обратной матрицы
Мне очень нужен код программы обратной матрицы.

Нахождение обратной матрицы
Здравствуйте!помогите с программой на языке си-она демонстрирует нахождение обратной матрицы.я...


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

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

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