Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
2 / 2 / 0
Регистрация: 01.10.2018
Сообщений: 210

Вычислить матричное выражение

25.03.2019, 17:57. Показов 1057. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Заданы квадратные матрицы А и Б, нужно вычислить матрицу D заданную следующим выражением.
https://www.cyberforum.ru/cgi-bin/latex.cgi?D={A}^{n}+{A}^{n-1}*{B}^{1}+{A}^{n-2}*{B}^{2}+...+{A}^{2}*{B}^{n-2}+{A}^{1}*{B}^{n-1}+{B}^{n}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
25.03.2019, 17:57
Ответы с готовыми решениями:

Вычислить матричное выражение
Имеются две целочисленных матрицы A и B размера N×N (N − целочисленная константа). Вычислить матрицу С, если C=2A+B*A^T

Вычислить матричное выражение
Даны 3-ех элементные вещественные векторы x и y и квадратные матрицы A и B. Вычислить: (A 2 * x, y) + (B 2 * y, x) + (A * B * x, y)

Вычислить матричное выражение. [VISUAL STUDIO]
Народ, помогите, пожалуйста, с лабой: Дано выражение: e=(a+b*v)*C e, a, b, v - векторы, С - матрица. Нужно вычислить e. решение...

12
Диссидент
Эксперт C
 Аватар для Байт
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
25.03.2019, 18:51
DrKappa, Как и в обычной алгебре, это выражение равно https://www.cyberforum.ru/cgi-bin/latex.cgi?({A}^{n+1} - {B}^{n+1})*{(A - B)}^{-1}
Конечно, матрица A - B должна иметь обратную
0
2 / 2 / 0
Регистрация: 01.10.2018
Сообщений: 210
25.03.2019, 19:21  [ТС]
Байт, https://www.cyberforum.ru/cgi-bin/latex.cgi?{(A-B)}^{-1} это обратная матрица ?

Добавлено через 3 минуты
Байт, и как эта формула называется и где ее можно найти?
0
Диссидент
Эксперт C
 Аватар для Байт
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
25.03.2019, 19:23
Цитата Сообщение от DrKappa Посмотреть сообщение
это обратная матрица ?
Да.
И все это хорошо, если выполняется условие. А ежели нет, придется тупо вычислять... И, наверное, рекурсию попробовать применить. Ибо обидно, уже вычислив An все вычисления повторять для An-1 ...
0
2 / 2 / 0
Регистрация: 01.10.2018
Сообщений: 210
25.03.2019, 19:34  [ТС]
Байт, а можно ли применить эту формулуhttps://www.cyberforum.ru/cgi-bin/latex.cgi?{(x+y)}^{n}={x}^{n}+{x}^{n-1}{y}^{1}+...+{x}^{1}{y}^{n-1}+{y}^{n}?
0
Диссидент
Эксперт C
 Аватар для Байт
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
25.03.2019, 19:37
Цитата Сообщение от DrKappa Посмотреть сообщение
Как эта формула называется
Это обобщеная формула сокращенных умножений. Вспомни школу
a2 - b2 = (a-b)(a+b)
a3 - b3 = (a-b)(a2+ab+b2)
....
Только прочтенная обратно
Для произвольного n доказывается рассмотрением суммы геометрической прогрессии.
А арифметика всюду одинакова - что для чисел, что для матриц.
Одна беда. В числах нельзя делить только на 0. А в матрицах еще на много чего. Конкретно - на матрицы с нулевым определителем.

