1 van 1

Vectoren in Matlab

Geplaatst: do 25 sep 2014, 12:15
door Puntje
Hallo,
 
Ik heb een behoorlijk eenvoudige vraag, maar ik zie het gewoon niet. Ik wil in Matlab het volgende berekenen. Ik heb twee kolomvectoren [x1 ... xn] en [y1 ... yn] en ik wil hieruit een vector [x1y1 ... xnyn] berekenen. Ik vermoed dat er gewoon een functie voor bestaat maar ik kan de naam ervan niet vinden. Alvast bedankt!

Re: Vectoren in Matlab

Geplaatst: do 25 sep 2014, 16:58
door Xenion
Als je een "." voor een operator zet, dan wordt de operatie puntsgewijs uitgevoerd op vectoren/matrices van gelijke dimensies.
 
v1 .* v2 geeft dus een vector die de producten van de overeenkomende elementen van v1 en v2 bevat.
 
Dit kan je ook doen voor machtsverheffing en deling.

Re: Vectoren in Matlab

Geplaatst: vr 10 okt 2014, 02:38
door JorisL
Xenion is volledig correct.
 
Wat je doet ziet eruit als (een stap in) het berekenen van een dot/scalair product.
Dat kan je ook in 1 korte uitdrukking doen.
Stel je hebt 2 kolomvectoren x en y dan is het scalair product te schrijven als x' * y.
 
Voor zover ik weet is die methode het snelst.  Ik wilde dit even meedelen omdat ik zelf ooit de functie dot() heb gebruikt.
Wat bleek? Dat scalair product naam +/- 50% van de tijd die mijn programma draaide in beslag.
 
Dat is geen alleen staand geval, meestal zit er in zo'n functie een error handler die een relatief grote overhead geeft.
Een ander voorbeeld hier van is circshift(). Daarmee kan je de elementen van een vector/matrix cyclisch verschuiven.
Deze is pas sneller dan een for-loop vanaf een bepaalde lengte (ik dacht in de orde van 100 elementen).

Re: Vectoren in Matlab

Geplaatst: vr 10 okt 2014, 07:28
door physicalattraction
Ter verduidelijking: Xenion heeft her hier over elementsgewijs vermenigvuldigen (uitkomst is een vector), JorisL heeft het hier over een inproduct (uitkomst is een scalair).