5 svar
119 visningar
johannasjo är nöjd med hjälpen
johannasjo 8 – Fd. Medlem
Postad: 9 maj 2020 20:33 Redigerad: 9 maj 2020 20:42

while loop

Hej jag behöver hjälp med att skriva en wile loop.

Det är s att jag beräknar en variabel G genom att kalla till en funktionfil kallas zeta. Jag är enbart intresserad utav sista elementet av G. och while loopen körs tills man har fyra korrekta sifror. För varje iteration så dubbleras N som är en variabel som beror på G. Trunkeringsfelet dvs d = G1(end)-G2(end) hoppar över trunkeringsfelet mellan 50 och 100. Jag vet redan enligt facit att körningen körs tils N blir 400.

N=25;

 

Det enda som inte funkar på min while loop är att trunkerings felet inte körs för när N=50 och N=100 utan hoppar över det steget. Jag får värden föra alla G(sista elementet) när N dubbleras men jag behöver att trunkeringsfelet räknas för varje iteration men för  andra iterationen så hoppas det över.

Laguna Online 28522
Postad: 10 maj 2020 07:52

Skulle det vara mer kod där? Jag ser bara raden "N=25;".

johannasjo 8 – Fd. Medlem
Postad: 10 maj 2020 17:12 Redigerad: 11 maj 2020 07:54
Laguna skrev:

Skulle det vara mer kod där? Jag ser bara raden "N=25;".

Nsteg=25; tolecance=4E-4;
while da>tolerance
[t g1] = zeta(Nsteg,h,); [t g2] = zeta(Msteg,y) % h is a constant
YA(end+1)=G1(end); % array förlängs samtidigt som sista elementet av G1 sparas. .
Nsteg=2*Nsteg;
[t G2] = zeta(Nsteg,h,);
YB(end+1)=G2(end);

da=(abs(G1(end)-G2(end)));
Nsteg=2*Nsteg YY(END+1)=g2(end);

Jag får rätt svar där jag har med alla iterationer tills man får rätt korrekta siffror men turnkeringsfelet dvs da hoppas över ett beräknings steg och det är vid andra iterationen där den ska beräkna skillnaden när Nsteg=50 OCH Nsteg=100.


Inlägg uppdaterat på användarens begäran. /Smutstvätt, moderator

Laguna Online 28522
Postad: 10 maj 2020 17:55

Du har Nsteg=2*Nsteg två gånger, så Nsteg kommer att vara 100 när andra iterationen börjar.

johannasjo 8 – Fd. Medlem
Postad: 10 maj 2020 18:03 Redigerad: 10 maj 2020 18:06
Laguna skrev:

Du har Nsteg=2*Nsteg två gånger, så Nsteg kommer att vara 100 när andra iterationen börjar.

Ja precis,om jag inte har en till dubblering på slutet så får jag dubbletter i  min g  vektor . Detta kan ses då i första iterationen så räknas g1(sista elementet)  för n=25 och n=50 och  da(trunkering felet/skillnaden) för n=25 och n=50. sedan i andra iterationen så räknas  g1(sista elementet) för n=50 igen då Nsteg är 50 i början på andra iterationen.  Om jag tar bort den andra dubblering av Nsteg så får jag faktiskt rätt men loopen räknas inte da för när n=50 och n=100 dvs andra iterationen.

johannasjo 8 – Fd. Medlem
Postad: 10 maj 2020 18:12

Ska försöka formulera mig bättre: 

Om jag inte  N=2*N två gånger så räknas G1 för när N =50 två gånger.  Detta ses i andra iterationen. Om jag har två N=2*N så får räknas inte d=  g(N=50) -g(N=100= ut. Det steget hoppas över

Svara Avbryt
Close