Newton-Algorithm for two Variables


>function f([x,y]) &= [x^2+y^2-10,x+y-1]
2 2
[y + x - 10, y + x - 1]
>plot2d(&f(x,y)[1],niveau=0,r=5); ...
>plot2d(&f(x,y)[2],niveau=0,add=true); insimg;

>function Df([x,y]) &= jacobian(f(x,y),[x,y])
[ 2 x 2 y ]
[ ]
[ 1 1 ]
>newton2("f","Df",[-3,3])
[ -1.67944947177 2.67944947177 ]
>function fiter ([x,y]) &= [x,y]-invert(Df(x,y)).f(x,y)
[ 2 2 ]
[ - y - x + 10 2 y (y + x - 1) ]
[ -------------- + --------------- + x ]
[ 2 x - 2 y 2 x - 2 y ]
[ ]
[ 2 2 ]
[ y + x - 10 2 x (y + x - 1) ]
[ ------------ - --------------- + y ]
[ 2 x - 2 y 2 x - 2 y ]
>&factor(fiter(x,y))
[ 2 2 ]
[ - y + 2 y - x - 10 ]
[ -------------------- ]
[ 2 (y - x) ]
[ ]
[ 2 2 ]
[ y + x - 2 x + 10 ]
[ ------------------ ]
[ 2 (y - x) ]
>function g(v) := fiter(v)'
>iterate("g",[-3.2,3],10)
-1.87419354839 2.87419354839
-1.68743644811 2.68743644811
-1.67946405317 2.67946405317
-1.67944947182 2.67944947182
-1.67944947177 2.67944947177
-1.67944947177 2.67944947177
-1.67944947177 2.67944947177
-1.67944947177 2.67944947177
-1.67944947177 2.67944947177
-1.67944947177 2.67944947177
>iterate("g",[1,-2],10)
3.16666666667 -2.16666666667
2.72395833333 -1.72395833333
2.67989485753 -1.67989485753
2.67944951727 -1.67944951727
2.67944947177 -1.67944947177
2.67944947177 -1.67944947177
2.67944947177 -1.67944947177
2.67944947177 -1.67944947177
2.67944947177 -1.67944947177
2.67944947177 -1.67944947177
>&solve(f(x,y)), %()
1 - sqrt(19) sqrt(19) + 1
[[y = ------------, x = ------------],
2 2
sqrt(19) + 1 1 - sqrt(19)
[y = ------------, x = ------------]]
2 2
[ -1.67944947177 2.67944947177 2.67944947177 -1.67944947177 ]
>broyden("f",[-3,2])
[ -1.67944947177 2.67944947177 ]
>inewton2("f","Df",[-3,1])
[ ~-1.679449471770339,-1.679449471770335~
~2.679449471770335,2.679449471770338~ ]
>
Examples Homepage