Добавлено через 1 минуту
Цитата Сообщение от DrKappa Посмотреть сообщение
можно ли применить эту формулу
Нет, просто потому, что она неверна. Проверь для квадрата.
0
2 / 2 / 0
Регистрация: 01.10.2018
Сообщений: 210
25.03.2019, 20:02  [ТС]
Байт,
Цитата Сообщение от Байт Посмотреть сообщение
И все это хорошо, если выполняется условие. А ежели нет, придется тупо вычислять... И, наверное, рекурсию попробовать применить. Ибо обидно, уже вычислив An все вычисления повторять для An-1 ...
Что за условие?
0
Диссидент
Эксперт C
 Аватар для Байт
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
25.03.2019, 21:10
Цитата Сообщение от DrKappa Посмотреть сообщение
Что за условие?
Цитата Сообщение от Байт Посмотреть сообщение
матрица A - B должна иметь обратную
.....
0
Эксперт по математике/физике
4182 / 3052 / 918
Регистрация: 19.11.2012
Сообщений: 6,196
26.03.2019, 06:44
DrKappa, Предлагаю такой рекуррентный процесс:
https://www.cyberforum.ru/cgi-bin/latex.cgi?F_0=E,\ G_0=E,\\F_{n+1}=AF_n,\ G_{n+1}=F_{n+1}+G_nB,
который и вычислит ваше выражение. И хочу предостеречь вас здесь от всяких формул. Большинство из них требует, чтобы матрицы А и В коммутировали.
2
Диссидент
Эксперт C
 Аватар для Байт
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
26.03.2019, 11:40
Цитата Сообщение от kabenyuk Посмотреть сообщение
требует, чтобы матрицы А и В коммутировали.
Да, об этом как-то не подумал...
DrKappa, все мои рассуждения по поводу формул - ошибочны.
Цитата Сообщение от Байт Посмотреть сообщение
арифметика всюду одинакова - что для чисел, что для матриц.
Вот это утверждение неверно. У матриц в общем случае нет коммутативности.
0
2 / 2 / 0
Регистрация: 01.10.2018
Сообщений: 210
26.03.2019, 13:41  [ТС]
kabenyuk, мне нужно процесс вычисления матриц записать с использованием функций, но никак не получается
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
#include "pch.h"
#include <iostream>
using namespace std;
//void setD();
void mult(int **Mas1, int **Mas2, int& SIZE, int **Temp);
void Xmult(int **Mas, int &SIZE, int **Temp, int &N);
int main()
{
    int n = 0;
    cout << "vvedite n" << endl;
    cin >> n;
    int **a = new int*[n];
    for (int i = 0; i < n; ++i) {
        a[i] = new int[n];
    }
    cout << "Matrix:" << endl;
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) {
            cin >> a[i][j];
        }
    }
 
    int **b = new int*[n];
    for (int i = 0; i < n; ++i) {
        b[i] = new int[n];
    }
    cout << "Matrix:" << endl;
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) {
            cin >> b[i][j];
        }
    }
 
    int  **c= new int*[n];// буферная матрица
    for (int i = 0; i < n; i++)
    {
        c[i] = new int[n];
        
    }
    int  **f = new int*[n];// буферная матрица
    for (int i = 0; i < n; i++)
    {
        f[i] = new int[n];
 
    }
    
 
    int **D = new int*[n];
    for (int i = 0; i < n; i++)
    {
        D[i] = new int[n];
 
    }
    
    int N = 0;
    // void setD()   функция вычисляющая D
    
    for (int i = 0; i <n;i++)
    {
        for (int j = 0; j < n;j++)
        {
            cout << D[i][j];
        }
    }
 
 
    return(0);
}
/*void setD()
{
    
    cout << "vvedite N" << endl;
    cin >> N;
    
 
}*/
 
