Descargar

Cálculo aproximado de las integrales definidas de las funciones derivables

Enviado por Aladar Peter Santha


    edu.red R i 2 2 2 1 Cálculo aproximado da las integrales definidas de las funciones derivables. Aladar Peter Santha Résumé: b Dans cet article on expose le calcule de l’integral I f ( x)dx d’une fonction (2m+1)-fois a derivable sur l’interval a, b . Si les points xi i 1,? , 2 p 1 divisent l’interval en 2p parties de la même longeur h (b a) /(2 p) , alors I = 2h p 1 i=0 f x2i 1 + 2 h3 3! p i=1 f" x2i 1 +?+ 2 h2m+1 2m 1 ! p i=1 f 2m x2i 1 R , oú x [a, b] et f ( 2 m 1) ( x) M 2 m 2 b a M 2m 2 ! 2 p 2 m 1 On expose aussi la programation de ces calcules a partir les derivées calculées d’une maniére simbolique ou approchée. ================================================================= Si f es una función continua en el intervalo a, b entonces existen varios métodos numéricos para el cálculo de la integral definida: b I = f(x)dx . (1) a La mayoría de estos métodos utilizan solamente los valores de la función f que han sido calculados para ciertos puntos del intervalo a, b . Suponiendo que la función f es (2m+1) – veces derivable en el intervalo a, b y considerando la siguiente división del intervalo a, b , a x0 x1 x2 ? x2 p b xi+1 xi = t = , sobre cada uno de los intervalos: b a 2p 0, 1, 2 , ? ,2 p 1 x2i 2 , x2i i 1, 2 , ? , p , la función se aproximará por el polinomio Taylor de grado 2m, asociado a la función f en el punto x2i 1 . Así, para x x2i 2 , x2i f(x)= 2m k=0 f (k) x2i k! 1 x x2i+1 k + f (2m+1) ci 2m 1 ! x x2i 1 2 m 1 , donde ci depende de x y está comprendido entre x y x2i 1 . Por tanto, I 2i 1 = x 2i x2 i f(x)dx = 2m x2 i k=0 x2 i f (k) x2i k! 1 x x2i 1 k dx + R2i 1 , donde R2i 1 = x2 i x2 i f (2m+1) ( ci ) 2m 1 ! x x2i 1 2m+1 dx . A continuación,

    edu.red 2 1 1 1 1 1 p 1 (4) (4) (7) 38 es 8 . 2 I 2i 1 = 2m k=0 f (k) x2i 1 k 1 ! x x2i 1 k 1 x 2i x 2i + R2i 1 . Luego, puesto que x x2i 1 k 1 x 2i x 2i 2 = x2i x2i 1 k+1 x2i x2i 1 k+1 = t k+1 ( t )k+1 = 0 2 t k+1 si k es impar si k es par , tendremos I 2i 1 = 2tf x2i + 2 t 3 3! f" x2i +?+ 2 t 2m+1 2m f x2i 2m 1 ! + R2i , y así I I1 I 3 ? I 2 p 1 , es decir I 2t p i=1 f x2i 1 + 2 t 3 3! p i 1 f" x2i 1 +?+ 2 t 2m+1 2m 1 ! p i f 2 m x2i 1 (2) , donde p R = R2i 1 (3) i 1 Si la función f 2m 1 está acotada sobre el intervalo a, b , es decir, , para cualquier x a, b , entonces f 2 m 1 x M R p i 1 R2i 1 2M 2m 1 ! p x2 i i 1 x2 i x x2i 1 2 m 1 dx 2M 2m 1 ! p i=1 x 2 m 2 x2i 1 2m 2 x2 i x2 i 2M 2m 2 ! i 1 x2i x2i 1 2 m 2 2pM 2m+2 t 2m 2 ! Ejemplo 1: Sea f la función definida por M b a 2 m 1 2 p 2m 2 ! 2 m 2 (5) f x = E xp 0.5x 2 , y sean a 0 , b siguientes: 2 y m 3 . Las derivadas de orden 2, 4, 6 y 7 de la función f tienen las expresiones f" (x)= ( x2 1)Exp 0.5x 2 f (x)= ( x4 6 x2 + 3) E xp 0.5x 2 (6) f (x)= ( x6 15 x4 + 45 x2 15) E xp 0.5x 2 f (x)= ( x7 + 21 x5 108 x3 + 111x ) Exp 0.5x 2 Construyendo la gráfica de la función y f ( 7 ) x por ordenador, se observa que M una cota superior de esta función en el intervalo 0,2 y así para x 0,2 y 2 p 60 , tendremos R 38 2 607 8! 0.0000000000000861875? 10 13 Para calcular la integral, el código Visual-Basic es la siguiente:

    edu.red 3 Public Function f(ByVal x As Double) As Double f x = E xp 0.5 * x * x End Function ‘——————————————————– Public Function f2(ByVal x As Double) As Double f 2( x) = (x ^2 1) Exp 0.5 * x * x End Function ‘————————————————————————— Public Function f4(ByVal x As Double) As Double f 4(x)= (x ^4 6 * x^2 + 3) E xp 0.5 * x * x End Function ‘———————————————————————– Public Function f6(ByVal x As Double) As Double f 6(x)= (x ^6 15*^4 + 45 * x^2 15) E xp 0.5 * x * x End Function ‘————————————————————————————————————— Public Function MST6(ByVal a As Double, ByVal b As Double, ByVal np As Integer) As String Dim i As Integer, s As Double, d As Double, a1 As Double, p As Double Dim s0 As Double, s2 As Double, s4 As Double, s6 As Double Dim j As Integer, sa As Double, sb As Double, n1 As Integer '—– Cálculo de la integral For j = 1 To 2 s0 = 0: s2 = 0: s4 = 0: s6 = 0: s = 0 If j = 1 Then n1 = np Else n1 = 2 * np d = (b – a) / n1: p = n1 / 2: a1 = a + d For i = 1 To p s0 = s0 + f(a1) s2 = s2 + f2(a1) s4 = s4 + f4(a1) s6 = s6 + f6(a1) a1 = a1 + 2 * d Next i s = 2 * d * s0 + (d ^ 3 / 3) * s2 + (d ^ 5 / 60) * s4 + (d ^ 7 / 2520) * s6 If j = 1 Then sa = s Else sb = s Next j MST6 = precision(sa, sb) End Function ‘———————————————————————————————————————– Public Function precision(ByVal t1 As Double, ByVal t2 As Double) As String Dim se As Double, sf As Double, sd As Double, sg As Double Dim p As Integer, t As Double, k As Integer, i As Integer Dim sol As String, rc As String p = Len(Str$(Fix(t1))) – 1: rc = Chr$(13) + Chr$(10) If t1 = t2 Then sol = "I = " + RutinaEdicion(t1) Else If Fix(t1) <> Fix(t2) Then sol = "I = " + RutinaEdicion(t1) sol = sol + rc + rc sol = sol + "Doblando el número de los nodos," + rc + rc sol = sol + "I = " + RutinaEdicion(t2) Else se = t1: sf = t2: sd = 1: k = 1 Do se = se * 10: sf = sf * 10 If Fix(se) <> Fix(sf) Then sg = Fix(se)

    edu.red 4 Exit Do Else If k = 15 – p + 1 Then sg = Fix(se) Exit Do Else k=k+1 End If End If Loop For i = 1 To k sd = sd * 10 Next i t = sg / sd sol = "I = " + RutinaEdicion(t) End If End If precision = sol End Function ‘—————————————————————————————————— Public Function RutinaEdicion(ByVal t As Double) As String Dim u As String If Abs(t) < 1 Then If t < 0 Then u = u + "- 0" Else u = u + "0" If t <> 0 Then u = u + Str$(Abs(t)) Else u = u + Str$(t) End If RutinaEdicion = u End Function Dividiendo el intervalo 0,2 en np 34 partes iguales, el código de arriba devuelve el siguiente valor de la integral: I 1.1962880133 2261 (6) , que tiene todas sus cifras exactas, excepto la última que esta redondeada. Si el cálculo manual de las derivadas es laborioso, para hallar el valor de la integral se pueden utilizar solamente las derivadas de orden 2 y 4 ó solamente la derivada de orden 2, con las funciones siguientes: Public Function MST4(ByVal a As Double, ByVal b As Double, ByVal np As Integer) As String Dim i As Integer, s As Double, d As Double, a1 As Double Dim s0 As Double, s2 As Double, s4 As Double, p As Double Dim j As Integer, sa As Double, sb As Double, n1 As Integer ' —– Cálculo de la integral For j = 1 To 2 If j = 1 Then n1 = np Else n1 = 2 * np s0 = 0: s2 = 0: s4 = 0: s = 0 d = (b – a) / n1: p = n1 / 2: a1 = a + d For i = 1 To p s0 = s0 + f(a1) s2 = s2 + f2(a1) s4 = s4 + f4(a1) a1 = a1 + 2 * d Next i s = 2 * d * s0 + (d ^ 3 / 3) * s2 + (d ^ 5 / 60) * s4 If j = 1 Then sa = s Else sb = s Next j MST4 = precision(sa, sb)

    edu.red I 5 End Function ‘———————————————————————————————————————- Public Function MST2(ByVal a As Double, ByVal b As Double, ByVal np As Integer) As String Dim i As Integer, s As Double, d As Double, a1 As Double Dim s0 As Double, s2 As Double, p As Double Dim j As Integer, sa As Double, sb As Double, n1 As Integer '—– Cálculo de la integral For j = 1 To 2 If j = 1 Then n1 = np Else n1 = 2 * np s0 = 0: s2 = 0: s = 0 d = (b – a) / n1: p = n1 / 2: a1 = a + d For i = 1 To p s0 = s0 + f(a1) s2 = s2 + f2(a1) a1 = a1 + 2 * d Next i s = 2 * d * s0 + (d ^ 3 / 3) * s2 If j = 1 Then sa = s Else sb = s Next j MST2 = precision(sa, sb) End Function Para alcanzar la misma precisión que en el apartado (6), con la función MST4 se debería dividir el intervalo 0,2 en np 148 partes iguales, y con la función MST2 se debería dividir el mismo intervalo en np 1350 partes iguales. En el caso cuando el cálculo de las derivadas es complicada y necesita mucho tiempo, se podría utilizar la función siguiente, que emplea el cálculo aproximado de las derivadas de orden superior: Public Function MST4B(ByVal a As Double, ByVal b As Double, ByVal np As Integer) As String Dim s0 As Double, s2 As Double, s4 As Double, p As Integer Dim i As Integer, s As Double, d As Double, a1 As Double, h As Double Dim j As Integer, sa As Double, sb As Double, n1 As Integer '—– Cálculo de la integral For j = 1 To 2 If j = 1 Then n1 = np Else n1 = 2 * np s0 = 0: s2 = 0: s4 = 0: s = 0 d = (b – a) / n1: p = n1 / 2: a1 = a + d For i = 1 To p s0 = s0 + f(a1) h = 0.0000001 s2 = s2 + (f(a1 + 2 * h) – 2 * f(a1 + h) + f(a1)) / (h ^ 2) h = 0.0001 s4 = s4 + (f(a1 + 4 * h) – 4 * f(a1 + 3 * h) + 6 * f(a1 + 2 * h) – 4 * f(a1 + h) + f(a1)) / (h ^ 4) a1 = a1 + 2 * d Next i s = 2 * d * s0 + (d ^ 3 / 3) * s2 + (d ^ 5 / 60) * s4 If j = 1 Then sa = s Else sb = s Next j MST4B = precision(sa, sb) End Function Calculando la integral definida de la función (5) entre los límites a 0 y b dividiendo el intervalo en 1000 partes iguales, se obtiene el resultado: 1.196288017 , donde todas las cifras son exactas, excepto la última. 2 con la funcione MST4B, Si la función es integrable en el intervalo I a,b) pero no es derivable en un número finito de puntos

    edu.red 6 ci i 1, ? , k del intervalo I , entonces b f x dx c1 f x dx ? ci f x dx ? b f x dx a a ci 1 ck A continuación se exponen funciones para el cálculo de las integrales definidas de las funciones derivables, que utilizan los cálculos con los enteros y decimales largos, el cálculo de las funciones elementales con precisión grande y el cálculo aproximado de las derivadas de orden superior. Naturalmente esto hará que los cálculos duren más tiempo. Sin embargo, en el futuro se espera una considerable aumento de la velocidad de los ordenadores y entonces estas funciones serán más rápidas y podrían sobrepasar la precisión de los métodos habituales actuales. Public Function MST2C(ByVal ax As String, ByVal bx As String, ByVal np As Integer) As String Dim i As Integer, s As String, d As String, a1 As String, x(2) As String Dim s0 As String, s2 As String, p As Integer, n As Integer, h As String Dim sx As String, pr As Integer, sb As String, nn(2) As String Dim j As Integer, sa As String n=7 ' pr es la precisión en los cálculos con decimales '—– Cálculo de la integral nn(1) = Mid$(Str$(Abs(np)), 2): pr = 16 x(1) = nn(1): x(2) = "2": nn(2) = Multiplicar(x(), n) For j = 1 To 2 s0 = "0": s2 = "0": s = "0" x(1) = bx: x(2) = ax: x(1) = Restar(x(), n): x(2) = nn(j) d = DividirDec(x(), 12, n): x(1) = ax: x(2) = d: a1 = SumarDec(x(), n) p = Val(nn(j)) / 2 For i = 1 To p x(1) = s0: x(2) = g(a1, pr): s0 = SumarDec(x(), n) x(1) = s2: x(2) = g2(a1): s2 = SumarDec(x(), n) x(1) = d: x(2) = "2": x(1) = MultiplicarDec(x(), n): x(2) = a1: a1 = SumarDec(x(), n) Next i x(1) = "2": x(2) = d: x(1) = MultiplicarDec(x(), n): x(2) = s0 s = MultiplicarDec(x(), n) x(1) = d: x(2) = "3": x(1) = PotenciasDec(x(), n): x(2) = "3" x(1) = DividirDec(x(), pr, n): x(2) = s2: x(1) = MultiplicarDec(x(), n): x(2) = s s = SumarDec(x(), n) If j = 1 Then sa = s Else sb = s Next j MST2C = PrecisionString(sa, sb) End Function ‘=========================================================================== Public Function MST4C(ByVal ax As String, ByVal bx As String, ByVal np As Integer) As String Dim s0 As String, s2 As String, s4 As String, p As Integer, x(2) As String Dim i As Integer, s As String, d As String, a1 As String, nn(2) As String Dim j As Integer, sa As String, sb As String, n As Integer Dim pr As Integer n=7 ' pr es la precisión en los cálculos con decimales '—– Cálculo de la integral nn(1) = Mid$(Str$(Abs(np)), 2): pr = 16 x(1) = nn(1): x(2) = "2": nn(2) = Multiplicar(x(), n) For j = 1 To 2 s0 = "0": s2 = "0": s4 = "0": s = "0" x(1) = bx: x(2) = ax: x(1) = RestarDec(x(), n): x(2) = nn(j) d = DividirDec(x(), pr, n): p = Val(nn(j)) / 2 x(1) = ax: x(2) = d: a1 = SumarDec(x(), n) For i = 1 To p x(1) = s0: x(2) = g(a1, pr): s0 = SumarDec(x(), n) x(1) = s2: x(2) = g2(a1): s2 = SumarDec(x(), n)

    edu.red 7 x(1) = s4: x(2) = g4(a1): s4 = SumarDec(x(), n) x(1) = "2": x(2) = d: x(1) = MultiplicarDec(x(), n): x(2) = a1: a1 = SumarDec(x(), n) Next i x(1) = "2": x(2) = d: x(1) = MultiplicarDec(x(), n): x(2) = s0 s = MultiplicarDec(x(), n) x(1) = d: x(2) = "3": x(1) = PotenciasDec(x(), n): x(2) = "3" x(1) = DividirDec(x(), pr, n): x(2) = s2: x(1) = MultiplicarDec(x(), n): x(2) = s s = SumarDec(x(), n): x(1) = d: x(2) = "5": x(1) = PotenciasDec(x(), n): x(2) = "60" x(1) = DividirDec(x(), pr, n): x(2) = s4: x(1) = MultiplicarDec(x(), n): x(2) = s s = SumarDec(x(), n) If j = 1 Then sa = s Else sb = s Next j MST4C = PrecisionString(sa, sb) End Function ‘========================================================================= Public Function MST6C(ByVal ax As String, ByVal bx As String, ByVal np As Integer) As String Dim s0 As String, s2 As String, s4 As String, s6 As String, x(2) As String Dim i As Integer, s As String, d As String, a1 As String, pr As Integer, nn(2) as String Dim j As Integer, sa As String, sb As String, n As Integer, p As Integer n=7 ' pr es la precisión en los cálculos con decimales '—– Cálculo de la integral nn(1) = Mid$(Str$(Abs(np)), 2): pr = 16 x(1) = nn(1): x(2) = "2": nn(2) = Multiplicar(x(), n) For j = 1 To 2 s0 = "0": s2 = "0": s4 = "0": s6 = "0": s = "0" x(1) = bx: x(2) = ax: x(1) = RestarDec(x(), n): x(2) = nn(j) d = DividirDec(x(), pr, n): p = Val(nn(j)) / 2 x(1) = ax: x(2) = d: a1 = SumarDec(x(), n) For i = 1 To p x(1) = s0: x(2) = g(a1, pr): s0 = SumarDec(x(), n) x(1) = s2: x(2) = g2(a1): s2 = SumarDec(x(), n) x(1) = s4: x(2) = g4(a1): s4 = SumarDec(x(), n) x(1) = s6: x(2) = g6(a1): s6 = SumarDec(x(), n) x(1) = "2": x(2) = d: x(1) = MultiplicarDec(x(), n): x(2) = a1: a1 = SumarDec(x(), n) Next i x(1) = "2": x(2) = d: x(1) = MultiplicarDec(x(), n): x(2) = s0 s = MultiplicarDec(x(), n) x(1) = d: x(2) = "3": x(1) = PotenciasDec(x(), n): x(2) = "3" x(1) = DividirDec(x(), pr, n): x(2) = s2: x(1) = MultiplicarDec(x(), n): x(2) = s s = SumarDec(x(), n): x(1) = d: x(2) = "5": x(1) = PotenciasDec(x(), n): x(2) = "60" x(1) = DividirDec(x(), pr, n): x(2) = s4: x(1) = MultiplicarDec(x(), n): x(2) = s s = SumarDec(x(), n): x(1) = d: x(2) = "7": x(1) = PotenciasDec(x(), n): x(2) = "2520" x(1) = DividirDec(x(), pr, n): x(2) = s6: x(1) = MultiplicarDec(x(), n): x(2) = s s = SumarDec(x(), n) If j = 1 Then sa = s Else sb = s Next j MST6C = PrecisionString(sa, sb) End Function ‘===================================================================== Public Function PrecisionString(ByVal sa As String, ByVal sb As String) As String Dim lsa As Integer, i As Integer, x(2) As String, n As Integer, z As String, sol As String Dim lsb As Integer, intsa As String, intsb As String, frsa As String, frsb As String n = 7: lsa = Len(sa): lsb = Len(sb) For i = 1 To lsa z = Right$(Left$(sa, i), 1) If z = "." Then intsa = Left$(sa, i – 1): frsa = Right$(sa, lsa – i) Exit For End If Next i For i = 1 To lsb

    edu.red 8 z = Right$(Left$(sb, i), 1) If z = "." Then intsb = Left$(sb, i – 1): frsb = Right$(sb, lsb – i) Exit For End If Next i If intsa <> intsb Then sol = intsa Else For i = 1 To Len(frsa) If Right$(Left$(frsa, i), 1) <> Right$(Left$(frsb, i), 1) Then sol = intsa + "." + Left$(frsa, i – 1) Exit For End If Next i End If PrecisionString = sol End Function ‘ ====================================================== Public Function g(ByVal x0 As String, pr As Integer) As String Dim u As String, x(2) As String, n As Integer n=7 x(1) = x0: x(2) = x0: x(1) = MultiplicarDec(x(), n): x(2) = "-0.5" u = MultiplicarDec(x(), n) g = ExpP(u, pr) End Function ‘ ======================================================== Public Function g2(ByVal x0 As String) As String Dim h As String, sx As String, x(2) As String Dim b(2) As String, n As Integer, pr As Integer n = 7: h = "0.000000000001": pr = 2 * (Len(h) – 2) + 16 b(0) = x0 x(1) = b(0): x(2) = h: b(1) = SumarDec(x(), n) x(1) = b(1): x(2) = h: b(2) = SumarDec(x(), n) x(1) = "-2": x(2) = g(b(1), pr): sx = MultiplicarDec(x(), n) x(1) = sx: x(2) = g(b(0), pr): sx = SumarDec(x(), n) x(1) = sx: x(2) = g(b(2), pr): sx = SumarDec(x(), n) x(1) = h: x(2) = "2": x(2) = PotenciasDec(x(), n): x(1) = sx g2 = DividirDec(x(), 16, n) End Function ‘ ========================================================== Public Function g4(ByVal x0 As String) As String Dim h As String, sx As String, x(2) As String Dim b(4) As String, n As Integer, i As Integer, pr As Integer n = 7: h = "0.0000001": pr = 4 * (Len(h) – 2) + 16 b(0) = x0 For i = 1 To 4 x(1) = b(i – 1): x(2) = h: b(i) = SumarDec(x(), n) Next i x(1) = g(b(0), pr): x(2) = g(b(4), pr): sx = SumarDec(x(), n) x(1) = g(b(1), pr): x(2) = g(b(3), pr): x(1) = SumarDec(x(), n): x(2) = "-4" x(1) = MultiplicarDec(x(), n): x(2) = sx: sx = SumarDec(x(), n) x(1) = g(b(2), pr): x(2) = "6": x(1) = MultiplicarDec(x(), n) x(2) = sx: sx = SumarDec(x(), n): x(1) = h: x(2) = "4" x(2) = PotenciasDec(x(), n): x(1) = sx g4 = DividirDec(x(), 16, n) End Function ‘================================================================= Public Function g6(ByVal x0 As String) As String Dim h As String, sx As String, x(2) As String Dim b(6) As String, n As Integer, i As Integer, pr As Integer n = 7: h = "0.00001": pr = 6 * (Len(h) – 2) + 16

    edu.red 9 b(0) = x0 For i = 1 To 6 x(1) = b(i – 1): x(2) = h: b(i) = SumarDec(x(), n) Next i x(1) = g(b(0), pr): x(2) = g(b(6), pr): sx = SumarDec(x(), n) x(1) = g(b(1), pr): x(2) = g(b(5), pr): x(1) = SumarDec(x(), n): x(2) = "-6" x(1) = MultiplicarDec(x(), n): x(2) = sx: sx = SumarDec(x(), n) x(1) = g(b(2), pr): x(2) = g(b(4), pr): x(1) = SumarDec(x(), n): x(2) = "15" x(1) = MultiplicarDec(x(), n): x(2) = sx: sx = SumarDec(x(), n) x(1) = g(b(3), pr): x(2) = "-20": x(1) = MultiplicarDec(x(), n) x(2) = sx: sx = SumarDec(x(), n): x(1) = h: x(2) = "6" x(2) = PotenciasDec(x(), n): x(1) = sx g6 = DividirDec(x(), 16, n) End Function Para que el tiempo de ejecución sea menor, se recomienda que el número de las partes en que se divide el intervalo sea una potencia de 2, aunque podría ser también cualquier número par. Al efectuar el cálculo de la integral de la función (5) entre los límites a 0 y b 2 con las funciones MST2C, MST4C y MST6C, se obtienen los siguientes valores para la integral: Nr. Divisiones: 8 16 32 64 128 MST2C 1.1962 1.196288 1.1962880 1.19628801 1.196288013 MST4C 1.19628 1.19628801 1.196288013 1.196288013322 1.19628801332260 Nr. 8 16 32 64 Didivisiones MST6C 1.196288013 1.19628801332 1.196288013322 1.19628801332260 Finalmente, hallando las derivadas manualmente y utilizando el cálculo de las funciones elementales con precisión grande, para calcular el valor de la integral se pueden considerar también las funciones siguientes: Public Function MST2D(ByVal ax As String, ByVal bx As String, ByVal np As Integer) As String Dim i As Integer, s As String, d As String, a1 As String, x(2) As String Dim s0 As String, s2 As String, p As Integer, n As Integer, j As Integer Dim sx As String, pr As Integer, nn(2) As String, sa As String, sb As String n = 7: pr = 24: nn(1) = Mid$(Str$(Abs(np)), 2) x(1) = nn(1): x(2) = "2": nn(2) = Multiplicar(x(), n) ' pr es la precisión en los cálculos con decimales '—– Cálculo de la integral For j = 1 To 2 s0 = "0": s2 = "0": s = "0" x(1) = bx: x(2) = ax: x(1) = Restar(x(), n): x(2) = nn(j) d = DividirDec(x(), 12, n): x(1) = ax: x(2) = d: a1 = SumarDec(x(), n) p =Val( nn(j)) / 2 For i = 1 To p x(1) = s0: x(2) = h(a1, pr): s0 = SumarDec(x(), n) x(1) = s2: x(2) = h2(a1, pr): s2 = SumarDec(x(), n) x(1) = d: x(2) = "2": x(1) = MultiplicarDec(x(), n): x(2) = a1: a1 = SumarDec(x(), n) Next i x(1) = "2": x(2) = d: x(1) = MultiplicarDec(x(), n): x(2) = s0 s = MultiplicarDec(x(), n) x(1) = d: x(2) = "3": x(1) = PotenciasDec(x(), n): x(2) = "3" x(1) = DividirDec(x(), pr, n): x(2) = s2: x(1) = MultiplicarDec(x(), n): x(2) = s s = SumarDec(x(), n)

    edu.red 10 If j = 1 Then sa = s Else sb = s Next j MST2D = PrecisionString(sa, sb) End Function ‘ ==================================================================== Public Function MST4D(ByVal ax As String, ByVal bx As String, ByVal np As Integer) As String Dim s0 As String, s2 As String, s4 As String, p As Integer, x(2) As String Dim i As Integer, s As String, d As String, a1 As String, pr As Integer Dim j As Integer, sa As String, sb As String, n As Integer, nn(2) As String ' pr es la precisión en los cálculos con decimales '—– Cálculo de la integral n = 7: pr = 24: nn(1) = Mid$(Str$(Abs(np)), 2) x(1) = nn(1): x(2) = "2": nn(2) = Multiplicar(x(), n) For j = 1 To 2 s0 = "0": s2 = "0": s4 = "0": s = "0" x(1) = bx: x(2) = ax: x(1) = RestarDec(x(), n): x(2) = nn(j) d = DividirDec(x(), pr, n): p = Val(nn(j)) / 2 x(1) = ax: x(2) = d: a1 = SumarDec(x(), n) For i = 1 To p x(1) = s0: x(2) = h(a1, pr): s0 = SumarDec(x(), n) x(1) = s2: x(2) = h2(a1, pr): s2 = SumarDec(x(), n) x(1) = s4: x(2) = h4(a1, pr): s4 = SumarDec(x(), n) x(1) = "2": x(2) = d: x(1) = MultiplicarDec(x(), n): x(2) = a1: a1 = SumarDec(x(), n) Next i x(1) = "2": x(2) = d: x(1) = MultiplicarDec(x(), n): x(2) = s0 s = MultiplicarDec(x(), n) x(1) = d: x(2) = "3": x(1) = PotenciasDec(x(), n): x(2) = "3" x(1) = DividirDec(x(), pr, n): x(2) = s2: x(1) = MultiplicarDec(x(), n): x(2) = s s = SumarDec(x(), n): x(1) = d: x(2) = "5": x(1) = PotenciasDec(x(), n): x(2) = "60" x(1) = DividirDec(x(), pr, n): x(2) = s4: x(1) = MultiplicarDec(x(), n): x(2) = s s = SumarDec(x(), n) If j = 1 Then sa = s Else sb = s Next j MST4D = PrecisionString(sa, sb) End Function ‘ ==================================================================== Public Function MST6D(ByVal ax As String, ByVal bx As String, ByVal np As Integer) As String Dim s0 As String, s2 As String, s4 As String, s6 As String, x(2) As String, nn(2) As String Dim i As Integer, s As String, d As String, a1 As String, pr As Integer Dim j As Integer, sa As String, sb As String, n As Integer, p As Integer n = 7: pr =24 : nn(1) = Mid$(Str$(Abs(np)), 2) x(1) = nn(1): x(2) = "2": nn(2) = Multiplicar(x(), n) ' pr es la precisión en los cálculos con decimales '—– Cálculo de la integral For j = 1 To 2 s0 = "0": s2 = "0": s4 = "0": s6 = "0": s = "0" x(1) = bx: x(2) = ax: x(1) = RestarDec(x(), n): x(2) = nn(j) d = DividirDec(x(), pr, n): p = Val(nn(j)) / 2 x(1) = ax: x(2) = d: a1 = SumarDec(x(), n) For i = 1 To p x(1) = s0: x(2) = h(a1, pr): s0 = SumarDec(x(), n) x(1) = s2: x(2) = h2(a1, pr): s2 = SumarDec(x(), n) x(1) = s4: x(2) = h4(a1, pr): s4 = SumarDec(x(), n) x(1) = s6: x(2) = h6(a1, pr): s6 = SumarDec(x(), n) x(1) = "2": x(2) = d: x(1) = MultiplicarDec(x(), n): x(2) = a1: a1 = SumarDec(x(), n) Next i x(1) = "2": x(2) = d: x(1) = MultiplicarDec(x(), n): x(2) = s0 s = MultiplicarDec(x(), n) x(1) = d: x(2) = "3": x(1) = PotenciasDec(x(), n): x(2) = "3" x(1) = DividirDec(x(), pr, n): x(2) = s2: x(1) = MultiplicarDec(x(), n): x(2) = s s = SumarDec(x(), n): x(1) = d: x(2) = "5": x(1) = PotenciasDec(x(), n): x(2) = "60" x(1) = DividirDec(x(), pr, n): x(2) = s4: x(1) = MultiplicarDec(x(), n): x(2) = s

    edu.red 11 s = SumarDec(x(), n): x(1) = d: x(2) = "7": x(1) = PotenciasDec(x(), n): x(2) = "2520" x(1) = DividirDec(x(), pr, n): x(2) = s6: x(1) = MultiplicarDec(x(), n): x(2) = s s = SumarDec(x(), n) If j = 1 Then sa = s Else sb = s Next j MST6D = PrecisionString(sa, sb) End Function ‘ ================================================= Public Function h(ByVal x0 As String, pr As Integer) As String Dim u As String, x(2) As String, n As Integer n=7 x(1) = x0: x(2) = x0: x(1) = MultiplicarDec(x(), n): x(2) = "-0.5" u = MultiplicarDec(x(), n) h = ExpP(u, pr) End Function ‘=================================================== Public Function h2(ByVal x0 As String, pr As Integer) As String Dim x(2) As String, u As String, v As String, n As Integer n = 7: x(1) = x0: x(2) = "2" x(1) = PotenciasDec(x(), n): x(2) = "1": u = RestarDec(x(), n) x(1) = x0: x(2) = x0: x(1) = MultiplicarDec(x(), n): x(2) = "-0.5" v = MultiplicarDec(x(), n): x(1) = u: x(2) = ExpP(v, 24) h2 = MultiplicarDec(x(), n) End Function ‘ ===================================================== Public Function h4(ByVal x0 As String, pr As Integer) As String Dim x(2) As String, u As String, v As String, n As Integer n = 7: x(1) = x0: x(2) = "4": u = PotenciasDec(x(), n) x(1) = x0: x(2) = "2": x(1) = PotenciasDec(x(), n): x(2) = "-6" x(1) = MultiplicarDec(x(), n): x(2) = "3": v = SumarDec(x(), n) x(1) = u: x(2) = v: u = SumarDec(x(), n) x(1) = x0: x(2) = x0: x(1) = MultiplicarDec(x(), n): x(2) = "-0.5" v = MultiplicarDec(x(), n): v = ExpP(v, 24) x(1) = u: x(2) = v h4 = MultiplicarDec(x(), n) End Function ‘ ================================================================ Public Function h6(ByVal x0 As String, pr As Integer) As String Dim x(2) As String, u As String, v As String, w As String, n As Integer n = 7: x(1) = x0: x(2) = "6": u = PotenciasDec(x(), n) x(1) = x0: x(2) = "4": x(1) = PotenciasDec(x(), n): x(2) = "-15" v = MultiplicarDec(x(), n): x(1) = x0: x(2) = "2": x(1) = PotenciasDec(x(), n): x(2) = "45" x(1) = MultiplicarDec(x(), n): x(2) = "-15": w = SumarDec(x(), n) x(1) = u: x(2) = v: x(1) = SumarDec(x(), n): x(2) = w: u = SumarDec(x(), n) x(1) = x0: x(2) = x0: x(1) = MultiplicarDec(x(), n): x(2) = "-0.5" v = MultiplicarDec(x(), n): x(1) = ExpP(v, 24): x(2) = u h6 = MultiplicarDec(x(), n) End Function Las tablas siguientes, dan una idea de las posibilidades de cálculo con las funciones MST2D, MST4D y MS&D. Función MST2D Nº de las divisiones 8 16 32 64 128 Valor de la integral 1.1962 1.196288 1.1962880 1.19628801 1.196288013

    edu.red 8 (7) I 2 12 Función MST4D Función MST6D Nº de las divisiones 8 16 32 64 128 Nº de las divisiones 16 32 64 128 Valor de la integral 1.19628 1.19628801 1.196288013 1.196288013322 1.19628801332260 Valor de la integral 1.196288013 1.19628801332 1.1962880133226 1.1962880133226082 1.19628801332260820 Si en la función MST6D pr 24 y al intervalo 0,2 se divide en 1024 partes iguales, la integral definida de la función (5) sobre este intervalo es: I 1.19628801 3322608202 931 , donde hay 21 cifras después del punto decimal (imposible de obtener con los métodos convencionales, que trabajan en la aritmética de punto flotante). Hasta ahora, para evaluar la precisión del resultado no se ha utilizado la fórmula (4). La precisión se evaluó calculando el valor de la integral para dos divisiones del intervalo, donde la segunda división tenía el doble de puntos que la primera y reteniendo del primer valor de la integral la sección izquierda máxima que figura encaja enteramente en el segundo valor. Por ejemplo, si se calcula el valor de la integral (1) de la función (5) en el intervalo 0,2 (utilizando la función MST4C), dividiendo el intervalo en 8 y luego en 16 partes iguales, se obtienen los valores siguientes para el integral: I1 1.1962878898? 1.1962880114? Se observa que la sección izquierda máxima de I1 que se encuentra enteramente en I 2 , es 1.19628 I . Se podría proceder de otra manera también, calculando la misma integral solo para 8 divisiones y evaluando una cota superior del error absoluto del error del cálculo utilizando la fórmula (4) El programa siguiente calcula la integral anterior dividiendo el intervalo en 8 partes iguales y determina con la fórmula (4) la cota superior del error absoluto de los cálculos: Public Function MST4CC(ByVal ax As String, ByVal bx As String, ByVal np As Integer) As String Dim s0 As String, s2 As String, s4 As String, p As Integer, x(2) As String Dim i As Integer, s As String, d As String, a1 As String, u As String Dim k As Integer, sa As String, sb As String, n As Integer, u As String Dim nps As String, cota As String, v As String, pr As Integer Dim dif0 As String, dif1 As String, dif2 As String ' pr precisión en los calculos con decimales '—– Cálculo de la integral

    edu.red 13 n = 7: pr = 16: nps = Mid$(Str$(Abs(np)), 2) s0 = "0": s2 = "0": s4 = "0": s = "0" x(1) = bx: x(2) = ax: dif0 = RestarDec(x(), n): x(1) = dif0: x(2) = nps d = DividirDec(x(), pr, n): p = np / 2 x(1) = ax: x(2) = d: a1 = SumarDec(x(), n) For i = 1 To p x(1) = s0: x(2) = g(a1, pr): s0 = SumarDec(x(), n) x(1) = s2: x(2) = g2(a1): s2 = SumarDec(x(), n) x(1) = s4: x(2) = g4(a1): s4 = SumarDec(x(), n) x(1) = "2": x(2) = d: x(1) = MultiplicarDec(x(), n): x(2) = a1: a1 = SumarDec(x(), n) Next i x(1) = "2": x(2) = d: x(1) = MultiplicarDec(x(), n): x(2) = s0 s = MultiplicarDec(x(), n) x(1) = d: x(2) = "3": x(1) = PotenciasDec(x(), n): x(2) = "3" x(1) = DividirDec(x(), pr, n): x(2) = s2: x(1) = MultiplicarDec(x(), n): x(2) = s s = SumarDec(x(), n): x(1) = d: x(2) = "5": x(1) = PotenciasDec(x(), n): x(2) = "60" x(1) = DividirDec(x(), pr, n): x(2) = s4: x(1) = MultiplicarDec(x(), n): x(2) = s sa = SumarDec(x(), n) 'Cota superior del valor absoluto de la 5ª derivada en el intervalo(ax,bx) x(1) = bx: x(2) = ax: x(1) = RestarDec(x(), n): x(2) = "16": dif1 = DividirDec(x(), 2, n) ' ¡En las extremidades del intervalo la derivada puede no existir! x(1) = ax: x(2) = dif1: u = SumarDec(x(), n) cota = g5(u) If Left$(cota, 1) = "-" Then cota = Mid$(cota, 2) For i = 1 To 14 x(1) = u: x(2) = dif1: u = SumarDec(x(), n) v = g5(u) If Left$(v, 1) = "-" Then v = Mid$(v, 2) x(1) = cota: x(2) = v: dif2 = RestarDec(x(), n) If Left$(dif2, 1) = "-" Then cota = v Next i 'Precisión de la integral x(1) = dif0: x(2) = "6": x(1) = PotenciasDec(x(), n): x(2) = cota x(1) = MultiplicarDec(x(), n): x(2) = Factorial(6, n): u = DividirDec(x(), 24, n) x(1) = np: x(2) = "6": v = PotenciasDec(x(), n): x(1) = u: x(2) = v: u = DividirDec(x(), 24, n) x(1) = sa: x(2) = u If Left$(sa, 1) <> "-" Then sb = SumarDec(x(), n) Else sb = RestarDec(x(), n) k=1 Do If Left$(sa, k) = Left$(sb, k) Then k=k+1 Else s = Left$(sa, k – 1) Exit Do End If Loop If s = "" Or Len(s) = 1 Then s = Int(Val(sa)) MST4CC = s End Function ‘========================================================= Public Function g5(ByVal x0 As String) As String Dim h As String, sx As String, x(2) As String Dim b(5) As String, n As Integer, i As Integer, pr As Integer n = 7: h = "0.0000001": pr = 5 * (Len(h) – 2) + 16 b(0) = x0 For i = 1 To 5 x(1) = b(i – 1): x(2) = h: b(i) = SumarDec(x(), n) Next i x(1) = g(b(5), pr): x(2) = g(b(0), pr): sx = RestarDec(x(), n) x(1) = g(b(1), pr): x(2) = g(b(4), pr): x(1) = RestarDec(x(), n): x(2) = "5" x(1) = MultiplicarDec(x(), n): x(2) = sx: sx = SumarDec(x(), n) x(1) = g(b(3), pr): x(2) = g(b(2), pr): x(1) = RestarDec(x(), n): x(2) = "10"

    edu.red 14 x(1) = MultiplicarDec(x(), n): x(2) = sx: sx = SumarDec(x(), n) x(1) = h: x(2) = "5" ' x(2) = sx: sx = SumarDec(x(), n): x(2) = PotenciasDec(x(), n): x(1) = sx g5 = DividirDec(x(), 16, n) End Function Utilizando la función MST4CC se obtiene que I1 1.1962878898 ? R 0.0000014819561? Puesto que sumando a I1 el valor máximo de R las primeras 4 decimales de I1 no quedan afectadas, se puede considerar que el valor aproximado de la integral es I 1.1962 (Si I1 fuera negativo se debería restar de I1 el valor máximo de R y ver la parte no afectada de I1 ). Se observa que la segunda manera de trabajar conduce a un decimal exacto menos en el resultado, aunque el cálculo ha necesitado un poco menos de tiempo. Si la cota del valor absoluto de la 5ª derivada es inmejorable, la pérdida de un decimal exacto en el resultado se debe a que la estimación del error absoluto del cálculo por la fórmula (4) es aceptable pero probablemente mejorable. Tal como se ha escrito la función MST4CC, a continuación se presenta las funciones MST6CC y MST6DD: Public Function MST6CC(ByVal ax As String, ByVal bx As String, ByVal np As Integer) As String Dim s0 As String, s2 As String, s4 As String, s6 As String, x(2) As String Dim i As Integer, s As String, d As String, a1 As String, p As Integer Dim j As Integer, sa As String, sb As String, n As Integer, k As Integer Dim nps As String, cota As String, u As String, v As String, pr As Integer Dim dif0 As String, dif1 As String, dif2 As String ' pr precisión en los calculos con decimales '—– Cálculo de la integral n = 7: pr = 24: nps = Mid$(Str$(Abs(np)), 2) s0 = "0": s2 = "0": s4 = "0": s6 = "0": s = "0" If Left$(nps, 1) = " " Then nps = Mid$(nps, 2) x(1) = bx: x(2) = ax: dif0 = RestarDec(x(), n): x(1) = dif0: x(2) = nps d = DividirDec(x(), pr, n): p = np / 2 x(1) = ax: x(2) = d: a1 = SumarDec(x(), n) For i = 1 To p x(1) = s0: x(2) = g(a1, pr): s0 = SumarDec(x(), n) x(1) = s2: x(2) = g2(a1): s2 = SumarDec(x(), n) x(1) = s4: x(2) = g4(a1): s4 = SumarDec(x(), n) x(1) = s6: x(2) = g6(a1): s6 = SumarDec(x(), n) x(1) = "2": x(2) = d: x(1) = MultiplicarDec(x(), n): x(2) = a1: a1 = SumarDec(x(), n) Next i x(1) = "2": x(2) = d: x(1) = MultiplicarDec(x(), n): x(2) = s0 s = MultiplicarDec(x(), n) x(1) = d: x(2) = "3": x(1) = PotenciasDec(x(), n): x(2) = "3" x(1) = DividirDec(x(), pr, n): x(2) = s2: x(1) = MultiplicarDec(x(), n): x(2) = s s = SumarDec(x(), n): x(1) = d: x(2) = "5": x(1) = PotenciasDec(x(), n): x(2) = "60" x(1) = DividirDec(x(), pr, n): x(2) = s4: x(1) = MultiplicarDec(x(), n): x(2) = s s = SumarDec(x(), n): x(1) = d: x(2) = "7": x(1) = PotenciasDec(x(), n): x(2) = "2520" x(1) = DividirDec(x(), pr, n): x(2) = s6: x(1) = MultiplicarDec(x(), n): x(2) = s sa = SumarDec(x(), n) 'Cota superior del valor absoluto de la 7ª derivada en el intervalo(ax,bx) x(1) = bx: x(2) = ax: x(1) = RestarDec(x(), n): x(2) = "16": dif1 = DividirDec(x(), 2, n) ' ¡En las extremidades del intervalo la derivada puede no existir! x(1) = ax: x(2) = dif1: u = SumarDec(x(), n) cota = g7(u) If Left$(cota, 1) = "-" Then cota = Mid$(cota, 2) For i = 1 To 14

    edu.red 128 15 x(1) = u: x(2) = dif1: u = SumarDec(x(), n) v = g7(u) If Left$(v, 1) = "-" Then v = Mid$(v, 2) x(1) = cota: x(2) = v: dif2 = RestarDec(x(), n) If Left$(dif2, 1) = "-" Then cota = v Next i 'Precisión de la integral x(1) = dif0: x(2) = "8": x(1) = PotenciasDec(x(), n): x(2) = cota x(1) = MultiplicarDec(x(), n): x(2) = Factorial(8, n): u = DividirDec(x(), 24, n) x(1) = np: x(2) = "7": v = PotenciasDec(x(), n): x(1) = u: x(2) = v: u = DividirDec(x(), 24, n) x(1) = sa: x(2) = u If Left$(sa, 1) <> "-" Then sb = SumarDec(x(), n) Else sb = RestarDec(x(), n) k=1 Do If Left$(sa, k) = Left$(sb, k) Then k=k+1 Else s = Left$(sa, k – 1) Exit Do End If Loop If s = "" Or Len(s) = 1 Then s = Int(Val(sa)) MST6CC = s End Function ‘===================================================== Public Function g7(ByVal x0 As String) As String Dim h As String, sx As String, x(2) As String Dim b(7) As String, n As Integer, i As Integer, pr As Integer n = 7: h = "0.0000001": pr = 5 * (Len(h) – 2) + 16 b(0) = x0 For i = 1 To 7 x(1) = b(i – 1): x(2) = h: b(i) = SumarDec(x(), n) Next i x(1) = g(b(7), pr): x(2) = g(b(0), pr): sx = RestarDec(x(), n) x(1) = g(b(1), pr): x(2) = g(b(6), pr): x(1) = RestarDec(x(), n): x(2) = "7" x(1) = MultiplicarDec(x(), n): x(2) = sx: sx = SumarDec(x(), n) x(1) = g(b(5), pr): x(2) = g(b(2), pr): x(1) = RestarDec(x(), n): x(2) = "21" x(1) = MultiplicarDec(x(), n): x(2) = sx: sx = SumarDec(x(), n) x(1) = g(b(3), pr): x(2) = g(b(4), pr): x(1) = RestarDec(x(), n): x(2) = "35" x(1) = MultiplicarDec(x(), n): x(2) = sx: sx = SumarDec(x(), n) x(1) = h: x(2) = "7" ' x(2) = sx: sx = SumarDec(x(), n): x(2) = PotenciasDec(x(), n): x(1) = sx g7 = DividirDec(x(), 16, n) End Function Nº de las divisiones: MST4CC 1.1962880133226 MST6CC 1.19628801332260 Public Function MST6DD(ByVal ax As String, ByVal bx As String, ByVal np As Integer) As String Dim s0 As String, s2 As String, s4 As String, s6 As String, x(2) As String Dim i As Integer, s As String, d As String, a1 As String, pr As Integer Dim sa As String, sb As String, n As Integer, p As Integer, nps As String Dim dif0 As String, dif1 As String, dif2 As String Dim u As String, v As String, cota As String, k As Integer n = 7: pr = 24: nps = Mid$(Str$(Abs(np)), 2) If Left$(nps, 1) = " " Then nps = Mid$(nps, 2) ' pr es la precisión en los calculos con decimales '—– Cálculo de la integral s0 = "0": s2 = "0": s4 = "0": s6 = "0": s = "0" x(1) = bx: x(2) = ax: dif0 = RestarDec(x(), n): x(1) = dif0: x(2) = nps

    edu.red 16 d = DividirDec(x(), pr, n): p = np / 2 x(1) = ax: x(2) = d: a1 = SumarDec(x(), n) For i = 1 To p x(1) = s0: x(2) = h(a1, pr): s0 = SumarDec(x(), n) x(1) = s2: x(2) = h2(a1, pr): s2 = SumarDec(x(), n) x(1) = s4: x(2) = h4(a1, pr): s4 = SumarDec(x(), n) x(1) = s6: x(2) = h6(a1, pr): s6 = SumarDec(x(), n) x(1) = "2": x(2) = d: x(1) = MultiplicarDec(x(), n): x(2) = a1: a1 = SumarDec(x(), n) Next i x(1) = "2": x(2) = d: x(1) = MultiplicarDec(x(), n): x(2) = s0 s = MultiplicarDec(x(), n) x(1) = d: x(2) = "3": x(1) = PotenciasDec(x(), n): x(2) = "3" x(1) = DividirDec(x(), pr, n): x(2) = s2: x(1) = MultiplicarDec(x(), n): x(2) = s s = SumarDec(x(), n): x(1) = d: x(2) = "5": x(1) = PotenciasDec(x(), n): x(2) = "60" x(1) = DividirDec(x(), pr, n): x(2) = s4: x(1) = MultiplicarDec(x(), n): x(2) = s s = SumarDec(x(), n): x(1) = d: x(2) = "7": x(1) = PotenciasDec(x(), n): x(2) = "2520" x(1) = DividirDec(x(), pr, n): x(2) = s6: x(1) = MultiplicarDec(x(), n): x(2) = s sa = SumarDec(x(), n) 'Cota superior del valor absoluto de la 7ª derivada en el intervalo(ax,bx) x(1) = bx: x(2) = ax: x(1) = RestarDec(x(), n): x(2) = "16": dif1 = DividirDec(x(), 2, n) ' ¡En las extremidades del intervalo la derivada puede no existir! x(1) = ax: x(2) = dif1: u = SumarDec(x(), n) cota = h7(u, 36) If Left$(cota, 1) = "-" Then cota = Mid$(cota, 2) For i = 1 To 14 x(1) = u: x(2) = dif1: u = SumarDec(x(), n) v = h7(u, 24) If Left$(v, 1) = "-" Then v = Mid$(v, 2) x(1) = cota: x(2) = v: dif2 = RestarDec(x(), n) If Left$(dif2, 1) = "-" Then cota = v Next i 'Precisión de la integral x(1) = dif0: x(2) = "8": x(1) = PotenciasDec(x(), n): x(2) = cota x(1) = MultiplicarDec(x(), n): x(2) = Factorial(8, n): u = DividirDec(x(), 24, n) x(1) = np: x(2) = "7": v = PotenciasDec(x(), n): x(1) = u: x(2) = v: u = DividirDec(x(), 24, n) x(1) = sa: x(2) = u If Left$(sa, 1) <> "-" Then sb = SumarDec(x(), n) Else sb = RestarDec(x(), n) k=1 Do If Left$(sa, k) = Left$(sb, k) Then k=k+1 Else s = Left$(sa, k – 1) Exit Do End If Loop If s = "" Or Len(s) = 1 Then s = Int(Val(sa)) MST6DD = PrecisionString(sa, sb) End Function ‘============================================================ Public Function h7(ByVal x0 As String, pr As Integer) As String Dim x(2) As String, u As String, v As String, n As Integer n = 7: x(1) = x0: x(2) = "7": u = PotenciasDec(x(), n) If Left$(u, 1) = "-" Then u = Mid$(u, 2) Else u = u + "-" x(1) = x0: x(2) = "5": x(1) = PotenciasDec(x(), n): x(2) = "21" v = MultiplicarDec(x(), n): x(1) = x0: x(2) = "3": x(1) = PotenciasDec(x(), n): x(2) = "-108" x(1) = MultiplicarDec(x(), n): x(2) = v: v = SumarDec(x(), n): x(1) = u: x(2) = v: u = SumarDec(x(), n) x(1) = x0: x(2) = "111": x(1) = MultiplicarDec(x(), n): x(2) = u: u = SumarDec(x(), n) x(1) = x0: x(2) = x0: x(1) = MultiplicarDec(x(), n): x(2) = "-0.5" v = MultiplicarDec(x(), n): x(1) = ExpP(v, 24): x(2) = u h7 = MultiplicarDec(x(), n) End Function

    edu.red 17 Nº de las divisiones: 128 256 512 1024 MST6DD 1.196288013322608 1.19628801332260820 1.1962880133226082029 1.196288013322608202931 Las funciones MST4CC y MST6CC son lentas, sobre todo si se pretende más precisión (el intervalo se divide en muchas partes). En los superordenadores del futuro seguramente van a parecer más rápidas. La función MST6DD es más rápida y permite obtener resultados precisión grande, sin embargo para utilizarla hay que calcular las derivadas hasta el orden 7 (de manera manual)., que a veces no cuesta tanto. Advertencia: Para utilizar las funciones MST2C, MST4C, MST6C, Mst6CC, MST2D, MST4D, MST6D y MST6DD es necesario cargar en un módulo las funciones para operar con enteros y decimales largos y las funciones elementales de precisión grande [1]-[3] Bibliografía: [1] A. Peter Santha, Cálculos con números enteros largos en ordenadores, Monografías.com [2] A. Peter Santha, Cálculos con números decimales largos en ordenadores, Monografías.com [3] A. Peter Santha, Cálculo de los valores de las funciones elementales con precisión grande, Monografías.com [4] A. Peter Santha, Cálculo aproximado de las derivadas y derivadas parciales de orden superior, Monografías.com [5] B. DÉMIDOVITCH et I. MARON, ÉLÉMENTS DE CALCULE NUMÉRIQUE, ÉDITIONS MIR, MOCOU, 1973