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

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • bart1074
  • Registratie: September 2003
  • Laatst online: 27-03-2024
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

Acties:
  • 0 Henk 'm!

  • Opi
  • Registratie: Maart 2002
  • Niet online

Opi

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. :) ]


Acties:
  • 0 Henk 'm!

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

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


Acties:
  • 0 Henk 'm!

  • TheWickedD
  • Registratie: Juli 2002
  • Laatst online: 02-04-2024
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