@Annie96

Оперции на матрешками или что именно не так?

Задача реализовать C=((At)^2)*Bt
Словами. Матрица С = А транспонированная в квадрате * В транспонированная
Не получается умножение, как следствие А транспонированная в квадрат возвести
#include "stdafx.h"
#include <clocale>
#include <iostream>
#define size 2
using namespace std;

void main()
{
	setlocale(LC_ALL, "Russian");
	int i = 0;
	int j = 0;
	int A[size][size], At[size][size], At2[size][size], B[size][size], Bt[size][size], C[size][size];
	
	
	//Вводим А
	cout << "A" << endl;
	for (int i = 0; i < size; i++)
	{
		for (int j = 0; j < size; j++)
		{
			cout << "[" << i + 1 << "][" << j + 1 << "]: ";
			cin >> A[i][j];
		}
	}
	//Показать, что ввели А
	cout << "Введённая матрица А:"<<endl;
	for (int i = 0; i < size; i++)
	{
		for (int j = 0; j < size; j++)
		{
			cout << A[i][j] << " ";
		}
		cout << endl;
	}
	//Вводим В
	cout << "B" << endl;
	for (int i = 0; i < size; i++)
	{
	for (int j = 0; j < size; j++)
			{
				cout << "[" << i + 1 << "][" << j + 1 << "]: ";
				cin >> B[i][j];
			}
	}
	//Показать, что ввели В
		cout << endl;
		cout << "Введённая матрица В:" << endl;
		for (int i = 0; i < size; i++)
		{
			for (int j = 0; j < size; j++)
			{
				cout << B[i][j] << " ";
			}
			cout << endl;
		}
		// транспонируем матрицу A
			for (int i = 0; i < size; i++)
			{
				for (int j = 0; j < size; j++)
				{
					At[i][j] = A[j][i];
				}
			}
			// транспонируем матрицу B
			for (int i = 0; i < size; i++)
			{
				for (int j = 0; j < size; j++)
				{
					Bt[i][j] = B[j][i];
				}
			}
			//Показать транспонированную А
			cout << endl;
			cout << "А транспонированная: ";
			cout << endl;
			for (int i = 0; i < size; i++){
				for (int j = 0; j < size; j++)
				{
					cout << At[i][j] << " ";
				}
				cout << endl;
			}
			//Показать транспонированную В
			cout << endl;
			cout << "B транспонированная: ";
			cout << endl;
			for (int i = 0; i < size; i++){
				for (int j = 0; j < size; j++)
				{
					cout << Bt[i][j] << " ";
				}
				cout << endl;
			}

			// Умножаем матрицы, занося результат в массив C
			for (int i = 0; i < size; i++)
			{
				for (int j = 0; j < size; j++)
				{
					C[i][j] = At[i][j] * Bt[i][j] + At[i][j] * Bt[i][j];// +At[i][j] * Bt[i][j];
					cout << " " << C[i][j];
				}
				cout << endl;
			}
		system("pause");
		//return 0;
	}
  • Вопрос задан
  • 2315 просмотров
Пригласить эксперта
Ответы на вопрос 2
Spetros
@Spetros
IT-шник
Матрицы умножаются поэлементно строка на столбец, потом результаты умножения складываются. Их сумма - это значение одного элемента результирующей матрицы.
Это один из алгоритмов.
https://ru.wikipedia.org/wiki/%D3%EC%ED%EE%E6%E5%E...
Ответ написан
tsarevfs
@tsarevfs Куратор тега C++
C++ developer
Вы не транспонируете матрицу, там где думаете
At[i][j] = A[i][j];
Это просто копирование, а вывод правильный, потому что вы выводите
cout << At[j][i] << " ";

Если вы хотели написать умножение только для матриц 2*2, то нужно исправить:
C[i][j] = At[i][1] * Bt[1][j] + At[i][2] * Bt[2][j];

C[i][j] = скалярное произведение i строки At и j столбца Bt
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы