Proyecto de Métodos Numéricos

Anuncio
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:
Descargar