есть задача:
Дано две квадратические матрицы A и D, (n = 3) . Вычислить Матрицу:
C = A * B + D * A
, где элементы матрицы B делаются за формулою ,
Умножения матрицы на матрицу сделать у виде подпрограммы.
единственное что не ясно с задачи - как сделать матрицу B ?
думал так вот:
const int n = 3;
...
for (int i = 0 ; i < n; i++)
{
for (int j = 0 ; j < n; j++)
{
if ( i < j)
{
arrayB[i][j] = 1 / (i + j -1) ;
}
else
{
arrayB[i][j] = 1 / (i + j + 1) ;
}
}
}
...
Картинку присоедини к посту, она не открывается: "You don't have permission to access /lab12.GIF on this server."
for (int i = 0 ; i < n; i++) {
for (int j = 0 ; j < n; j++) {
arrayB[i][j] = 1 / (i + j + (i < j ? -1 : 1));
}
}
volvo , моя ошибка была в том что я матрицу B обявил как int , а там же получается надо например double ...
но сделал я все таки вот так :
const int n = 3;
double b[n][n];
int i, j;
for (i = 0; i < n; i++)
{
b[i][i] = 0;
for (j = 0; j < i; j++)
b[i][j] = ( i+j == 1 ? 0 : 1./(i+j-1) );
for (j = i+1; j < n; j++)
b[i][j] = 1./(i+j+1);
}
теперь вопрос как умножить две матрицы ?
поискал гуглом нашел такое:
http://forum.codenet.ru/showpost.php?p=163393&postcount=9
но дык, это ж не правильно ?!
я вот посмотрел как матрицы умножаютмя на: http://ru.wikipedia.org/wiki/Матрица_(математика) (там написано Умножение матриц не коммутативно!)
я понимаю как матрицы умножаются на "бумаге" .
но не могу сделать алгоритм ...
Эскизы прикрепленных изображений
#include <iostream>
#include <conio>
#include <iomanip>
using namespace std;
const int n = 3;
double MatrixIncrease(double A[n][n], double B[n][n], double C[n][n])
{
for(int i = 0; i < n; i++)
for(int j = 0; j < n; j++)
{
C[i][j] = 0;
for(int k = 0; k < n; k++)
C[i][j] += (A[i][k] * B[k][j]);
}
return C[n][n];
}
double MatrixAddition(double A[n][n], double B[n][n], double C[n][n])
{
for(int i = 0; i < n; i++)
for(int j = 0; j < n; j++)
{
C[i][j] =0;
for(int k = 0; k < n; k++)
C[i][j] += (A[i][k] + B[k][j]);
}
return C[n][n];
}
int main(int argc, char* argv[])
{
clrscr();
randomize();
double arrayA[n][n];
double arrayB[n][n];
double arrayC[n][n];
double arrayD[n][n];
double arrayTMP1[n][n];
double arrayTMP2[n][n];
for (int i=0; i < n; i++)
{
for (int j=0; j < n; j++)
{
arrayA[i][j] = random(30) ;
arrayD[i][j] = random(50) ;
}
}
for (int i = 0; i < n; i++)
{
arrayB[i][i] = 0;
for (int j = 0; j < i; j++)
arrayB[i][j] = ( i+j == 1 ? 0 : 1./(i+j-1) );
for (int j = i+1; j < n; j++)
arrayB[i][j] = 1./(i+j+1);
}
cout << "Matrix A: \n" << endl;
for( int i = 0; i<n ; i++ )
{
for( int j = 0 ; j < n ; j++ )
cout << setw(4) << arrayA[i][j];
cout << "\n\n";
}
cout << "Matrix D: \n" << endl;
for( int i = 0; i<n ; i++ )
{
for( int j = 0 ; j < n ; j++ )
cout << setw(4) << arrayD[i][j];
cout << "\n\n";
}
cout << "Matrix B: \n" << endl;
for( int i = 0; i<n ; i++ )
{
for( int j = 0 ; j < n ; j++ )
cout << setw(11) << arrayB[i][j];
cout << "\n\n";
}
// A*B
MatrixIncrease(arrayA, arrayB, arrayTMP1);
// D*A
MatrixIncrease(arrayD, arrayA, arrayTMP2);
// C = A*B + D*A
MatrixAddition( arrayTMP1 , arrayTMP2 , arrayC);
cout << "Matrix C: \n" << endl;
for( int i = 0; i<n ; i++ )
{
for( int j = 0 ; j < n ; j++ )
cout << setw(11) << arrayC[i][j];
cout << "\n\n";
}
system("pause");
return 0;
}