Springen naar inhoud

Matlab code loops


  • Log in om te kunnen reageren

#1

dirkwb

    dirkwb


  • >1k berichten
  • 4172 berichten
  • Moderator

Geplaatst op 24 mei 2008 - 13:04

Kan iemand checken of ik ergens een fout hierin heb gemaakt?

loops.PNG



m_code.PNG
Quitters never win and winners never quit.

Dit forum kan gratis blijven vanwege banners als deze. Door te registeren zal de onderstaande banner overigens verdwijnen.

#2

EvilBro

    EvilBro


  • >5k berichten
  • 6703 berichten
  • VIP

Geplaatst op 24 mei 2008 - 13:53

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

#3

dirkwb

    dirkwb


  • >1k berichten
  • 4172 berichten
  • Moderator

Geplaatst op 24 mei 2008 - 17:00

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.

#4

dirkwb

    dirkwb


  • >1k berichten
  • 4172 berichten
  • Moderator

Geplaatst op 24 mei 2008 - 20:19

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


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

Hier moet dan ergens de fout inzitten aangezien het vorige algoritme goed is, maar ik zie niet waar.

Veranderd door dirkwb, 24 mei 2008 - 20:22

Quitters never win and winners never quit.

#5

EvilBro

    EvilBro


  • >5k berichten
  • 6703 berichten
  • VIP

Geplaatst op 25 mei 2008 - 09:48

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

#6

dirkwb

    dirkwb


  • >1k berichten
  • 4172 berichten
  • Moderator

Geplaatst op 28 mei 2008 - 18:35

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


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.

#7

EvilBro

    EvilBro


  • >5k berichten
  • 6703 berichten
  • VIP

Geplaatst op 28 mei 2008 - 19:01

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.

#8

dirkwb

    dirkwb


  • >1k berichten
  • 4172 berichten
  • Moderator

Geplaatst op 28 mei 2008 - 19:09

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?

Veranderd door dirkwb, 28 mei 2008 - 19:10

Quitters never win and winners never quit.

#9

EvilBro

    EvilBro


  • >5k berichten
  • 6703 berichten
  • VIP

Geplaatst op 28 mei 2008 - 20:40

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

#10

dirkwb

    dirkwb


  • >1k berichten
  • 4172 berichten
  • Moderator

Geplaatst op 28 mei 2008 - 21:05

De nieuwe (werkende code):

1.PNG
Quitters never win and winners never quit.

#11

EvilBro

    EvilBro


  • >5k berichten
  • 6703 berichten
  • VIP

Geplaatst op 28 mei 2008 - 21:17

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]-tags?

#12

dirkwb

    dirkwb


  • >1k berichten
  • 4172 berichten
  • Moderator

Geplaatst op 28 mei 2008 - 21:21

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]-tags?

Wat? Tekst? Dan wordt de tekst toch een quote?
Quitters never win and winners never quit.

#13

EvilBro

    EvilBro


  • >5k berichten
  • 6703 berichten
  • VIP

Geplaatst op 28 mei 2008 - 21:53

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


I don't	 think	so 
	Tim...
(let op het blijven bestaan van spaties.)





0 gebruiker(s) lezen dit onderwerp

0 leden, 0 bezoekers, 0 anonieme gebruikers

Ook adverteren op onze website? Lees hier meer!

Gesponsorde vacatures

Vacatures