Springen naar inhoud

Matlab matrix


  • Log in om te kunnen reageren

#1

RHvRU

    RHvRU


  • 0 - 25 berichten
  • 4 berichten
  • Gebruiker

Geplaatst op 27 april 2010 - 14:24

Hallo

Ik heb bijvoorbeeld een matrix A en B:
A = [ 0 0 0 0 1 2 3 0 0 0 0]'
B = [ -2 -2 -1]'

Nu wil ik graag de matrix C krijgen:
C = [ 0 0 1 2 0 3 0 0 0 0 0]'

Dus het getal B(i,1) geeft aan hoeveel plaatsen het getal A(i+4,1) in matrix A moet opschuiven...

Heb je hier een functie voor en hoe werkt dat dan precies? Kan iemand mij daar mee helpen?
Heb het wel kunnen maken met behulp van een loop, maar dit wil ik niet...

gr. RH

Veranderd door RHvRU, 27 april 2010 - 14:26


Dit forum kan gratis blijven vanwege banners als deze. Door te registeren zal de onderstaande banner overigens verdwijnen.

#2

jhnbk

    jhnbk


  • >5k berichten
  • 6905 berichten
  • VIP

Geplaatst op 27 april 2010 - 14:31

Heb het wel kunnen maken met behulp van een loop, maar dit wil ik niet...

Het zal wel met een loop moeten. Iets anders lijkt mij niet eenvoudig te verzinnen.
Het vel van de beer kunnen verkopen vraagt moeite tenzij deze dood voor je neervalt. Die kans is echter klein dus moeten we zelf moeite doen.

#3

ZVdP

    ZVdP


  • >1k berichten
  • 2097 berichten
  • VIP

Geplaatst op 27 april 2010 - 15:08

Je kan het bijvoorbeeld als volgt doen:

C=zeros(numel(A),1);
N=B+[5;6;7];
C(N(1:numel(N))=A(5:4+numel(B));
"Why must you speak when you have nothing to say?" -Hornblower
Conserve energy: Commute with a Hamiltonian

#4

317070

    317070


  • >5k berichten
  • 5567 berichten
  • Moderator

Geplaatst op 28 april 2010 - 18:39

Algemener kun je (in een loop weliswaar) B = [ -2 -2 -1]' omzetten in een matrix van 0'tjes en 1'tjes, die na de vermenigvuldiging met A het gevraagde antwoord geeft. Als je 1 B op verschillende A moet toepassen, gaat dit volgens mij wat sneller.

Edit: als dat van ZvdP werkt, dan heb ik dit hier nooit geschreven ;)

Veranderd door 317070, 28 april 2010 - 18:40

What it all comes down to, is that I haven't got it all figured out just yet
And I've got one hand in my pocket and the other one is giving the peace sign
-Alanis Morisette-

#5

Bart

    Bart


  • >5k berichten
  • 7224 berichten
  • VIP

Geplaatst op 28 april 2010 - 19:40

Je kan het bijvoorbeeld als volgt doen:

C=zeros(numel(A),1);
N=B+[5;6;7];
C(N(1:numel(N))=A(5:4+numel(B));


Correct, maar wel onnodig veel code. Daarnaast werkt dit alleen voor de gegeven case en niet algemeen (Maak B eens van lengte 4).

C = zeros(size(A));
x = (1 : length(B))' + 4;
C(B+x) = A(x);
If I have seen further it is by standing on the shoulders of giants.-- Isaac Newton





0 gebruiker(s) lezen dit onderwerp

0 leden, 0 bezoekers, 0 anonieme gebruikers

Ook adverteren op onze website? Lees hier meer!

Gesponsorde vacatures

Vacatures