Toon posts:

[Matlab] waarde in rij x aftrekken waarde rij x-1 in matrix

Pagina: 1
Acties:

Onderwerpen


  • bart1074
  • Registratie: September 2003
  • Laatst online: 22-02 19:22
Voor mijn scriptie moet ik veel van mijn berekeningen uitvoeren in MatLab.
Tot zover gaat dat prima met behulp van google, mathworks, en andere informatiebronnen. Maar nu loop ik een beetje vast en daarom kom ik hier terecht.

Ik heb een gigantische matrix van 3255*60 vol met rentes. Nu wil ik een nieuwe matrix maken met daarin de verschillen tussen de verschillende rentes. Met andere woorden het resultaat van rij2-rij1, rij3-rij2, rij4-rij3....rij3255-rij3254. In excel is dit nogal eenvoudig, maar in MatLab kom ik er niet helemaal uit.
Nou wat onderzoek op google, mathworks, etc ben ik er achter dat ik for loop moet gebruiken, geloof ik.
Volgens mij kom ik uit bij iets als dit, maar dat werkt niet. Hopelijk kunnen jullie me helpen.

code:
1
2
3
4
5
6
7
8
9
rente_verschillen=[];

for i=1:3254
    for j=2:3255
        for k=1:60
            rente_verschillen(i,k) = test(j,k) - test(i,k);
        end
    end
end

  • Opi
  • Registratie: Maart 2002
  • Niet online
Ik ben er iets te lang uit om de synthax nog te weten, maar waarom maak je niet een tijdelijke matrix aan en trek je die van de oorspronkelijke af?
Rente_t1 = Rente(1:3254,:);
Rente_t2 = Rente(2:3255,:);
Rente_Verschillen = Rente_t2 - Rente_t1;

(check nog even of de index bij 0 of bij 1 begint)

Matlab heeft juist als kracht het snel kunnen werken met matrices. Met loops is Matlab juist erg traag.

[Voor 0% gewijzigd door Opi op 06-07-2011 16:15. Reden: Bedankt voor de correctie, RayNbow. :)]


  • RayNbow
  • Registratie: Maart 2003
  • Laatst online: 20:36

RayNbow

Kirika <3

Opi schreef op woensdag 06 juli 2011 @ 15:40:
Ik ben er iets te lang uit om de synthax nog te weten, maar waarom maak je niet een tijdelijke matrix aan en trek je die van de oorspronkelijke af?
Rente_t1 = Rente(1:3254;:);
Rente_t2 = Rente(2:3255;:);
Rente_Verschillen = Rente_t1 - Rente_t2;

(check nog even of de index bij 0 of bij 1 begint)
Bijna goed. De indices moet je met een komma scheiden, niet met een puntkomma. :)

Matlab:
1
2
3
4
init = A(1:size(A,1)-1,:);
tail = A(2:size(A,1),:);

resultaat = tail-init


Edit: jouw voorbeeld doet trouwens rij1-rij2 ipv rij2-rij1.
Matlab heeft juist als kracht het snel kunnen werken met matrices. Met loops is Matlab juist erg traag.
Hier sluit ik me bij aan. Probeer zo veel mogelijk operaties in Matlab uit te drukken in matrices.

[Voor 24% gewijzigd door RayNbow op 06-07-2011 15:51]

Ipsa Scientia Potestas Est
NNID: ShinNoNoir


  • TheWickedD
  • Registratie: Juli 2002
  • Laatst online: 11-03 21:01
Dat kun je makkelijker schrijven als:

Matlab:
1
2
3
init = Rente(1:end-1,:);    % end is een reuze handig keywoord!
tail = Rente(2:end,:);
verschillen= tail-init;


maar wat de OP wil kun je het makkelijkste zo doen:
Matlab:
1
verschillen = diff(Rente,[],1); % is gelijk aan simpelweg diff(Rente), gezien over de rijen de eerste dimensie is


Tweakers maakt gebruik van cookies

Tweakers plaatst functionele en analytische cookies voor het functioneren van de website en het verbeteren van de website-ervaring. Deze cookies zijn noodzakelijk. Om op Tweakers relevantere advertenties te tonen en om ingesloten content van derden te tonen (bijvoorbeeld video's), vragen we je toestemming. Via ingesloten content kunnen derde partijen diensten leveren en verbeteren, bezoekersstatistieken bijhouden, gepersonaliseerde content tonen, gerichte advertenties tonen en gebruikersprofielen opbouwen. Hiervoor worden apparaatgegevens, IP-adres, geolocatie en surfgedrag vastgelegd.

Meer informatie vind je in ons cookiebeleid.

Sluiten

Toestemming beheren

Hieronder kun je per doeleinde of partij toestemming geven of intrekken. Meer informatie vind je in ons cookiebeleid.

Functioneel en analytisch

Deze cookies zijn noodzakelijk voor het functioneren van de website en het verbeteren van de website-ervaring. Klik op het informatie-icoon voor meer informatie. Meer details

janee

    Relevantere advertenties

    Dit beperkt het aantal keer dat dezelfde advertentie getoond wordt (frequency capping) en maakt het mogelijk om binnen Tweakers contextuele advertenties te tonen op basis van pagina's die je hebt bezocht. Meer details

    Tweakers genereert een willekeurige unieke code als identifier. Deze data wordt niet gedeeld met adverteerders of andere derde partijen en je kunt niet buiten Tweakers gevolgd worden. Indien je bent ingelogd, wordt deze identifier gekoppeld aan je account. Indien je niet bent ingelogd, wordt deze identifier gekoppeld aan je sessie die maximaal 4 maanden actief blijft. Je kunt deze toestemming te allen tijde intrekken.

    Ingesloten content van derden

    Deze cookies kunnen door derde partijen geplaatst worden via ingesloten content. Klik op het informatie-icoon voor meer informatie over de verwerkingsdoeleinden. Meer details

    janee