void mult(int **Mas1, int **Mas2, int& SIZE, int **Temp)
{
    for (int i = 0; i < SIZE; i++)
    {
        for (int j = 0; j < SIZE; j++)
        {
            Temp[i][j] = 0;
            for (int k = 0; k < SIZE; k++)
                Temp[i][j] += Mas1[i][k] *Mas2[k][j];
            
        }
    }
}
void Xmult(int **Mas, int &SIZE, int **Temp,int &N)
{
    if (N >0)
    {
        for (int k = 0; k < N - 1; k++)
            for (int i = 0; i < SIZE; i++)
            {
                for (int j = 0; j < SIZE; j++)
                {
                    Temp[i][j] = 0;
                    for (int k = 0; k < SIZE; k++)
                        Temp[i][j] += Mas[i][k] * Mas[k][j];
 
                }
            }
    }
    else {
        for (int i = 0; i < SIZE; i++)
        {
            for (int j = 0; j < SIZE; j++)
            {
                Temp[i][j] = 1;
            }
        }
    }
}
0
Диссидент
Эксперт C
 Аватар для Байт
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
26.03.2019, 14:11
DrKappa, простите, не очень разобрался в вашем коде. хотя общее впечатление благоприятное.
Смутила строчка 95. Почему k < N-1 ? Может быть k < N ? Но это - взгляд вскользь
0
2 / 2 / 0
Регистрация: 01.10.2018
Сообщений: 210
26.03.2019, 17:54  [ТС]
Байт, я неправильно записал функцию, вот верный код вычисляющий степень, спасибо что заметили.
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
#include "pch.h"
#include <iostream>
using namespace std;
//void setD();
void mult(int **Mas1, int **Mas2, int& SIZE, int **Temp);
void Xmult(int **Mas, int &SIZE, int **Temp1, int &N, int **Temp2);
int main()
{
    int n = 0;
    cout << "vvedite n" << endl;
    cin >> n;
    int **a = new int*[n];
    for (int i = 0; i < n; ++i) {
        a[i] = new int[n];
    }
    cout << "Matrix:" << endl;
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) {
            cin >> a[i][j];
        }
    }
 
    int **b = new int*[n];
    for (int i = 0; i < n; ++i) {
        b[i] = new int[n];
    }
    cout << "Matrix:" << endl;
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) {
            cin >> b[i][j];
        }
    }
 
    int  **c = new int*[n];// буферная матрица
    for (int i = 0; i < n; i++)
    {
        c[i] = new int[n];
 
    }
    int  **f = new int*[n];// буферная матрица
    for (int i = 0; i < n; i++)
    {
        f[i] = new int[n];
 
    }
 
 
    int **D = new int*[n];
    for (int i = 0; i < n; i++)
    {
        D[i] = new int[n];
 
    }
 
    int N = 0;
 
    // void setD()   функция вычисляющая D
 
        //Вывод результата
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) {
            cout << D[i][j] << ' ';
        }
        cout << endl;
    }
 
    return(0);
}
/*void setD()
{
 
    cout << "vvedite N" << endl;
    cin >> N;
 
 
}*/
 
void mult(int **Mas1, int **Mas2, int& SIZE, int **Temp)
{
    for (int i = 0; i < SIZE; i++)
    {
        for (int j = 0; j < SIZE; j++)
        {
            Temp[i][j] = 0;
            for (int k = 0; k < SIZE; k++)
                Temp[i][j] += Mas1[i][k] * Mas2[k][j];
 
        }
    }
}
void Xmult(int **Mas, int &SIZE, int **Temp1, int &N,int **Temp2)
{
    for (int i = 0; i < SIZE; i++)
    {
        for (int j = 0; j < SIZE; j++)
        {
            Temp1[i][j] = Mas[i][j];
        }
    }
    if (N > 0)
    {
        for (int it = 1; it < N; it++) {
            for (int i = 0; i < SIZE; i++)
            {
                for (int j = 0; j < SIZE; j++)
                {
                    Temp2[i][j] = 0;
                    for (int k = 0; k < SIZE; k++) {
                        Temp2[i][j] += Mas[i][k] * Temp1[k][j];
                    }
                }
            }
            for (int i = 0; i < SIZE; i++) {
                for (int j = 0; j < SIZE; j++) {
                    Temp1[i][j] = Temp2[i][j]; //Заменяем вспомогательную матрицу
                }
            }
        }
    }
    else {
        for (int i = 0; i < SIZE; i++)
        {
            for (int j = 0; j < SIZE; j++)
            {
                Temp2[i][j] = 1;
            }
        }
    }
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
26.03.2019, 17:54
Помогаю со студенческими работами здесь

Заданы две матрицы A и B. Нужно вычислить матричное выражение
Привет всем, нужна помощь. Вообщем задание: Заданы две квадратные матрицы A и B. Нужно вычислить...

Вычислить выражение
cos^n-1

Вычислить выражение n++*m
Есть математическое действие: n++*m Человек вводить значение n и m, а программа выполняет n++*m и выводит результат на экран. Напишите...

Вычислить выражение
вычислить выражение пожайлуста не сильно мудрите))) с решением

Вычислить выражение
Составить программу вычисления выражения в правой части. Все значения для вычисления ввести с клавиатуры. Все значения для вычисления...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Вывод данных через динамический список в справочнике
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Функция заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
10 пpимет, которые всегда сбываются
Maks 31.03.2026
1. Чтобы, наконец, пришла маршрутка, надо закурить. Если сигарета последняя, маршрутка придет еще до второй затяжки даже вопреки расписанию. 2. Нaдоели зима и снег? Не надо переезжать. Достаточно. . .
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 31.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO Апнулись до NET10. Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта так и в интерактивном режиме. из сложностей - чисто функциональный подход. Решил. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru