5 svar
40 visningar
johannasjo är nöjd med hjälpen!
johannasjo 12
Postad: 9 maj 2020 Redigerad: 9 maj 2020

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 8626
Postad: 10 maj 2020

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

johannasjo 12
Postad: 10 maj 2020 Redigerad: 11 maj 2020
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 8626
Postad: 10 maj 2020

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

johannasjo 12
Postad: 10 maj 2020 Redigerad: 10 maj 2020
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 12
Postad: 10 maj 2020

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