Forum » Programiranje » mnozenje matrik
mnozenje matrik
desperados ::
Žiw a morda kdo pozna kak algoritem za množenje matrik ne glede na velikost v c++ s polj???
hvala
LP!
hvala
LP!
desperados ::
vem da mora biti algoritm sestavljen nekako v tem principu
int sestevki=0;
for (int a=0 ,a < s1, a++)
for (int b=0, b < v1 ,b++)
{
for (int c=0 , c < s2, c++)
sestevki+=matrika1[a][c]*matrika2[c][b]; //množenje matrik
zmnozek[a][b]=sestevki;
sestevki=0;
}
ampak ta koda deluje le za kvadratne matrike.
Za njima pa me če kdo zna kodo spremeniti tako da bo zmnožila recimo matriko
a=[1 2 3;4 5 6]
b=[1 2;3 4;5 6]
?=a*b
kake ideje?
hvala
LP!
int sestevki=0;
for (int a=0 ,a < s1, a++)
for (int b=0, b < v1 ,b++)
{
for (int c=0 , c < s2, c++)
sestevki+=matrika1[a][c]*matrika2[c][b]; //množenje matrik
zmnozek[a][b]=sestevki;
sestevki=0;
}
ampak ta koda deluje le za kvadratne matrike.
Za njima pa me če kdo zna kodo spremeniti tako da bo zmnožila recimo matriko
a=[1 2 3;4 5 6]
b=[1 2;3 4;5 6]
?=a*b
kake ideje?
hvala
LP!
JerKoJ ::
Eto najprej mal teorije,
da lohk pol iz nje sploh sestavs algoritem
http://mathworld.wolfram.com/MatrixMultiplication.html
ce si seveda neucekan lahko v guglu napises : c programm matrix multiplication
ce mas dela z ogromnimi matrikami se tega ne lotevat sam
dobi si scilab ali kupi matlab pa tam to deli
da lohk pol iz nje sploh sestavs algoritem
http://mathworld.wolfram.com/MatrixMultiplication.html
ce si seveda neucekan lahko v guglu napises : c programm matrix multiplication
ce mas dela z ogromnimi matrikami se tega ne lotevat sam
dobi si scilab ali kupi matlab pa tam to deli
desperados ::
Žiw
no ne da bi bil neučakan samo tole pa res nucam hitro.
je naloga za zagovor vaj
ampak na žalost nisem tako dober matematik in ne programer da bi mi algoritem kar padel v konice prstov da bi spisal kodo
poleg tega je problem v mejah danih polj
ampak z debugom pa ne znam delat da bi pogruntal kje je problem
algoritem je že pravi samo koda ni pravilno napisana
LP!
no ne da bi bil neučakan samo tole pa res nucam hitro.
je naloga za zagovor vaj
ampak na žalost nisem tako dober matematik in ne programer da bi mi algoritem kar padel v konice prstov da bi spisal kodo
poleg tega je problem v mejah danih polj
ampak z debugom pa ne znam delat da bi pogruntal kje je problem
algoritem je že pravi samo koda ni pravilno napisana
LP!
Zgodovina sprememb…
- spremenil: desperados ()
OwcA ::
Sicer se nisem pretirano pogljabljal, ampak tisto zgoraj zgleda prav, le s1, s2 in v1 moraš prav nastaviti, poleg tega seveda ne moreš množiti poljubnih 2 matrik ampak samo tiste, za katere velja, da je število stolpcev prve enako številu vrstic druge.
Otroška radovednost - gonilo napredka.
desperados ::
ja to je pogoj
if(s1==v2)
{...}
ze ampak; kako je treba nastavit vse te stvari
moj namen je bil napisati program za sestevanje in mnozenje matrik najprej se ustvaril 4 polja velikosti 50x50 in potem znotraj teh polj operiram z vecdimenzionalnimi polji. no ravno tukaj je problem ce sem hotel zmnoziti nekvadratni matriki mi je zacelo vpisovati neka cudna stevila ampak preko mej katere sem zahteval, torej stevilo vrstic 1 matrike in stevilo stolpcev druge.
ko mi je nekako uspelo izpisovati pravo velikost mi ni racunal pracilnih vrednosti najbrz ni pravilno sesteval. no to je v bistvu moj problem
ena od moznosti je napacna zadna zanka in elementi.
sestevanje pa dela kot urca
no danes sem ze za itak zamudil zagovor tak da jutri ne morem na izpit
AMPAK POMOC JE PA SE VSEENO DOBRODOSLA!!!
LP
if(s1==v2)
{...}
ze ampak; kako je treba nastavit vse te stvari
moj namen je bil napisati program za sestevanje in mnozenje matrik najprej se ustvaril 4 polja velikosti 50x50 in potem znotraj teh polj operiram z vecdimenzionalnimi polji. no ravno tukaj je problem ce sem hotel zmnoziti nekvadratni matriki mi je zacelo vpisovati neka cudna stevila ampak preko mej katere sem zahteval, torej stevilo vrstic 1 matrike in stevilo stolpcev druge.
ko mi je nekako uspelo izpisovati pravo velikost mi ni racunal pracilnih vrednosti najbrz ni pravilno sesteval. no to je v bistvu moj problem
ena od moznosti je napacna zadna zanka in elementi.
sestevanje pa dela kot urca
no danes sem ze za itak zamudil zagovor tak da jutri ne morem na izpit
AMPAK POMOC JE PA SE VSEENO DOBRODOSLA!!!
LP
Zgodovina sprememb…
- spremenil: desperados ()
OwcA ::
V katerem jeziku to packaš? V vsakem primeru raje uporabi kakšno prijazno podatkovno strukturo, recimo vektor, ker imaš očitno težave s polji.
Otroška radovednost - gonilo napredka.
Geny ::
Ti kolega, jaz sicer nebi rad bil nesramen ampak predno greš na izpit se nauči še nekaj teorije o matrikah, ker za množenje matrik veljajo posebna pravila.
Prva matrika mora imeti ravno toliko stolpec, kolikor ima druga matrika vrstic. To je pravilo ker drugače se matrik med sabo ne da ZMNOŽIT!
Uf!...
Prva matrika mora imeti ravno toliko stolpec, kolikor ima druga matrika vrstic. To je pravilo ker drugače se matrik med sabo ne da ZMNOŽIT!
Uf!...
To mi deli!
alum ::
mnozenje matrik A in B, rezultat matrika C...
velikost matike A: m x n
velikost matrike B: n x p
velikost matrike c: m x p
n mora bit nujno enak pri obeh matrikah!!! NUJNO!
pseudokod bi zgledal nekako takole...
FOR(i=0, i < m)
FOR(j=0, j < p)
C[0][0]=0;
FOR(k=0, k < n)
C[i][j]= A[i][k] * B[k][j] + C[i][j];
END FOR
END FOR
END FOR
je pa res, da ti tukaj casovna zahtevnost ne pade pod o(n^3) - mislim, da ga "zaenkrat" se ne znajo izboljsat...
brez teorije pa bos ostal le pri praskanju po glavi:)
velikost matike A: m x n
velikost matrike B: n x p
velikost matrike c: m x p
n mora bit nujno enak pri obeh matrikah!!! NUJNO!
pseudokod bi zgledal nekako takole...
FOR(i=0, i < m)
FOR(j=0, j < p)
C[0][0]=0;
FOR(k=0, k < n)
C[i][j]= A[i][k] * B[k][j] + C[i][j];
END FOR
END FOR
END FOR
je pa res, da ti tukaj casovna zahtevnost ne pade pod o(n^3) - mislim, da ga "zaenkrat" se ne znajo izboljsat...
brez teorije pa bos ostal le pri praskanju po glavi:)
desperados ::
ja teorijo matrik poznam
implementacija me jebe
pa program mora bit napisan z polji v c++ konzola;(
implementacija me jebe
pa program mora bit napisan z polji v c++ konzola;(
Zgodovina sprememb…
- spremenil: desperados ()
OwcA ::
Naredi stvar kot se spodobi, torej z dinamičnim zaseganjem spomina.
Otroška radovednost - gonilo napredka.
desperados ::
ja če bi bilo po moje bi to naredil z gnezdenim dvosmernim seznamom sam naloga (asistent je pac zelo natančen) zahta predpotopna dvodimezionalna polja;(
Gundolf ::
Če bi pa množenje matrik delal z dvosmernimi seznami potem pa še dobro da asistent vztraja na built-in 2d poljih.
alum ::
implementacijo imas zgoraj...vse kar je potrebno naredit je, da jo pretvoris v C++...
cel algoritem imas napisan, le problem z velikostjo moras resit...to pa prepuscam tebi;)
cel algoritem imas napisan, le problem z velikostjo moras resit...to pa prepuscam tebi;)
desperados ::
No uspelo mi je res da z razredi
upam da ne bo asistent mel kej proti
kaj češ
pa še kek teden prekasno
recimo tole je množenje :
tole pa sestevanje:
no pa hvala za vso pomoč
[edit: polepšana koda]
upam da ne bo asistent mel kej proti
kaj češ
pa še kek teden prekasno
recimo tole je množenje :
void MATRIKE::Zmnozek () { if (stolpcev1==vrstic2) { for (int i=0; i < vrstic1; i++) { for (int j=0; j < stolpcev2; j++) { mZmnozek[i][j]=0; for (int k=0; k < vrstic2; k++) { mZmnozek[i][j]+=matrika1[i][k]*matrika2[k][j]; } } } } else cout << "Stevilo stolpcev prve natrike ni enako stevilu vrstic druge (mnozenje teh dveh matrik ni definirano)\n"; }
tole pa sestevanje:
void MATRIKE::Sestevek () { if (stolpcev1==stolpcev2 && vrstic1==vrstic2) { for (int i=0; i < vrstic1; i++) { for (int j=0; j < stolpcev1; j++) { mSestevek[i][j]=matrika1[i][j] + matrika2[i][j]; } } } else cout << "Matriki nista enakih dimenzij (sestevanje ni definirano)\n"; }
no pa hvala za vso pomoč
[edit: polepšana koda]
Zgodovina sprememb…
- spremenil: Gundolf ()
Vesoljc ::
zdej si pa še poglej kako narediš operatorje.
ker lepšega kot tole ni:
ker lepšega kot tole ni:
matrix a,b,c; a = b + c;
Abnormal behavior of abnormal brain makes me normal...
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | Visual Basic - matrike z datagridviewOddelek: Programiranje | 1256 (928) | blay44 |
» | MatrikeOddelek: Šola | 1641 (1224) | Sqrt2 |
» | c++ nujnoOddelek: Programiranje | 1056 (986) | Tutankhamun |
» | Program v COddelek: Programiranje | 1940 (1779) | darkkk |
» | [Naloga][C++] Mnozenje vecdimenzionalnih polj.Oddelek: Programiranje | 1639 (1532) | wat56 |