„Mátrix (matematika)” változatai közötti eltérés

[nem ellenőrzött változat][nem ellenőrzött változat]
Tartalom törölve Tartalom hozzáadva
Egy példája C programnyelven megírt mátrix-szorzásnak
a áthelyezés külön szakaszba
200. sor:
\end{matrix},</math>
ahol például az eredménymátrix 5-ös elemét úgy kaptuk, hogy a sorában lévő (1,0,2) elemeket páronként összeszoroztuk az oszlopában lévő (3,2,1) elemekkel, majd összeadtuk őket.
===C nyelvű kódpélda===
Két mátrix összeszorzásának kódja [[ C (programozási nyelv)|C]]-ben:
 
<nowiki>#</nowiki>include <stdio.h>
 
<nowiki>#</nowiki>include <stdlib.h>
 
double A[1000][1000];
 
double B[1000][1000];
 
double AB[1000][1000];
 
int main () {
 
int m, n, k; //m-oszlop, n-sor (k-oszlop)
 
int i, j, p;
 
int sum=0;
 
printf("A matrix merete: ");
 
scanf("%d%d",&n, &m);
 
printf("B matrix oszlopai: ");
 
scanf("%d", &k);
 
printf("B matrix sorainak szama igy: %d\n", m);
 
printf("Adja meg az A matrixot:\n");
 
for (i=0; i<n; i++) //A matrix feltoltese
 
{
 
for(j=0; j<m; j++)
 
scanf("%lf", &A[i][j]);
 
}
 
printf("Adja meg a B matrixot:\n");
 
for (i=0; i<m; i++) //B matrix feltoltese
 
{
 
for(j=0; j<k; j++)
 
scanf("%lf", &B[i][j]);
 
}
 
printf("A matrix:\n");
 
for (i=0; i<n; i++) //A matrix kiiratasa
 
{
 
for(j=0; j<m; j++)
 
printf("%0.5lf ", A[i][j]);
 
printf("\n");
 
}
 
printf("B matrix:\n");
 
for (i=0; i<m; i++) //B matrix kiiratas
 
{
 
for(j=0; j<k; j++)
 
printf("%0.5lf ", B[i][j]);
 
printf("\n");
 
}
 
for ( i = 0 ; i < n ; i++ )
 
{
 
for ( j = 0 ; j < k ; j++ )
 
{
 
for ( p = 0 ; p < m ; p++ )
 
{
 
sum = sum + A[i][p]*B[p][j];
 
}
 
AB[i][j] = sum;
 
sum = 0;
 
}
 
}
 
printf("\nEredmenymatrix:\nAB=\n");
 
for (i=0; i<m; i++) //B matrix kiiratas
 
{
 
for(j=0; j<k; j++)
 
printf("%0.5lf ", AB[i][j]);
 
printf("\n");
 
}
 
return 0;
 
}
==== Tulajdonságai ====
* [[asszociativitás]]: (''AB'')''C'' = ''A''(''BC'') minden ''k×m''-es ''A'', ''m×n''-es ''B'' és ''n×p''-s ''C'' mátrixra. Ezt a tulajdonságot kihasználva optimalizálni lehet a mátrixszorzást. A leghatékonyabb zárójelezés megtalálása nevezetes optimalizációs probléma.
499 ⟶ 622 sor:
 
{{Link FA|pl}}
{{Link FA|ur}}'''Két mátrix összeszorzása, C programnyelven'''
 
'''''C forráskód:'''''
 
<nowiki>#</nowiki>include <stdio.h>
 
<nowiki>#</nowiki>include <stdlib.h>
 
double A[1000][1000];
 
double B[1000][1000];
 
double AB[1000][1000];
 
int main () {
 
int m, n, k; //m-oszlop, n-sor (k-oszlop)
 
int i, j, p;
 
int sum=0;
 
printf("A matrix merete: ");
 
scanf("%d%d",&n, &m);
 
printf("B matrix oszlopai: ");
 
scanf("%d", &k);
 
printf("B matrix sorainak szama igy: %d\n", m);
 
printf("Adja meg az A matrixot:\n");
 
for (i=0; i<n; i++) //A matrix feltoltese
 
{
 
for(j=0; j<m; j++)
 
scanf("%lf", &A[i][j]);
 
}
 
printf("Adja meg a B matrixot:\n");
 
for (i=0; i<m; i++) //B matrix feltoltese
 
{
 
for(j=0; j<k; j++)
 
scanf("%lf", &B[i][j]);
 
}
 
printf("A matrix:\n");
 
for (i=0; i<n; i++) //A matrix kiiratasa
 
{
 
for(j=0; j<m; j++)
 
printf("%0.5lf ", A[i][j]);
 
printf("\n");
 
}
 
printf("B matrix:\n");
 
for (i=0; i<m; i++) //B matrix kiiratas
 
{
 
for(j=0; j<k; j++)
 
printf("%0.5lf ", B[i][j]);
 
printf("\n");
 
}
 
for ( i = 0 ; i < n ; i++ )
 
{
 
for ( j = 0 ; j < k ; j++ )
 
{
 
for ( p = 0 ; p < m ; p++ )
 
{
 
sum = sum + A[i][p]*B[p][j];
 
}
 
AB[i][j] = sum;
 
sum = 0;
 
}
 
}
 
printf("\nEredmenymatrix:\nAB=\n");
 
for (i=0; i<m; i++) //B matrix kiiratas
 
{
 
for(j=0; j<k; j++)
 
printf("%0.5lf ", AB[i][j]);
 
printf("\n");
 
}
 
return 0;
 
}