\( \DeclareMathOperator{\abs}{abs} \newcommand{\ensuremath}[1]{\mbox{$#1$}} \)
(%i2) |
f(
x)
:
=
x
^
3
-
x
^
2
+
2
*
x
+
1
;
wxplot2d( f( x),[ x, - 2, 2]) ; |
Buscamos un intervalo donde se encuentre la raiz, con una longitud pequeña:
(%i4) |
p
:
makelist(
p,
p,
-
2,
2,
0
.
5)
$
makelist( print( "(", p[ i], ",", f( p[ i]), ")"), i, 1, length( p)) $ |
Encontramos un cambio de signo en el intervalo [-0.5,0]
1 Método de Newton
A continuación generamos la función a iterar:
(%i5) | define( newton( x), x - f( x) / diff( f( x), x)) ; |
Inicializamos p con el punto medio del intervalo e iteramos. Esta converge hacia un resultado p=newton(p), que es solución de f(x)=0. Veámoslo:
(%i7) |
p
:[(
-
.
5
+
0)
/
2]
$
p : append( p,[ float( newton( p[ 1]))]) ; |
Repetimos la itereción
(%i8) | p : append( p,[ float( newton( p[ 1]))]) ; |
Si consideramos que cometemos un error más pequeño que la diferencia de las dos últimas iteraciones, podemos poner como error:
(%i9) | print( "error:", p[ length( p)] - p[ length( p) - 1]) $ ; |
Created with wxMaxima.
Declaramos la función: