Matlab matrix

Moderators: jkien, Xilvo

Reageer
Berichten: 4

Matlab matrix

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

Gebruikersavatar
Berichten: 6.905

Re: Matlab matrix

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.

Gebruikersavatar
Berichten: 2.097

Re: Matlab matrix

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

Gebruikersavatar
Berichten: 5.609

Re: Matlab matrix

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 ;)
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-

Gebruikersavatar
Berichten: 7.224

Re: Matlab matrix

ZVdP schreef: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).

Code: Selecteer alles

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

Reageer