Условие
Даны квадратная матрица [latex]A[/latex] порядка [latex]n[/latex] и вектор [latex]b[/latex] c [latex]n[/latex] элементами. Получить вектор [latex]{ A }^{ 2 }b[/latex]
Тесты
n | A | b | Результат |
3 | 1 1 11 1 1
1 1 1 |
5 5 5 | 45 45 45 |
5 | 1 0 0 0 00 2 0 0 0
0 0 3 0 0 0 0 0 4 0 0 0 0 0 5 |
8 1 8 1 8 | 8 4 72 16 200 |
2 | 1 00 1 | 2 2 | 2 2 |
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 |
#include <iostream> using namespace std; int main() { int n; cin >>n; double matr1[n][n]; //Матрица А double matr2[n][n]; // Матрица А^2 double vet1[n]; //Вектор данный по условию (вектор b) double vet2[n]; //Конечный вектор for(int i=0;i<n;i++){ for(int j=0; j<n; j++) // Инициализация матрицы А cin>>matr1[i][j]; } for(int i=0; i<n;i++){ for(int j=0;j<n;j++){ //Возведение матрицы А в квадрат matr2[i][j]=0; for(int p=0;p<n;p++) matr2[i][j]+=(matr1[i][p]*matr1[p][j]); } } for(int i=0; i<n; i++) //Инициализация вектора cin >> vet1[i]; for(int i=0;i<n;i++){ vet2[i]=0; for(int j=0; j<n; j++){ vet2[i]+=matr2[i][j]*vet1[j]; //Умножение матрицы на вектор } } for(int i=0; i<n; i++) cout << vet2[i] << "\t"; //Вывод вектора cout << endl; return 0; } |
Алгоритм
Считываем матрицу. Возводим ее в квадрат ( перемножение матрицы осуществляется при помощи циклов). Считываем вектор. Умножаем матрицу на вектор. Выводим ответ.
Фактически, умножение матриц пишется по определению. Сумма произведений элементов строки на элементы столбцов.
Ссылка на ideone.com
Вроде правильно. Зачтено.