Matlab code loops

Moderators: jkien, Xilvo

Reageer
Berichten: 4.246

Matlab code loops

Kan iemand checken of ik ergens een fout hierin heb gemaakt?
loops.PNG
loops.PNG (38.74 KiB) 703 keer bekeken
m_code.PNG
m_code.PNG (23.63 KiB) 698 keer bekeken
Quitters never win and winners never quit.

Berichten: 7.068

Re: Matlab code loops

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

Berichten: 4.246

Re: Matlab code loops

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?
Quitters never win and winners never quit.

Berichten: 4.246

Re: Matlab code loops

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.PNG
1.PNG (32.77 KiB) 694 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.PNG
2.PNG (10.69 KiB) 698 keer bekeken
Hier moet dan ergens de fout inzitten aangezien het vorige algoritme goed is, maar ik zie niet waar.
Quitters never win and winners never quit.

Berichten: 7.068

Re: Matlab code loops

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;

Berichten: 4.246

Re: Matlab code loops

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.PNG
2.PNG (52.73 KiB) 690 keer bekeken
De k is er om de while-loop te stoppen als deze niet convergeert in het aangepast algoritme hierboven.
Quitters never win and winners never quit.

Berichten: 7.068

Re: Matlab code loops

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.

Berichten: 4.246

Re: Matlab code loops

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?
Quitters never win and winners never quit.

Berichten: 7.068

Re: Matlab code loops

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

Berichten: 4.246

Re: Matlab code loops

De nieuwe (werkende code):
1.PNG
1.PNG (32.24 KiB) 694 keer bekeken
Quitters never win and winners never quit.

Berichten: 7.068

Re: Matlab code loops

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?

Berichten: 4.246

Re: Matlab code loops

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?
Quitters never win and winners never quit.

Berichten: 7.068

Re: Matlab code loops

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

Reageer