Tidligere lagde du en funksjon som estimerte kvadratroten av et tall ved å bruke et fast antall iterasjoner av Newtons metode. Du har imidlertid innsett at dette gir unøyaktige svar i noen tilfeller, og unødvendig mange iterasjoner i andre tilfeller. Du ønsker derfor å tilpasse antall iterasjoner til verdien vi skal estimere kvadratroten av. En måte å gjøre dette på, er å kjøre Newtons metode helt til relativ endring av verdien er mindre enn en viss grense. Formelen for relativ endring, er.

Endre funksjonen til å regne ut kvadratrot med en relativ feilgrense på 1e-9.

Utdelt kode

kvadratrot.m
function retur = kvadratrot(tall)
    x = 1;
    for i = 1:20
       ny_x = x + (tall - x^2)/(2*x);
       fprintf('Iterasjon #%d: x_%d = %.10f, x_%d = %.10f\n', i, i-1, x, i, ny_x);
       x = ny_x;
    end
    retur = x;
end

Videoforklaring (8:25)

Løsningsforslag

kvadratrot.m
function retur = kvadratrot(tall)
    x = 1;
    er_over_feilgrense = true;
    i = 1;
    while er_over_feilgrense
       ny_x = x + (tall - x^2)/(2*x);
       fprintf('Iterasjon #%d: x_%d = %.10f, x_%d = %.10f\n', i, i-1, x, i, ny_x);
       relativ_endring = abs(ny_x - x)/x;
       er_over_feilgrense = relativ_endring >= 1e-9;
       x = ny_x;
       i = i + 1;
    end
    retur = x;
end
  • No labels