Da bi uopšte mogao množiti matrice prvo moraju biti ispunjeni neki uslovi.
Kada množimo dvije matrice (a i b) broj kolona matrice a mora biti jednak broju redova matrice b.
Rezultujuća matrica je formata broj redova matrice a, broj kolona matrice b.
U našem slućaju je u pitanju množenje matrice a i vektora v. To znači da broj kolona matrice a mora biti jednak
broju redova vektora v. Evo jedan primjer množenja kvadratne matrice i vektora.
Code:
a11 a12 a13 v11 r11
a21 a22 a23 x v21 = r21
a31 a32 a33 v31 r31
Ispunjeni su uslovi množenja broj kolona matrice je jednak broju redova vektora. Rezultat će biti matrica formata
3 x 1 (3 reda 1 kolona).
Primjer mnozenja matrice 3x3 sa vektorom 3x1, treba dodati još uslov da li se množenje uopšte može izvršiti i izmijeniti
funkcije taka da rade i za opšte slućajeve, a ne samo za 3x3 i 3x1. Nije velik posao ali meni je zbog testiranja bilo lakše
uraditi ovaj slućaj.
Code:
#include <stdio.h>
void pomnoziMatrice (int a[3][3], int vektor [3][1], int rezultat[3][1]){
for(int i = 0; i < 3; i++){ //ide do broja redova matrice a
for(int j = 0; j < 1; j++){ //ide do broja kolona matrice b (vektora)
int pomocna = 0;
for(int k = 0; k < 3; k++) //ide do broja redova matrice b (vektora)
pomocna = pomocna + (a[i][k] * vektor[k][j]);
rezultat[i][j] = pomocna;
}
}
}
void unesiMatricu(int a [3][3]){
printf("Unesite matricu a: \n");
for(int i=0; i<3; i++){
for(int j=0; j<3; j++){
printf("[%d, %d]: ", i+1, j+1);
scanf("%d", &a[i][j]);
}
}
printf("\n");
}
void unesiVektor(int v[3][1]){
printf("Unesite vektor: \n");
for(int i=0; i<3; i++){
for(int j=0; j<1; j++){
printf("[%d, %d]: ", i+1, j+1);
scanf("%d", &v[i][j]);
}
}
printf("\n");
}
int main(void){
int a[3][3];
int vektor[3][1];
int rezultat[3][1];
unesiMatricu(a);
unesiVektor(vektor);
pomnoziMatrice(a, vektor, rezultat);
printf("\nMatrica a: \n");
for(int i=0; i<3; i++){
for(int j=0; j<3; j++)
printf("%d ", a[i][j]);
printf("\n");
}
printf("\nVektor: \n");
for(int i=0; i<3; i++){
for(int j=0; j<1; j++)
printf("%d ", vektor[i][j]);
printf("\n");
}
printf("\nRezultat je: \n");
for(int i=0; i<3; i++){
for(int j=0; j<1; j++)
printf("%d ", rezultat[i][j]);
printf("\n");
}
return 0;
}
Citat:
evo kako izgleda rezultat:
Matrica a:
1 1 1
1 1 1
1 1 1
Vektor:
1
1
1
Rezultat je:
3
3
3
if (argc > 1 && strcmp(argv[1], "-advice") == 0) {
printf("Don't Panic!n");
exit(42);
}