7 svar
39 visningar
suad 513
Postad: 13 mar 18:09

Iterationsformel

Hej, jag undrar på hur ska jag definiera xk+1 i matlab, sedan undrar jag på om min while loop är riktigt eller inte 

x0=5; xk=1/2*(xk-1+(5/(xk-1)); xk+1=

While abs(xk+1 - xk) > 10^(-10)
     
       xk+1 = xk+1 +1
end 
Dr. G 6478
Postad: 13 mar 21:14

En variant som sparar de itererade värdena och skriver ut dem på slutet. Om du inte skriver "format long" så får du inte tillräckligt med decimaler för att se att det verkligen konvergerar. 

format long;
x0 = 2.5;
x1 = .5*(x0 + 5/x0);
x = [x0; x1];
while abs(x1 - x0) > 1e-10
    x0 = x1;
    x1 = .5*(x0 + 5/x0);
    x = [x; x1];
end
disp(x)
disp(x.^2)
suad 513
Postad: 14 mar 08:47

hej, igen, men skulle inte x0 vara lik 5

suad 513
Postad: 14 mar 08:56
  x = [x; x1];

och betyder denna rad, att vi ska sätte resultatet vi får i en matris. 

Dr. G 6478
Postad: 14 mar 09:12
x1 = .5*(x0 + C/x0);

Med ovanstående i iterationen så fås ett närmevärde till √C. Sätt C = 5. 

Det första värdet på x0 är en startgissning. Prova några olika. 

x = [x; x1];

Jag lägger till det senaste värdet på x1 till kolumnvektorn x.  Det är inte nödvändigt, men efter while-loopen så innehåller x alla framitererade värden.

suad 513
Postad: 14 mar 10:07

tack så mycket, nu förstår jag bättre.

Laguna 14271
Postad: 14 mar 12:07

En kommentar om din ursprungliga kod.

Du hade t.ex.
    xk+1 - xk

Det var tänkt att betyda xk+1 - xk, men matlab kan inte veta vad som är tänkt att vara index. I stället tolkas xk som en enda variabel. +1 sedan hör däremot inte till variabeln utan är en vanlig addition. Det hela blir därför 1.

Om man har en vektor x och vill ta fram xk så skriver man x(k) i matlab. Man skriver på andra sätt i andra programmeringsspråk. Om du hade en vektor x så hade x(k+1)-x(k) varit rätt.

Här behöver vi inte hålla reda på alla x-värden utan det räcker med det just beräknade och det förra, och då behövs ingen vektor utan bara två variabler, som vi kan kalla vad vi vill. Dr. G. har valt att kalla dem x1 och x0. Det kan ingå siffror i ett variabelnamn.

suad 513
Postad: 14 mar 12:14

tack så mycket, det var till stor hjälp

Svara Avbryt
Close