Tcnicas Programadas en Visual Basic para Aproximacin a Integrales
Por Harvey Triana
Este articulo presenta tcnicas programadas en Visual Basic para integracin numrica por mtodos elementales. Resulta bastante til en Ingeniera aplicada y para estudiantes de las reas del Calculo Infinitesimal. En un contexto formal, la integral es la funcin antiderivada de una funcin f(x). La integracin numrica es aplicable en los siguientes caso: (1) La antiderivada no es simple de resolver, (2) Se desea determinar el rea bajo la curva de una serie de datos empricos o valores tabulados, lo que implica una incertidumbre de f(x). (3) La antiderivada conduce a funciones cuyas propiedades no han sido estudiadas o cuyos valores no han sido tabulados. Personalmente he aplicado la integracin numrica dado el problema o razn (2) La idea bsica es muy sencilla, se aproxima el integrando mediante segmentos pequeos de otra funcin cuya integral es de fcil clculo, p.e. una trapecio. El propsito del presente documento no es ensear o demostrar los teoremas y formulas, sino dar una aplicacin a travs de un programa Visual Basic..
Ejemplo La antiderivada de 1/x es Log|x|. Supongamos que la antiderivada no se conociera, que la funcin f(x) tuviera una antiderivada bastante compleja, o que solo contramos con una serie de datos empricos y requerimos conocer el rea bajo la curva. En estos caso, la solucin puntual (un valor), o la integral, se calcula por Tcnicas numricas. Caso concreto: hallar la integral de 1a 2 de f(x) = 1/x. Como conocemos la antiderivada de f(x) = 1/ x es Log(x) + C, rpidamente podemos decir que es Log(2) - Log(1), (logaritmos neperianos o en base Euler) y con el uso de una calculadora, obtengo 0.69... Cmo solucionara esto si no conociera la antiderivada?. 1. Obtengo valores de la funcin f(x) desde a hasta b, con un incremento discreto (entre menor es el intervalo, ms precisa ser la aproximacin numrica): i x f(x) 0 1.000 1.00000 1 1.100 0.90909 2 1.200 0.83333 3 1.300 0.76923 4 1.400 0.71429 5 1.500 0.66667 6 1.600 0.62500 7 1.700 0.58824 8 1.800 0.55556 9 1.900 0.52632 10 2.000 0.50000 Aplico la formula de algn mtodo numrico para aproximar Integrales. Los ms conocidos y elementales son:
Regla de lo Trapecios:
Regla de Simpson Generalizada:
El termino E se refiere al error que implica la tcnica numrica. El error tiene una connotacin terica y en la prctica no se aplica. La Regla de Simpson es ms precisa que la Regla de los Trapecios, pero se limita a la condicin de que n sea impar (el mtodo se basa en aproximacin a segmentos de parbola cada 3 punto). Bien, empleo cualquiera de las funciones TrapeciosRule o SimpsonRule que anexo al final de este articulo, de la siguiente manera: Uso un array y() de tipo Single y almaceno los valores de f(x). Finalmente aplico Resultado = TrapeciosRule(a, b, n, y()), Donde a =1, b = 2 y n = 10. En cdigo que use fue: n = 10 ReDim y(0 To n) As Single a = 1 b = 2 x = 0 For i = 0 To n x = a + i * (b - a) / n y(i) = 1 / x Next Resultado = TrapeciosRule(a, b, n, y()) Los resultados son los siguientes: Antidifferentiation = 0.693147 Trapecios Rule = 0.693773 Error: -0.09 % Regla de Simpson = 0.693152 Error: 0.00 % Funciones para Integracin Numrica Public Function TrapeciosRule( _ a As Single, b As Single, n, y() As Single _ ) As Single 'Apostol 735 Dim i, s As Single For i = 1 To n - 1 s = s + y(i) Next TrapeciosRule = 0.5 * (b - a) * (y(0) + 2 * s + y(n)) / n End Function
Public Function SimpsonRule( _ a As Single, b As Single, n, y() As Single _ ) As Single If n Mod 2 Then SimpsonRule = -999.25 'Retorna una bandera de error Exit Function End If
'//Apostol 742 Dim i, s1 As Single, s2 As Single, Par As Boolean For i = 1 To n - 1 If Par Then s2 = s2 + y(i) Else s1 = s1 + y(i) End If Par = Not Par Next SimpsonRule = (b - a) * (y(0) + 4 * s1 + 2 * s2 + y(n)) / 3 / n End Function Hola, En el cdigo este deberas darle un nombre distinto al seno. Con seno(z) estas dicindole que busque un vector llamado "seno" y le saque la posicin z. Aqu no usas vectores as que nada. Despus, en el Next no tienes que poner "Next z", eso ya lo defines al poner For z = 0 To 100. Te propongo mi solucin: Private Sub Command1_Click() 'declaro variables Dim seno As Double Dim seno_temp As Double 'Variable para almacenar temporalmente el valor del seno antes de sumarlo a seno Dim fact As Double Dim z As Integer Dim n As Double Dim a As Single Dim x As Single 'suma acumulativa y calculo factorial para cada valor de "z" seno = 0 x = Val(Text1.Text) For z = 0 To 100 n = (2 * z + 1) 'Calculo el factorial If n = 1 Then fact = 1 Else fact = fact * (n + 1) * (n + 2) 'Hallo el valor de "seno" y sumo seno_temp = ((-1) ^ z) * (x ^ n) / (n * fact) seno = seno + seno_temp Next Text3.Text.SetFocus End Sub Marcado en negrita lo que deberas corregir. Espero que te sirva. Saludos