1 van 1

Matlab code loops

Geplaatst: za 24 mei 2008, 14:04
door dirkwb
Kan iemand checken of ik ergens een fout hierin heb gemaakt?
loops
loops 785 keer bekeken
m_code
m_code 780 keer bekeken

Re: Matlab code loops

Geplaatst: za 24 mei 2008, 14:53
door EvilBro
Ik zie ook niet precies wat het nut is van 'k' (wordt immers nergens gebruikt).Ik denk echter wel dat de 'v=v_new' buiten de while-loop moet (anders is de while-loop zinloos).

Re: Matlab code loops

Geplaatst: za 24 mei 2008, 18:00
door dirkwb
Ik zie ook niet precies wat het nut is van 'k' (wordt immers nergens gebruikt).
Ik vond dit dus ook vreemd.
Ik denk echter wel dat de 'v=v_new' buiten de while-loop moet (anders is de while-loop zinloos).
Hier zat ik lang mee te klooien, ik weet niet wat ze bedoelen met "after testing for convergence". Als je v_new buiten de while-loop zet dan itereert hij toch niet?

Re: Matlab code loops

Geplaatst: za 24 mei 2008, 21:19
door dirkwb
Ik heb het uitgeprobeerd en erover nagedacht die v_new moet in die while-loop anders itereert hij het niet.

Dit algoritme is voor een getransformeerde warmtevergelijking en in mijn algoritme gaat er iets mis. De w is een benadering voor y.
1
1 776 keer bekeken
Ik wil een plot van V tegen S maken en ik schreef daarvoor deze code waarbij ik terugrekende naar V. Alleen de laatste vergelijking in het kader doet ertoe.
2
2 780 keer bekeken
Hier moet dan ergens de fout inzitten aangezien het vorige algoritme goed is, maar ik zie niet waar.

Re: Matlab code loops

Geplaatst: zo 25 mei 2008, 10:48
door EvilBro
Hier moet dan ergens de fout inzitten aangezien het vorige algoritme goed is, maar ik zie niet waar.
Ik denk dat je eerdere algoritme niet goed is. Het is me niet helemaal duidelijk wat je probeert (numerieke wiskunde heb ik niet helemaal meer paraat :D ), maar het lijkt op een methode die stapgewijs een voldoende nauwkeurige oplossing probeert te bepalen voor een bepaald tijdstip. Het algoritme zal dan nieuwe benaderingen moeten genereren zolang deze nauwkeurigheid niet bereikt is. Het algoritme dat jij geimplementeerd hebt houdt echter na 1 poging op. Dit lijkt me onjuist. Daarom denk ik dan ook dat het overnemen van 'v' pas moet gebeuren als deze nauwkeurigheid bereikt is en dat deze overname dus buiten de while-lus moet gebeuren.

P.S. onder de douche kreeg ik het volgende idee: volgens mij moet je code een nieuwe benadering berekenen en deze dan vergelijken met de vorige benadering. Als het verschil kleiner is dan een gegeven grens ga je door. Op het moment dat het verschil te groot is dan doe je nog een stap (dus de nieuwe benadering wordt dan de oude benadering en je berekent dan een nieuwe 'nieuwe benadering'). In pseudo-code:

Code: Selecteer alles

v_new = eerste benadering

verschil = iets dat groter is dan epsilon.

while (verschil > epsilon),

  v_old = v_new;

  bereken nieuwe v_new;

  verschil = norm(v_new-v_old);

end

v = v_new;

Re: Matlab code loops

Geplaatst: wo 28 mei 2008, 19:35
door dirkwb
OK, ik ben eergisteren naar mijn docent langsgegaan en de v_new hoort er wel in. Ik heb het gelukkig nu aan de praat gekregen, maar dat ging zeker niet zonder slag of stoot.

@Evilbro: de SOR loop is er om een matrixongelijkheid op te lossen:
2
2 772 keer bekeken
De k is er om de while-loop te stoppen als deze niet convergeert in het aangepast algoritme hierboven.

Re: Matlab code loops

Geplaatst: wo 28 mei 2008, 20:01
door EvilBro
De k is er om de while-loop te stoppen als deze niet convergeert in het aangepast algoritme hierboven.
Als je de while-loop nog steeds zo hebt als je hierboven had dan kun je hem net zo goed weglaten... iets waardoor ik dus nog steeds denk dat je iets niet goed doet.

Re: Matlab code loops

Geplaatst: wo 28 mei 2008, 20:09
door dirkwb
Als je de while-loop nog steeds zo hebt als je hierboven had dan kun je hem net zo goed weglaten... iets waardoor ik dus nog steeds denk dat je iets niet goed doet.
Nee, want de bedoeling is dat v itereert naar een stabiele waarde afhankelijk van mijn w. Die v wordt dan de w op het tijdstip nu+1. Als je de while loop weglaat dan itereert v niet meer, toch?

Re: Matlab code loops

Geplaatst: wo 28 mei 2008, 21:40
door EvilBro
Als je de while loop weglaat dan itereert v niet meer, toch?
Ik zou zeggen 'zet eens een breakpoint en stap vanaf dat moment door je code'. Je zult zien dat je while-loop totaal zinloos is (iets dat volgens mij niet zo moeilijk is om in te zien. Bedenk de waarde van vnew-v maar eens als je vlak daarvoor v = vnew gedaan hebt...).

Re: Matlab code loops

Geplaatst: wo 28 mei 2008, 22:05
door dirkwb
De nieuwe (werkende code):
1
1 776 keer bekeken

Re: Matlab code loops

Geplaatst: wo 28 mei 2008, 22:17
door EvilBro
De nieuwe (werkende code):
Dat lijkt me beter. Je zou in de while-lus nog een teller mee kunnen laten lopen en een statement dat de while-lus onderbreekt als de teller boven een bepaald getal komt (om een oneindige lus te voorkomen).

Waarom post je eigenlijk je code als plaatje en niet gewoon als tekst tussen

Code: Selecteer alles

-tags?

Re: Matlab code loops

Geplaatst: wo 28 mei 2008, 22:21
door dirkwb
Dat lijkt me beter. Je zou in de while-lus nog een teller mee kunnen laten lopen en een statement dat de while-lus onderbreekt als de teller boven een bepaald getal komt (om een oneindige lus te voorkomen).
Die stond er ook, maar die heb ik weggehaald speciaal voor deze post :D
Waarom post je eigenlijk je code als plaatje en niet gewoon als tekst tussen

Code: Selecteer alles

-tags?[/quote]

Wat? Tekst? Dan wordt de tekst toch een quote?

Re: Matlab code loops

Geplaatst: wo 28 mei 2008, 22:53
door EvilBro
Wat? Tekst? Dan wordt de tekst toch een quote?

Code: Selecteer alles

I don't	 think	so 

	Tim...

(let op het blijven bestaan van spaties.)