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
Expand |
---|
|
Code Block |
---|
| 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)
Widget Connector |
---|
url | https://www.youtube.com/watch?v=KzYf5rvtDlQ |
---|
|
Løsningsforslag
Expand |
---|
title | Hvis du har prøvd selv, trykk her for å se svaret... |
---|
|
Code Block |
---|
| 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 |
|