REPÚBLICA DE PANAMA UNIVERSIDAD TECNOLÓGICA DE PANAMA FACULTAD DE INGENIERÍA CIVIL MÉTODOS NUMÉRICOS PROYECTO DE MÉTODOS NUMÉRICOS NOMBRE Barría, Benjamín 8-824-655 Espino, Boris 8-826-2225 Gómez, Juan 8-826-1653 León, Lissette 8-821-2455 Miranda, Edgar 8-821-136 GRUPO 1-IC-121 PROFESOR: ING. ROMÁN LORENZO Fecha: 14 de noviembre de 2008 Panama – Panama ÍNDICE DE CONTENIDO I- INTRODUCCIÓN II- CONTENIDO 1. MAPAS CONCEPTUALES 1.1 Interpolación de Lagrange 1.2 Método de la Secante 1.3 Método de Muller 1.4 Análisis de Regresión 1.4.1 Regresión Exponencial 1.4.2 Regresión Polinomial 2. ALGORITMOS 3. PROGRAMA 4. MANUAL DE USUARIO III- CONCLUSIONES Y RECOMENDACIONES IV- BIBLIOGRAFÍA V- ANEXOS I. INTRODUCCIÓN El análisis o cálculo numérico es la rama de las matemáticas que se encarga de diseñar algoritmos para, a través de números y reglas matemáticas simples simular procesos matemáticos más complejos aplicados a procesos del mundo real. Nuestro proyecto, es la aplicación de los conocimientos, aprendidos en el curso, de métodos Numéricos, y su implementación en el desarrollo de un programa, que nos ayude, además de reconocer los beneficios de los métodos mostrados y la computación, obtener una serie de soluciones a sistemas, que mas adelante podremos utilizar como ejemplo. La idea del trabajo nace como idea de nuestro profesor de Métodos Numéricos, el Ingeniero Román Lorenzo, que nos propone el reto de crear un programa, en el que apliquemos, los conocimientos obtenidos del curso, en la búsqueda de soluciones de interés en nuestra carrera de Ingeniería Civil. Los métodos Numéricos combinan dos de las más importantes herramientas en la ingeniería, estas son las matemáticas y las computadoras, es de ahí que se le define también como las matemáticas por computadoras. Una de las mejores herramientas que optamos por aprender, en nuestra carrera, es el uso del Visual BASIC. Este fue creado originalmente por John Kemeny y Tomas Kurtz, a mediados de la década de los sesenta, como un lenguaje instructivo para los estudiantes universitarios. A partir de entonces se fue sofisticando cada vez más. Este lenguaje está relacionado estrechamente con el sistema operativo de Windows Microsoft y debido a su función de macrolenguaje para el programa de hoja de calculo de Excel, su utilidad esta más que reconocida. Los objetivos del trabajo, se centran en que el estudiante y todo aquel que, desee utilizar nuestro programa, vea en el una herramienta didáctica, que le ayudara a mejorar su conocimiento de los métodos numéricos y sus aplicaciones en la ingeniería. También nos hemos trazado como objetivo, crear un programa, que nos ayude a resolver problemas de interés, en nuestra carrera, y aumentar nuestro potencial de programadores, investigando y aplicando nuevas técnicas en el desarrollo del programa. Nuestra Visión: Para la creación de este proyecto fue necesaria, mucha organización por parte de nosotros, los autores, que sin duda tuvimos dificultares, pero como un buen equipo supimos afrontarlas. Nuestro procedimiento estuvo basado, en reuniones, entre nosotros, en las que discutimos el plan, con el que comenzaríamos a trabajar, dividiéndonos, según nuestras cualidades, el proyecto, quedando así en dos partes; la presentación teórica del proyecto, y la elaboración del programa. Pero además, gracias a la comunicación que tuvimos como grupo, encaminamos nuestros esfuerzos en que todos los que presentáramos el proyecto, colaboráramos en cada parte del trabajo, para así aumentar nuestro conocimiento, tanto teórico, como programático. Este trabajo se basa en la aplicación de algunos de los métodos numéricos aprendidos durante el curso, a seguir: • Análisis de Regresión Cuadrático y Exponencial • Cálculo de las raíces de una función cualquiera mediante el método de Muller • Interpolación polinómica de Lagrange. El trabajo se divide en las siguientes partes: • Marco Teórico: Mapas conceptuales que presentan de manera concisa cada método. • Algoritmos: Flujo gramas y algoritmos en los que este trabajo está basado. • Código del Programa • Manual del Usuario Manual detallado con ejemplos y análisis de sus limitantes. Por ultimo presentamos, nuestras Conclusiones y Recomendaciones, acerca del proyecto, así como también, Anexos, con los que podrá conocer mas sobre los temas desarrollados en este. Esperamos que este proyecto sea de su agrado y provecho, y que con el vea lo que el esfuerzo que todos juntos hemos querido plasmar, para la confección de un trabajo de calidad y que sirva para las generaciones venideras, como material didáctico en el curso de los Métodos Numéricos. Los Autores. 1. CONCEPTOS TEÓRICOS El marco teórico para realizar el trabajo fue resumido en los siguientes mapas conceptuales, que ayudarán al estudiante a entender básicamente como aplicar cada método estudiado: INTERPOLACIÓN DE LAGRANGE es una deventajas Reformulación del polinomio de Newton. Evita el cálculo de diferencias divididas. se representa fn (x) = ∑ Li (x) fi (x) Se obtiene un polinomio de alto grado, resulta impráctico. procedimiento Tener los puntos que se desean interpolar El overfitting (sobre fliteo) al crecer el se utiliza Grado del polinomio se percibe una variación entre puntos de control consecutivos. La ecuación para buscar las L(x) y finalmente donde Se multiplican las L(x) con las (x) correspondientes. Li (x) = L j(x) y el resultado Si se quieren unir 3 puntos el resultado será una ecuación de 2 grado. o sea Tendrá grado n‐1 ANÁLISIS DE REGRESIÓN es una técnica Donde se encuentra la función que mejor se aproxime a los datos. pueden ser Regresión Exponencial de la forma b1 x Y = a1 e tal que S(a Ecuación no lineal en donde dependencia entre las variables X e Y es de forma exponencial. Convertir a una ecuación lineal por medio de logaritmos 0 , a 1 ,....., a m ) = Procedimiento General k yk ) = ∑ (a 2 n k=0 0 + a 1x k + a 2x 2 k + ,....., a m x m k − yk Derivadas parciales de S(a0, a1, ., am) con respecto a aj, j = 0, 1, 2,..,m sean cero. resultan m+1 ecuaciones lineales en las m+1 incógnitas a0, a1,.., am, los logy=log(a1 eb1x) Forma Lineal Y = a + bx k=0 m El grado m del polinomio ym(x) se puede escoger con base en el resultado teórico. con sus fórmulas obteniendo n ∑ (p (x ) − 2 características procedimiento de la forma Ym(x) = a0 + a1x + a2x + ….. + am xm 2 se emplea es una asi Regresión Polinomial Caracterizar cantidades que aumenten o disminuyen a una velocidad proporcional a sus magnitudes. Sr = ∑ (yi ‐ yr )2 St = ∑ (yi ‐ y* )2 y* = ∑ yi / n r = √ (St ‐ Sr) / St Coeficientes de las incógnitas se evalúan por el método de ecuaciones simultáneas. con sus fórmulas por último utilizamos Procedimiento General ) MÉTODO DE LA SECANTE traza características Rectas secantes a ecuación analizada y verifica la procedimiento Evaluar Xi , Xi‐1 ,Fi ,Fi‐1 Método Abierto que algunas veces diverge. Al converger lo hace más rápido que otros métodos. Intersección de dichas rectas con el eje de las X para conocer si es la raíz que se busca. se representa por er utilizar La ecuación para evaluar Xi+1 y luego evaluar Fi+1 Es una variación del método de Newton‐Raphson. Parecido con la fórmula del método de la regula falsi. pero Evita el cálculo de la derivada diferencias Secante puede divergir a la raíz, mientras que el método de la regla falsa converge. finalmente Si Fi+1 = 0 es la respuesta Si Fi+1 ≠ 0 se repite desde el primer paso. Xi+1 ‐> Xi Xi ‐> Xi‐1 MÉTODO DE MULLER consiste en procedimiento Obtener los coeficientes de la parábola que pasa por tres puntos elegidos. La Forma de la Ecuación de una Parabola f2(x0) = A(x0 – x2)2 + B(x0 – x2) + C sustituidos en la f2(x) = A(x – x2)2 + B(x – x2) + C Fórmula cuadrática para obtener el valor donde la parábola intercepta al eje X 2 f2(x1) = A(x1 – x2) + B(x1 – x2) + C f2(x2) = A(x2 – x2)2 + B(x2 – x2) + C es decir donde necesitaremos de Tres puntos [x0, f(x0)], [x1, f(x1)] y [x2, f(x2)] C = f2(x2) La raíz estimada. tu sustituyendo C f2(x 0)‐ f2(x2) = A(x0 – x2)2 + B(x0 – x2) f2(x1) ‐ f2(x2) = A(x1 – x2)2 + B(x1 – x2) x3 = x2 + si definimos h0 = x1 ‐ x0 h1 = x2 – x1 d0 = [f(x1) – f(x0)]/[x1 – x0] d1 = [f(x2) – f(x1)]/[x2 –x1] sería ‐(d0* h0 + d1* h1)= A(h1 + h0 )2 ‐ B(h1 + h0 ) b ± b 2 − 4ac finalmente aplicamos A = (d1 – d0)/(h1 + h0) B = Ah1 + d1 C = f(x2) − 2C sustituyendo la solución sería ‐d1* h1 = A(h1)2 ‐ Bh1 2. ALGORITMOS 1. Regresión: Para Realizar el proceso de regresión conviene utilizar el procedimiento Gauss de resolución de matrices: Para ellos implementamos el siguiente algoritmo: Método de Gauss Entrada: arreglo a, salida: arreglo soln función principal: establecer los coeficientes del arreglo a[i][j] hacer variable índice igual a cero mientras índice<=n-2 hacer triangulación(a,n,índice) incrementar índice en uno sustitución(a,n,soln) imprimir resultados triangulación(a,n,índice): hacer renglón igual a índice+1 mientras renglón <=n-1 hacer escala igual a (-a[renglón][índice])/(a[índice][índice]) hacer a[renglón][índice] igual a cero hacer columna igual a índice+1 mientras columna<=n sumar a[índice][columna]*escala a a[renglón][columna] incrementar columna en 1 incrementar renglón en 1 sustitución(a,n,soln): hacer soln[n-1] igual a a[n-1][n]/a[n-1][n-1] hacer renglón igual a n-2 mientras renglón>=0 hacer columna igual a n-1 mientras columna >=renglón+1 restar soln[columna]*a[renglón][columna] de a[renglón][n] restar 1 de columna hacer soln[renglón] igual a a[renglón][n]/a[renglón][columna] restar 1 de renglón Ya que hacemos uso de la la función exponencial linealizada, conviene conocer la el procedimiento de regresión lineal: Regresión Lineal con Mínimos Cuadrados Entrada: Número de datos n, datos (x,y) 1.- Hacer sumx, sumy, sumxy, sumx2 = 0 2.- Hacer i=0 3.- Mientras i<=n-1 hacer 4.5.6.7.8.- Hacer Hacer Hacer Hacer Hacer sumx=sumx+x(i) sumy=sumy+y(i) sumx2=sumx2+(x(i)*x(i)) sumxy=sumxy+(x(i)*y(i)) i=i+1 9.- Hacer Denominador=sumx*sumy-n*sumx2 10.- Hacer m=(sumx*sumy-n*sumxy)/Denominador 11.- Hacer b=(sumx*sumxy-sumx2*sumy)/Denominador 12.- Imprimir m y b Quedando así el flujograma de la Regresión Exponencial: Regresión Exponencial Double T(n), f(n), Lnf(n) INT n n = Val (txtn) si n <3 no For I = 1 to n Lea T(i), f(i) Lnf(i) = Ln[f(i)] sf = 0 , sx1 =0, sx2 =0 sy1 = 0, sxy = 0 For I = 1 to n sx1 = sx1 + T(i) sx2 = sx2 + [T(i)]2 sy1 = sy1 + Lnf(i) sxy = sxy + [T(i) * Lnf(i)] sf = sf + f(i) a1 = [(n * sxy) – (sx1 * sy1)] [(n * sx2) – (sx1)2] fprom = sy1/n ao = fprom – a1 * (sx1/n) b1 = a1 a1e = expao st = 0 sr = 0 For I = 1 to n st = st + [f(i) – (sf – n)]2 sr = sr + {f(i) – [a1e * expb1*T(i)]}2 r = √ (St - Sr) / St IMP a1e b1 r Retorno La regresión Cuadrática es un procedimiento muy parecido al anterior, consiste en la resolución de la siguiente matriz para un conjunto de n datos (t,d): Para ello definimos la matriz y aplicamos la función gauss, Podemos representar el procedimiento en el siguiente flujograma. Regresión Cuadrática Double T(n), f(n), A(3,4), C(3) INT n n = Val (txtn) si n <3 no For I = 1 to n Lea T(i), f(i) sx1 = 0, sx2 = 0, sx3 = 0, sx4 = 0 sy1 = 0, sxy = 0, sx 2y = 0 For I = 1 to n sx1 = sx1 + T(i) sx2 = sx2 + [T(i)]2 sx3 = sx3 + [T(i)]3 sx4 = sx4 + [T(i)]4 sy1 = sy1 + f(i) sxy = sxy + [T(i) * f(i)] sx 2y = sx 2y + {[T(i)]2*f(i)} A(1,1) = n , A(2,1) = sx1 , A(3,1) = sx2 , A(1,2) = sx1 , A(2,2)= sx2 , A(3,2) = sx3, A(1,3) = sx2 A(2,3) = sx3 A(3,3) = sx4 A(1,4) = sy1 A(2,4) = sxy A(3,4) = sx2y Call Gauss fprom = sy1/n st = 0 sr = 0 For I = 1 to n st = st + [f(i) – fprom]2 sr = sr + {f(i) – [ao +a1 * T(i) + a2 *T(i)2]}2 r = √ (St - Sr) / St IMP ao a1 a2 r Retorno 2. Cálculo de Ráices (Método de Muller): El método de Muller se puede representar fácilmente por el siguiente algoritmo: SubMuller (xr, h, eps, maxit) x2 = xr x1 = xr + h*xr x0 = xr – h*xr Do iter = iter + 1 h0 = x1 + x0 h1 = x2 – x1 d0 = (f(x1)-f(x0))/h0 d1 = (f(x2)-f(x1))/h1 a = (d1 – d0)/(h1 + h0) b = a*h1 +d1 c = f(x2) rad = sqrt (b*b – 4*a*c) if I b+ rad I > l b - rad l then den = b + rad Else den = b – rad End if dxr = -2*c/den xr = x2 + dxr Print iter, xr IF (Idxrl<eps*xr or iter>maxit) exit x0 = x1 x1 = x2 x2 = xr End do End Muller Nosotros podemos representar el método en el siguiente flujograma: Raíces de Ecuaciones FLUJOGRAMA : Método de Muller Inicio Leer xo, x1, x2 Cf, Nmax Cf = Cifras Significativas Nmax = Número máximo de iteraciones. Fx = Función E = Error Do Nmax Iter = 1, N max Nmax ho = x1 –x0 h1 = x2 –x1 do = (Fx1 – Fxo)/ho d1 = (Fx2 – Fx1)/h1 ao = (d1 –d0)/ h1 + h0 b = (a1 * h1) + d1 c = Fx2 disc = b2 – 4*a*c NO SI | b - √ disc | > | b + √ disc | H = ___2 c___ b + √ disc H = ___2 c___ b - √ disc x3 = x2 - H F(x3) ≤ E NO Nmax SI “La Raíz es” x3 “No converge en el máximo de iteraciones” FIN Cálculo de Ráices (Método de la secante): Se representa por el siguiente algoritmo. Algorítmo del Método de la Secante INPUTS: Aproximación inicial de x0 y x1 Tolerancia T Máximo número de iteraciones N0 OUTPUTS: Un valor aproximado de la raíz o un mensaje de error Paso1: Asigne i = 2 q0 = f(x0) q1 = f(x1) Paso2: Mientras i <= Paso3: Encuentre x = Paso4: Si |x - N0 haga Pasos 3-6 x1 - q1(x1 -x0) / (q1-q0) x1 | < T Entonces OUTPUT(x); STOP. Paso5: Asigne i = i+1 Paso6: Asigne Paso7: x0 = x1 y x1 = x q0 = q1 y q1 = f(x) OUTPUT("Método falló luego de N0 iteraciones"). STOP 3. Interpolación Polinómica de Lagrange: Interpolación de Lagrange Entrada: Número de datos n, datos (x,f(x)) y el valor para el que se desea interpolar xint 1.- Hacer f(xint)=0 2.- Hacer i=0 3.- Mientras i<=n-1 hacer 4.- Hacer L=1 5.- Hacer j=0 6.- Mientras j<=n-1 hacer 7.- Si i ≠ j entonces 8.- Hacer 9.- Hacer j=j+1 10.- Hacer f(xint)=f(xint)+L*f(x(i)) 11.- Hacer i=i+1 12.- Imprimir f(xint) Esto se puede representar en el siguiente flujograma: 3. PROGRAMA A continuación presentamos el código de los programas realizados en VB 6.0. Solo se presenta el contenido principal de cada uno, si desea conocer las demás propiedades refiérase al código fuente del proyecto incluido en el CD. '------------------------------------------------------------------------'Solución de Ecuaciones Lineales 'Sintaxis 'Argumentos: 'A(): Arreglo bidimensional que contiene la matriz 'C(): Arreglo unidimensional que entregará la solución. '------------------------------------------------------------------------Static Function Gauss(ByRef a() As Double, ByRef c() As Double) As Boolean Dim Tem As Double, Sum As Double, i, L, j, k, n, m On Error GoTo Gauss_Err n = UBound(c) m = n + 1 For L = 1 To n - 1 j = L For k = L + 1 To n If (Abs(a(j, L)) >= Abs(a(k, L))) Then Else: j = k End If Next If Not (j = L) Then For i = 1 To m Tem = a(L, i) a(L, i) = a(j, i) a(j, i) = Tem Next End If For j = L + 1 To n Tem = a(j, L) / a(L, L) For i = 1 To m a(j, i) = a(j, i) - Tem * a(L, i) Next Next Next c(n) = a(n, m ) / a(n, n) For i = 1 To n - 1 j = n - i Sum = 0 For L = 1 To i k = j + L Sum = Sum + a(j, k) * c(k) Next c(j) = (a(j, m ) - Sum ) / a(j, j) Next Gauss = True Exit Function Gauss_Err: Gauss = False End Function [GAUSS : PÁGINA 1 of 1] '---------------------------------'PROGRAMA DE REGRESION CUADRATICA '---------------------------------Private Sub cmdcalcular_Click() Dim T() As Double, F() As Double Dim i As Integer, j As Integer, k As Integer, H As Integer Dim Z As Double, sx1 As Double, sx2 As Double, sx3 As Double, sx4 As Double, sy1 As Double, sxy As Double Dim x1 As Double, x2 As Double, y1 As Double, x3 As Double, sx2y As Double Dim x4 As Double, xy As Double, x2y As Double Dim a(3, 4) As Double, c(3) As Double, St As Double, Sr As Double Dim a0 As Double, a1 As Double, a2 As Double, fprom As Double, r As Double n = Val(txtn.Text) ReDim T(n) ReDim F(n) For i = 1 To n T(i) = Val(msftabla1.TextMatrix(i, 1)) F(i) = Val(msftabla1.TextMatrix(i, 2)) Next sx1 = 0 sx2 = 0 sx3 = 0 sx4 = 0 sy1 = 0 sxy = 0 sx2y = 0 For i = 1 To n sx1 = sx1 + T(i) sx2 = sx2 + (T(i)) ^ 2 sx3 = sx3 + (T(i)) ^ 3 sx4 = sx4 + (T(i)) ^ 4 sy1 = sy1 + F(i) sxy = sxy + (T(i) * F(i)) sx2y = sx2y + ((T(i)) ^ 2) * F(i) Next 'agregar los coeficientes de la matriz A a(1, 1) = n a(2, 1) = sx1 a(3, 1) = sx2 a(1, 2) = sx1 a(2, 2) = sx2 a(3, 2) = sx3 a(1, 3) = sx2 a(2, 3) = sx3 a(3, 3) = sx4 a(1, 4) = sy1 [REGRESION CUADRATICA : PÁGINA 1 of 2] a(2, 4) = sxy a(3, 4) = sx2y 'aplicar Gauss Dim Solución() As Double ReDim Solución(3) As Double If Gauss(a(), Solución()) Then For i = 1 To 3 a0 = Solución(1) a1 = Solución(2) a2 = Solución(3) Next Else MsgBox "El sistema de ecuaciones no tiene solución..." End If 'Calcular el coeficiente de correlacion fprom = sy1 / n St = 0 Sr = 0 For i = 1 To n St = St + (F(i) - fprom ) ^ 2 Sr = Sr + (F(i) - (a0 + a1 * T(i) + a2 * T(i) ^ 2)) ^ 2 Next r = Sqr((St - Sr) / St) txta0.Text = Str(a0) txta1.Text = Str(a1) txta2.Text = Str(a2) txtr.Text = Str(r) End Sub [REGRESION CUADRATICA : PÁGINA 2 of 2] '---------------------------------------------------'PROGRAMA DE REGRESION EXPONENCIAL MÍNIMOS CUADRADOS '---------------------------------------------------Private Sub cmdcalcular_Click() Dim T() As Double, F() As Double, lnf() As Double Dim i As Integer, j As Integer, k As Integer, H As Integer Dim Z As Double, sx1 As Double, sx2 As Double, sy1 As Double, sxy As Double, sf As Double Dim x1 As Double, x2 As Double, y1 As Double Dim xy As Double Dim St As Double, Sr As Double Dim a0 As Double, a1 As Double, a2 As Double, fprom As Double, r As Double, a1e As Double, b1 As Double n = Val(txtn.Text) ReDim T(n) ReDim F(n) ReDim lnf(n) For i = 1 To n T(i) = Val(msftabla1.TextMatrix(i, 1)) F(i) = Val(msftabla1.TextMatrix(i, 2)) lnf(i) = Log(F(i)) / Log(2.71828182845905) Next sf = 0 sx1 = 0 sx2 = 0 sy1 = 0 sxy = 0 For i = 1 sx1 = sx1 sx2 = sx2 sy1 = sy1 sxy = sxy sf = sf + Next To n + T(i) + (T(i)) ^ 2 + lnf(i) + (T(i) * lnf(i)) F(i) 'Calcular los coeficiente a1 = ((n * sxy) - (sx1 * sy1)) / ((n * sx2) - (sx1) ^ 2) fprom = sy1 / n a0 = fprom - a1 * (sx1 / n) b1 = a1 a1e = 2.71828182845905 ^ a0 'Calcular St = 0 Sr = 0 For i = 1 St = St + Sr = Sr + Next el coeficiente de correlacion To n (F(i) - (sf / n)) ^ 2 (F(i) - (a1e * 2.71828182845905 ^ (b1 * T(i)))) ^ 2 [REGRESION EXPONENCIAL : PÁGINA 1 of 2] r = Sqr(((St - Sr) / St)) txta1.Text = Str(a1e) txtb1.Text = Str(b1) txtr.Text = Str(r) End Sub [REGRESION EXPONENCIAL : PÁGINA 2 of 2] '------------------------------------'RAICES DE ECUACIONES METODO DE MULLER '------------------------------------Private Sub Command1_Click() Dim Dim Dim Dim Dim Dim Dim Dim Dim Dim Dim Dim X0 As Double 'puntos inciales x1 As Double x2 As Double n As Integer 'iteraciones a1 As Double b1 As Double c1 As Double disc As Double H As Double resp() As Double E1 As Double 'cifras significativas s As Integer Dim Dim Dim Dim h0 h1 d0 d1 As As As As Double Double Double Double s = Val(txts) E1 = 0.5 * 10 ^ (-s) n = txtn X0 = Val(txtx0.Text) x1 = Val(txtx1.Text) x2 = Val(txtx2.Text) ReDim a(n) ReDim b(n) ReDim resp(n) For k = 1 To n 'restando los puntos conocidos h0 = x1 - X0 h1 = x2 - x1 d0 = (F(x1) - F(X0)) / h0 d1 = (F(x2) - F(x1)) / h1 'coeficientes y discriminante a1 = (d1 - d0) / (h1 + h0) b1 = a1 * h1 + d1 c1 = F(x2) disc = b1 ^ 2 - 4 * a1 * c1 If disc < 1 And k = n Then txtFr.Text = "?????" txtr.Text = "?????" MsgBox "no converge , intente introducir puntos iniciales cercanos al valor que hace cero la función" End If [RAICES DE EC. MULLER : PÁGINA 1 of 2] If disc > 1 Then If Abs(b1 - Sqr(disc)) < Abs(b1 + Sqr(disc)) Then H = 2 * c1 / (b1 + Sqr(disc)) Else H = 2 * c1 / (b1 - Sqr(disc)) End If x3 X0 x1 x2 = = = = x2 - H x1 x2 x3 resp(k) = x3 If F(Val(x3)) = 0 Then txtr.Text = Str(x3) MsgBox "Iteraciones:" & Str(k) MsgBox "LA RAÍZ ES " & Str(x3) txtFr.Text = Val(F(Val(x3))) Exit Sub End If If k > 1 Then If (Abs((x3 - resp(k - 1)) / x3) < E1) And Abs(F(Val(resp(k))) < 0.1) Then txtr.Text = Str(x3) MsgBox "Iteraciones:" & Str(k) MsgBox "LA RAÍZ ES " & Str(x3) txtFr.Text = Val(F(Val(x3))) Exit Sub Else If k = n And Abs(F(Val(resp(k))) < 0.1) Then MsgBox "el método no alcanzó la cantidad de cifras significativas en la cantidad de iteraciones definidas" txtFr.Text = "?????" txtr.Text = "?????" End If End If End If End If Next End Sub [RAICES DE EC. MULLER : PÁGINA 2 of 2] '------------------------------------------------------'PROGRAMA DE SOLUCION DE ECUACIONES METODO DE LA SECANTE '------------------------------------------------------Private Sub Command2_Click() Dim Dim Dim Dim Dim Dim Dim N As Double ea As Double X0 As Double x1 As Double x2 As Double ee As Double k As Integer ea = 0.5 * 10 ^ ((-Val(txts.Text))) N = Abs(Val(txtn.Text)) Dim Xr() As Double Dim Eea() As Double Dim Fr() As Double ReDim Xr(N ) ReDim Eea(N ) ReDim Fr(N ) X0 = Val(txtx0) x1 = Val(txtx1) For i = 1 To N k = k + 1 If (F(Val(X0)) - F(Val(x1))) = 0 Then MsgBox "escoja otros puntos iniciales en donde la pendiente no sea sea 0" Exit For End If x2 = x1 - (F(Val(x1)) * (X0 - x1)) / (F(Val(X0)) - F(Val(x1))) Xr(k) = x2 Fr(k) = F(Val(x2)) If F(Val(x2)) = 0 And i >= 1 Then MsgBox "Iteraciones:" & Str(i) MsgBox "LA RAÍZ ES " & Str(x2) Exit For End If ee = (x2 - x1) / (x2) Eea(k) = ee If Abs(F(Val(x2))) < 0.0001 Or Abs(ee) < ea Then [RAICES DE EC. SECANTE : PÁGINA 1 of 2] txtr.Text = Val(x2) txtFr.Text = Val(F(Val(x2))) MsgBox "Iteraciones:" & Str(i) MsgBox "LA RAÍZ ES " & Str(x2) Exit For End If X0 = x1 x1 = x2 Next End Sub [RAICES DE EC. SECANTE : PÁGINA 2 of 2] '-----------------------------'INTERPOLACION DE LAGRANGE '-----------------------------Private Sub cmdcalcular_Click() Dim X() As Double, F() As Double, Xn(4) As Double, Fn(4) As Double Dim L(4) As Double Dim i As Integer, j As Integer, k As Integer, H As Integer Dim Z As Double, s As Double N = Val(txtn.Text) 'numeros de datos Z = Val(txtz.Text) 'punto de interpolacion ReDim X(N ) ReDim F(N ) For i = 1 To N X(i) = Val(msftabla1.TextMatrix(i, 1)) F(i) = Val(msftabla1.TextMatrix(i, 2)) Next For i = 1 To N If X(i) > Z Then k = i - 1 H = k + 3 Exit For End If Next If H > N Then Do k = k - 1 H = k + 3 Loop Until H = N End If For j Xn(j) Fn(j) k = k Next = = = + 1 To 4 X(k) F(k) 1 For i = 1 To 4 mn = 1 dn = 1 For j = If i <> mn = mn dn = dn End If Next 1 j * * To 4 Then (Z - Xn(j)) (Xn(i) - Xn(j)) [INTERPOLACION DE LAGRANGE : PÁGINA 1 of 2] L(i) = mn / dn Next s = 0 For i = 1 To 4 s = s + L(i) * Fn(i) Next txtval.Text = Str(s) End Sub [INTERPOLACION DE LAGRANGE : PÁGINA 2 of 2] 4. MANUAL DEL USUARIO El programa esta diseñado, para la resolución de los siguientes problemas, de interés en la Ingeniería: • Regresiones: o Regresión Cuadrática. o Regresión Exponencial. • Calculo de Raíces (Reales e Imaginarias): o Utilización de Método Muller. o Utilización de Método de la Secante • Interpolaciones: o Utilización de la Interpolación de Lagrange. ¿Cómo funciona el programa? El programa, funciona utilizando el lenguaje de programación para Visual BASIC, que realiza una seria de comandos para obtener la respuesta deseada. ¿Cómo iniciar el programa? Vaya a la carpeta, donde este ubicado el programa, seleccione el ejecutable llamado FINAL y presione con un doble “clic”, de inmediato el programa comenzara a ejecutarse en su pantalla. Lo primero que observara, es la presentación del programa, con la lista de los autores de este. El programa esta diseñado, para que luego de un instante de tiempo determinado, la presentación continúe, y usted pueda acceder a los casos. ¿Cómo utilizar el programa? El uso de este programa es bien intuitivo y fácil de manejar. Haga “clic”, en la sección que desee trabajar, y de inmediato, aparcera una pantalla en la que introducirá los datos, para que el programa ejecute lo que usted desea. ¿Cómo calcular Regresiones Cuadráticas? Luego de haber escogido la opción de Regresión Cuadrática, usted tendrá una pantalla como esta: Ahora, introduzca la cantidad de datos, con los que desea trabajar, y presione el botón para GENERAR GRID. Cuando esté creada la tabla de datos, introduzca los valores, con los que trabajara, luego presione el botón de CALCULAR, para que se ejecuten los cálculos. Las respuestas serán presentadas en los cuadros de textos, llamados Valor de ao, a1 y a3. Además se presenta un cuadro con el coeficiente de correlación de la ecuación, obtenida y una opción si desea evaluar la función en un punto cualquiera. Ejemplo RC-1: • Ahora, realicemos un ejemplo de regresión cuadrática. Recordando que la formula general de una regresión cuadráticas es; y = ao + a1X + a2X2 Si tuviéramos los siguientes valores, X y 0 2.1 1 7.7 2 13.6 3 27.2 4 40.9 5 61.1 • Luego, damos clic al botón calcular, y en los cuadros, aparecerán los resultados. Nuestra ecuación cuadrática, con 6 cifras significativas, quedaría así: y = 2.47857 + 2.35929 X +1.86071 X2 También obtenemos, el coeficiente de correlación, los que nos índica que es un buen resultado, C=0.999254, recordando que un resultado se puede decir correcto si su coeficiente de correlación C aproximado a 1. • Posibles Errores y Soluciones o Un posible problema, que puede ocurrir con el programa, sería en el caso de que usted desee generar una tabla con menos valores que 3, la ec. Cuadrática no sería la mejor. En este caso el programa le enviara un mensaje indicándole lo que sucede. Por ultimo, presione el botón Limpiar Grid, si desea continuar calculando regresiones cuadráticas, o Inicio para volver a la pantalla principal. ¿Cómo calcular Regresiones Exponenciales? Al seleccionar la sección de regresión Exponencial, aparecerá esta pantalla, con la que usted podrá trabajar. Como lo hizo para las regresiones cuadráticas, introduzca la cantidad de datos, con los que desea trabajar, y presione el botón para generar el Grid. Cuando ya este creada la tabla de datos, introduzca los valores, con los que trabajara, luego presione el botón de Calcular, para que se ejecuten los cálculos. Las respuestas serán presentadas en los cuadros de textos, llamados a1, b1. Además se presenta un cuadro con el coeficiente de correlación de la ecuación, obtenida y podrá calcular. Ejemplo RE-1: X 0.4 0.8 1.2 1.6 2.0 2.3 y 750 1000 1400 2000 2700 3750 Luego de introducir los datos y presionar el botón calcular, nuestras soluciones aparecen en sus respectivos recuadros, a1 y b1, recordado que la formula general para una y = a1 e b1x ecuación exponencial es; Nuestra ecuación quedaría así,(con 6 cifras significativas): y = 519.497 e 0.841724x También obtenemos, el coeficiente de correlación, los que nos índica que es un mejor resultado, que el encontrado para la regresión cuadrática, C= 0.997413 Ejemplo RE-2: Los siguientes datos representan el crecimiento bacteriano en un caldo de cultivo durante varios días: Días 0 2 4 6 8 10 12 14 16 18 20 Cantidad x106 67.38 70.93 74.67 78.60 82.74 87.10 91.69 92.51 101.60 106.95 112.58 • La ecuación que describa este fenómeno es • Con un coeficiente de correlación C= 0.996748. • Utilizando la regresión exponencial, encontramos una ecuación, que se ajusta muy bien a los datos, estos lo podemos corroborar analizando el coeficiente de correlación, se aproxima a 1. y = 67.3821 e 2.52807x • Posibles Errores y Soluciones o Un posible error, que puede suceder en el programa, sería en el caso de que usted desee generar una tabla con menos valores que 3 Por ultimo, presione el botón Limpiar Grid, si desea continuar calculando regresiones exponenciales, o Inicio para volver a la pantalla principal. ¿Cómo calcular Raíces Reales e Imaginarias? Luego de seleccionar el botón de Cálculo de Raíces, en su pantalla se mostrara el siguiente formulario con el que trabajara. El programa esta dotado, para calcular las raíces reales, no presenta ningún script que permita cambiar la función que está evaluando, para ello debe cambiarla manualmente dentro del código del programa. Si utiliza el método de Muller, primero rellene los campos denominados como x0, x1, y x2; si utiliza el método de la secante solo rellene los datos x0 y x1; además indique el Número de Iteraciones que desea que el programa realice y la cantidad de cifras significativas que desee. Presione el botón, Calcular, para obtener una solución. Ejemplo RR: Se desea conocer las raíces de la función 1.5x^3+x^2-8x=0 Para ello defina primero la función el código del programa, siempre en función de “x” Si elegimos utilizar el método de Muller utilice 3 puntos cercanos a la raíz, por ejemplo, 2.5, 3 y 3.5, es importante que sean puntos cercanos a la raíz por la derecha o izquierda. Pera utilizar el método de la secante, rellenar solamente los espacios x0 y x1, con números cercanos a la raíz por la izquierda y la derecha, por ejemplo 1.5 y 2.5. • Posibles Errores y Soluciones o Si la solución no converge, trate de cambiar los puntos iniciales a puntos más cercanos entre sí o al lado contrario. o Si utiliza el método de la secante y obtiene un error de división entre cero, significando que la pendiente es 0, debe utilizar el método de Muller. ¿Cómo utilizar la sección de Interpolación de Lagrange? Primero, en la sección principal, seleccione el botón Interpolación de Lagrange, para acceder a la pantalla que mostramos abajo. Como lo hizo para las regresiones, introduzca la cantidad de datos, con los que desea trabajar, y presione el botón para generar el Grid. Cuando ya este creada la tabla de datos, introduzca los valores, con los que trabajara en la tabla, también indique el punto para el cual desea que se interpole, luego presione el botón de Calcular, para que se ejecuten los cálculos. Las respuestas serán presentadas en los cuadros de textos, llamados Valor de la Función, la cual mostrara el valor de la interpolación dada. Es importante resaltar que el pivote para la interpolación cúbica es el dato inmediatamente menor al dato que se desea interpolar, por lo que los datos deben ser introducidos en orden. • Posibles Errores y Soluciones o El programa de interpolación realizado tiene algunas limitantes, la primera es que utiliza el polinomio interpolante de Lagrange que puede a veces no dar buenos resultados; o La función de Lagrange está limitada al tercer grado por indicación del profesor, siendo determinada en cada caso por el valor de la función en el punto que se desea conocer. o El programa no evalúa puntos afuera de los datos, o sea no realiza extrapolación. Ejemplo IL-1: Se tiene una lista de datos y se desea conocer el valor de la función en x=1.71 X Y -2 -10.78 -1 -171.11 0 1.21 1 4.6 2 83.93 3 628.54 Cuando vuelva a la pantalla de inicio, elija el botón, para seguir trabajando, o si desea terminar, presione el botón finalizar, con el que se cerrarán las pantallas y el programa ejecutable. III. CONCLUSIONES El estudio de los métodos numéricos es muy útil y por ende importante para quien quiera que necesite herramientas para resolver operaciones, las cuales se saben que pueden resultar complicadas, y por más que se dominen los métodos tradicionales, estos muchas veces pueden no ser suficientes, sin embargo esto no quiere decir que la operación sea imposible de solucionar, y es ahí donde los métodos numéricos se aplican, y facilitan el trabajo de cierta manera. En el método de interpolación de Lagrange a medida que aumenta el orden de los polinomios, el resultado se acerca a su valor real. Una de sus ventajas es que es más claro y fácil de hacer. El método de la secante tiene un gran parecido con la fórmula del método de la regula falsa. La diferencia entre una y otra es que mientras el método de la regula falsa trabaja sobre intervalos cerrados, el método de la secante es un proceso iterativo y por lo mismo, encuentra la aproximación casi con la misma rapidez que el método de Newton-Raphson. Claro, corre el mismo riesgo de éste último de no converger a la raíz, mientras que el método de la regla falsa va a la segura. La gran ventaja del método de Muller es que se pueden localizar tanto las raíces reales como las imaginarias. Al ser un método de aproximación, este se realiza de forma secuencial e iterativamente, donde x1, x2, x3 reemplazan los puntos x0, x1, x2 llevando el error a un valor cercano a cero. En pocas palabras las aplicaciones de los métodos numéricos son muy variadas y necesarias, especialmente para las ingenierías, con esto, podemos concluir que nos interesa su estudio, y sobre todo aprenderlos y manejarlos bien, porque ahora veremos que en un futuro no muy lejano es muy probable que los necesitemos aplicar. RECOMENDACIONES • Es conveniente tener conocimientos de programación en visual Basic. Serán útiles los conocimientos que tiene el alumno sobre la teoría y práctica de los diferentes métodos numéricos presentados en clases. • El estudio de los métodos numéricos nos puede ayudar a modificar, entender e incluso simplificar algún tipo de software que los maneje, esto resulta mucha ventaja para el usuario, pues si conoces lo que haces lo puedes usar con más provecho y optimización. • Sería importante que se introdujera en el transcurso del desarrollo del curso del semestre, horas para la práctica de los métodos numéricos en Visual Basic. De tal manera que se obtengan mejores resultados al mejorar las condiciones del desarrollo del estudiante. • Podría ser bueno que la facultad brindara cursos de programación para aquellos estudiantes que necesitan mejorar sus conocimientos en la materia de programación. IV. BIBLIOGRAFÍA AMBULO, Leoncio. Estructuras Fundamentales de Programación con Visual Basic para Ingeniería. 2002 CHAPRA, Steven C. Métodos numéricos para ingenieros. MCGRAW HILL. 4ta Edición. 1995. Sitios de Internet • http://:www.univalle.edu.co/~automatica/Cursos/MoldelaPreg/Material • http://bc.inter.edu/facultad/jsierra/optimizadores%20modelo%20exponencial • http://descartes.cnice.mec.es/materiales_didacticos/resolucion_numerica_de_ecu aciones/secante.htm • http://docentes.uacj.mx/gtapia/AN/Unidad2/secante.htm • http://es.wikipedia.org/wiki/Interpolaci%C3%B3n_polin%C3%B3mica_de_Lag range • http://www.geocities.com/igaji/economia/regresion_y_correlacion_simple.htm • http://www.zweigmedia.com/MundoReal/calctopic1/regression.html V. ANEXOS INTERPOLACIÓN DE LAGRANGE Ejemplo: Suponga la siguiente tabla de datos: x 5 -7 -6 0 y 1 -23 -54 -954 Construya las funciones cardinales para el conjunto de nodos dado y el polinomio de interpolación de Lagrange correspondiente. Las funciones cardinales, empleando la expresión ser: El polinomio de interpolación de Lagrange es: , resultan MÉTODO DE LA SECANTE Representación grafica del método de la secante Lo que hace basicamente es ir tirando rectas secantes a la curva de la ecuacion que se tiene originalmente, y va checando la interseccion de esas rectas con el eje de las X para ver si es la raiz que se busca. Ejemplo Usar el método de la secante para aproximar la raíz de con , Solución Tenemos que y hasta que . y secante para calcular la aproximación 1 , comenzando , que sustituímos en la fórmula de la : Con un error aproximado de: Como todavía no se logra el objetivo, continuamos con el proceso. Resumimos los resultados en la siguiente tabla: Aprox. a la raíz Error aprox. 0 1 0.612699837 0.653442133 0.652917265 100% 63.2% 6.23% 0.08% De lo cual concluímos que la aproximación a la raíz es: - Usar el método de la secante para aproximar la raíz de y comenzando con , y hasta que Solución Tenemos los valores , . y , que sustituímos en la fórmula de la secante para obtener la aproximación : Con un error aproximado de: Como todavía no se logra el objetivo, continuamos con el proceso. Resumimos los resultados en la siguiente tabla: Aprox. a la raíz 0 1 0.823315073 0.852330280 0.853169121 Error aprox. 100% 21.4% 3.40% 0.09% De lo cual concluímos que la aproximación a la raíz es: MÉTODO DE MULLER f(x Parábola 0 0 Raíz 0 x x X2 X1 Raíz estimada X0 X Se busca esta parábola para intersecar los tres puntos [x0, f(x0)], [x1, f(x1)] y [x2, f(x2)]. End Muller Ejemplo f ( x ) = x 3 − 13 x − 12 h = 0,1 x2 = 5 x1 = 5,5 x0 =4,5 Con un análisis previo, las raíces son –3, -1 y 4 Solución f ( 4 , 5 ) = 20 , 625 f ( 5 , 5 ) = 82 , 875 f ( 5 ) = 48 Calculando h 0 = 5 ,5 − 4 ,5 = 1 δ0 h1 = 5 − 5 ,5 = − 0 ,5 82 ,875 − 20 , 625 = = 62 , 25 5 ,5 − 4 ,5 δ1 = 48 − 82 ,875 = 69 , 75 5 − 5 ,5 Hallando los coeficientes a = 69 , 75 − 62 , 25 = 15 b = 15 ( − 0 ,5 ) + 69 ,75 = 62 , 25 c = 48 − 0 ,5 + 1 La raíz cuadrada del discriminante es: 62 , 25 2 Así x3 = 5 + − 4 ⋅ 15 ⋅ 48 = 31 , 544 − 2 ⋅ 48 = 3 , 9765 62 , 25 + 31 , 544 Y el error estimado Ea = − 1, 0235 ⋅ 100 % = 25 , 74 % x3 Ahora x2 = 3,9765 x1 = 5 x0 =5,5 Haciendo uso de un programa y realizando diferentes iteraciones: i xr Ea % 0 5 1 3,9465 25,740 2 4,0011 0,614 3 4,0000 0,026 4 4,0000 0,000 REGRESIÓN EXPONENCIAL Ejemplo Ingresos de ventas de computadores Compaq (una marca ahora extinguida) son mostrados en la siguiente tabla, donde t representa años desde 1990.* Obtenga el modelo exponencial de regresión para los datos. tt = Año (1990 = 0) 0 2 4 7 RR = Ingreso ($ billón) 3 4 11 25 * Datos son redondeados. Fuente: Informes de compañía/The New York Times, Enero 27, 1998, p. D1. Solución Pues necesitamos modelar logR como una función lineal de t, primero construimos una tabla con x=t y y=logR , y entonces calculamos la recta de regresión, y=mx+b. x (=t)x (=t) 0 2 4 7 y (=logR)y (=logR) 0.477121 0.602060 1.04139 1.39794 En lugar de hacer la calculación a mano como hicimos más arriba, podemos utilizar la herramienta regresión en este sitio para hacerlo automáticamente. Simplemente ingrese los valores de x y y y pulse el botón "y=mx+b". La recta de regresión que obtenemos es y=013907x+042765 Por lo tanto, el modelo exponencial deseado es R=Art , donde r=10m=1001390713774, y A=1004276526770. Nuestra modelo de ingresos es, por lo tanto, R=26770(13774)t REGRESIÓN POLINOMIAL Ajuste un polinomio de segundo orden para los siguientes datos. Se resolverá el sistema Luego: Luego el sistema es: Resolviendo obtenemos Luego el polinomio de regresión de orden Z es: