## Difficultés numériques spécifiques aux intervalles : dépendance sage: x = RIF(1/3) # intervalle ....: prev, cur = 1, x ....: for n in range(1, 101): ....: if n % 10 == 0: ....: print n, cur ....: tmp = ((2*n+1)*x*cur - n*prev)/(n+1) ....: prev, cur = cur, tmp 10 0.23026638893123? 20 0.1404537202987? 30 0.087544975147? 40 0.0470131594? 50 0.013396888? 60 -0.01479527? 70 -0.037857? 80 -0.05571? 90 -0.069? 100 -0.08? sage: x = RR(1/3) # nombre en virgule flottante ....: prev, cur = 1, x ....: for n in range(1, 101): ....: if n % 10 == 0: ....: print n, cur ....: tmp = ((2*n+1)*x*cur - n*prev)/(n+1) ....: prev, cur = cur, tmp 10 0.230266388931227 20 0.140453720298722 30 0.0875449751470354 40 0.0470131593190411 50 0.0133968878207792 60 -0.0147952694022218 70 -0.0378564502553853 80 -0.0557088088755728 90 -0.0682269985428992 100 -0.0753859270757874 sage: legendre_P(100, 1/3).n() -0.0753859270757875 ## Méthode de Newton par intervalles sage: def N(x): ....: return x - (x^2-2)/(2*x) sage: x = RIF(1.4, 1.5) ....: for i in range(10): ....: x = N(x) ....: print x 2.? 2.? 1.? 1.?e1 0.?e2 [-infinity .. +infinity] [-infinity .. +infinity] [-infinity .. +infinity] [-infinity .. +infinity] [-infinity .. +infinity] sage: def squash(x): ....: return RIF(x.center()) sage: def IN(x): ....: return (squash(x) - (squash(x)^2-2)/(2*x)).intersection(x) sage: x = RIF(1.4, 1.5) ....: for i in range(10): ....: x = IN(x) ....: print x 1.42? 1.414214? 1.4142135623731? 1.414213562373095? 1.414213562373095? 1.414213562373095? 1.414213562373095? 1.414213562373095? 1.414213562373095? 1.414213562373095?