Métodos numericos desarrollados

196
Índice Introducción…………………………………………………………………..5 Pasos a seguir para resolución de problemas…………………...5 Definición de error…………………………………………………..6 Tipos de errores……………………………………………………..8 Aplicaciones de los métodos numéricos en ingeniería………....9 Métodos numéricos Eliminación Gaussiana sin normalizar Objetivo……………………………………………………… ……………...11 Introducción………………………………………………………………….12 Desarrollo Ejemplo para resolución manual…………………………………13 Código en Matlab……………………………………………….....14 Diagrama de flujo……………………………………………….....15 Código en C++……………………………………………….........16 Conclusión…………………………………………………………………..17 Eliminación Gaussiana Normalizado Objetivo……………………………………………………………………...18 Introducción………………………………………………………………....19 Desarrollo Ejemplo para resolución manual………………………………....20 Código en Matlab…………………………………………………..21 Diagrama de flujo……………………………………....................22 Código en C++…………………………………............................24 Conclusión………………………………………………………………......25 Eliminación Gauss-Jordan Objetivo……………………………………………............................…….26 Introducción……………………………………………........................…..27 Desarrollo Ejemplo para resolución manual…………………………..….….29 Código en Matlab…………………………………………..………30 Diagrama de flujo …………………………………………..……...32 Conclusión…………………………………………………………......……33 Matriz inversa Objetivo….………….………………………………………………………..35 Introducción……………………………………………………………….....36 Desarrollo Ejemplo para resolución manual………………………………….37 Código en Matlab….………………………………………...……...38 Diagrama de flujo……………………………………………………39 Código en c…………………………………………………………..40 Conclusión…………………………………………………………………....42 Página 1

Transcript of Métodos numericos desarrollados

Índice

Introducción…………………………………………………………………..5Pasos a seguir para resolución de problemas…………………...5Definición de error…………………………………………………..6Tipos de errores……………………………………………………..8Aplicaciones de los métodos numéricos en ingeniería………....9

Métodos numéricos Eliminación Gaussiana sin normalizar

Objetivo……………………………………………………… ……………...11Introducción………………………………………………………………….12Desarrollo

Ejemplo para resolución manual…………………………………13Código en Matlab……………………………………………….....14Diagrama de flujo……………………………………………….....15

Código en C++……………………………………………….........16Conclusión…………………………………………………………………..17

Eliminación Gaussiana NormalizadoObjetivo……………………………………………………………………...18Introducción………………………………………………………………....19Desarrollo

Ejemplo para resolución manual………………………………....20Código en Matlab…………………………………………………..21Diagrama de flujo……………………………………....................22

Código en C++…………………………………............................24Conclusión………………………………………………………………......25

Eliminación Gauss-JordanObjetivo……………………………………………............................…….26Introducción……………………………………………........................…..27Desarrollo

Ejemplo para resolución manual…………………………..….….29Código en Matlab…………………………………………..………30Diagrama de flujo …………………………………………..……...32

Conclusión…………………………………………………………......……33Matriz inversa

Objetivo….………….………………………………………………………..35Introducción……………………………………………………………….....36Desarrollo

Ejemplo para resolución manual………………………………….37Código en Matlab….………………………………………...……...38Diagrama de flujo……………………………………………………39Código en c…………………………………………………………..40

Conclusión…………………………………………………………………....42Factorización LU

Objetivo…………………………………………………………………….….41Introducción……………………………………………………………..…....42Desarrollo

Factorización LU con pivote……………………………………….43Ejemplo para resolución manual.…………………………………44Código en Matlab……………………………….…………………..46Diagrama de flujo……………………………………….…………..46

Página 1

Conclusión……………………………………………………………….…..48

Eliminación Gauss-SeidelObjetivo……………………………………………………………………….53Introducción…………………………………………………………………..54Desarrollo

Ejemplo para resolución manual…………………………………..56Código en Matlab…………………………………………………....57

Conclusión……………………………………………………………….……59Eliminación por medio de bisección

Objetivo…………………………………………..….………………………..60Introducción……………….………………………………………………….61Desarrollo

Ejemplo para resolución manual…………..…………………........63Código en Matlab…………………………………..………………..64Diagrama de flujo…………………………….………………………65Código en C…………………………………………………………..66

Conclusión…………………………………………………….......................68

Eliminación por regla falsaObjetivo…………………………………………..….………………………..69Introducción……………….………………………………………………….70Desarrollo

Ejemplo para resolución manual…………..…………………........72Código en Matlab…………………………………..………………..73Diagrama de flujo…………………………….………………………74

Conclusión…………………………………………………….......................75

Eliminación por Newton-RaphsonObjetivo…………………………………………..….………………………..76Introducción……………….………………………………………………….77Desarrollo

Ejemplo para resolución manual…………..………………….......78Código en Matlab…………………………………..………………..79Diagrama de flujo…………………………….………………………80

Conclusión…………………………………………………….......................81Eliminación por secante

Objetivo…………………………………………..….………………………..82Introducción……………….………………………………………………….83Desarrollo

Ejemplo para resolución manual…………..………………….......84Código en Matlab…………………………………..……………….85Diagrama de flujo…………………………….……………………..86Código en C………………………………………………………….87

Conclusión……………………………………………………......................88Eliminación por interpolación de Newton

Objetivo…………………………………………..….………………………..89Introducción……………….………………………………………………….90

Página 2

Desarrollo Ejemplo para resolución manual…………..…………………........92Código en Matlab…………………………………..………………..93Diagrama de flujo…………………………….………………………94Código en c…………………………………………………………...95

Conclusión…………………………………………………….......................96Eliminación por diferencias divididas de Newton

Objetivo…………………………………………..….………………………..97Introducción……………….………………………………………………….98Desarrollo

Ejemplo para resolución manual…………..………………….......100Código en Matlab…………………………………..………………..101Diagrama de flujo…………………………….………………………102Código en C…………………………………………………………..103

Conclusión…………………………………………………….......................104Eliminación por el método de LaGrange

Objetivo…………………………………………..….………………………...105Introducción……………….…………………………………………………..106Desarrollo

Ejemplo para resolución manual…………..…………………........107Código en Matlab…………………………………..………………...108Diagrama de flujo…………………………….………………………109Código en C…………………………………………………………..110

Conclusión…………………………………………………….......................111Eliminación por método de mínimos cuadrados

Objetivo…………………………………………..….………………………..112Introducción……………….………………………………………………….113Desarrollo

Ejemplo para resolución manual…………..………………….......114Código en Matlab…………………………………..………………..115Diagrama de flujo…………………………….……………………...116Código en C………………………………………………………….117

Conclusión…………………………………………………….......................118Eliminación por regla del trapecio

Objetivo…………………………………………..….………………………..119Introducción……………….………………………………………………….120Desarrollo

Ejemplo para resolución manual…………..………………….......122Código en Matlab…………………………………..………………..123Diagrama de flujo…………………………….……………………...124Código en C………………………………………………………….125

Conclusión……………………………………………………......................126Eliminación por método de Simpson 1/3

Objetivo…………………………………………..….………………………..127Introducción……………….………………………………………………….128Desarrollo

Ejemplo para resolución manual…………..………………….......129Código en Matlab…………………………………..………………..130Diagrama de flujo…………………………….…………………...…131Código en C………………………………………………………….132

Conclusión……………………………………………………......................133

Página 3

Eliminación por método de Simpson 3/8Objetivo…………………………………………..….………………………..134Introducción……………….………………………………………………….135Desarrollo

Ejemplo para resolución manual…………..………………….......137Código en Matlab…………………………………..……………….138Diagrama de flujo…………………………….……………………..139Código en C………………………………………………………….140

Conclusión……………………………………………………......................141

Eliminación por método de EulerObjetivo…………………………………………..….………………………..142Introducción……………….………………………………………………….143Desarrollo

Ejemplo para resolución manual…………..………………….......145Código en Matlab…………………………………..……………….146Diagrama de flujo…………………………….……………………..147Código en C………………………………………………………....148

Conclusión……………………………………………………......................148Eliminación por método de Euler mejorado

Objetivo…………………………………………..….………………………..149Introducción……………….………………………………………………….150Desarrollo

Ejemplo para resolución manual…………..………………….......151Código en Matlab…………………………………..………………..152Diagrama de flujo…………………………….…………………...…154Código en C………………………………………………………….155

Conclusión……………………………………………………......................156

Eliminación por método de Runge-KuttaObjetivo…………………………………………..….………………………..157Introducción……………….………………………………………………….158Desarrollo

Ejemplo para resolución manual…………..………………….......159Código en Matlab…………………………………..……………….160Diagrama de flujo…………………………….……………………..161Código en C…………………………………………………………162

Conclusión…………………………………………………….....................163

Bibliografía……………………………………………………………………164

Página 4

Introducción

A lo largo del tiempo, los métodos numéricos han sido desarrollados con el objeto de resolver problemas matemáticos cuya solución es difícil o imposible de obtener por medio de los procedimientos tradicionales.Los métodos numéricos son técnicas mediante las cuales es posible formular problemas de tal forma que sean resueltas con operaciones aritméticas, Estos nos vuelven aptos para entender esquemas numéricos a fin de resolver problemas matemáticos, de ingeniería, científicos y administración, reducir esquemas numéricos básicos, escribir programas y resolverlos en una computadora y usar correctamente el software existente para dichos métodos y no solo aumenta nuestra habilidad para el uso de computadoras sino que también amplia la pericia matemática y la comprensi6n de los principios científicos básicos.Son adecuados para la solución de problemas comunes de ingeniería, ciencias y administración, utilizando computadoras electrónicas.Pueden manejar sistemas de ecuaciones grandes, no linealidades y geometrías complicadas, comunes en la ingeniería. También es posible que se utilice software disponible comercialmente que contenga métodos numéricos. El uso inteligente de estos programas depende del conocimiento de la teoría básica de estos métodos; además hay muchos problemas que no pueden plantearse al emplear programas hechos, conociendo bien los métodos numéricos se puede diseñar programas propios y así no comprar software costoso. Al mismo tiempo se aprende a conocer y controlar los errores de aproximación que son inseparables de los cálculos numéricos a gran escala.

Pasos a seguir para resolución de problemas

En el proceso de solución de problemas por medio de computadoras se requieren los pasos siguientes.

Especificación del problema.  Con esto se indica que se debe identificar perfectamente el problema y sus limitaciones, las variables que intervienen y los resultados deseados.

Análisis. es la formulación de la solución del problema denominada también algoritmo, de manera que se tenga una serie de pasos que resuelvan el problema y que sean susceptibles de ejecutarse en la computadora.

Programación.  Este paso consiste en traducir el método de análisis o algoritmo de solución expresándole como una serie detallada de operaciones.

Verificación.  Es la prueba exhaustiva del programa para eliminar todos los errores que tenga de manera que efectúe lo que desea los resultados de prueba se comparan con soluciones conocidas de problemas ya resueltos.

Documentación.  Consiste en preparar un instructivo del programa de manera que cualquier persona pueda conocer y utilizar el programa.

Producción.  Es la última etapa en la que solo se proporcionan datos de entrada del programa obteniéndose las soluciones correspondientes.

De lo antes expuesto se puede concluir que es necesario un conocimiento completo del problema, y de los campos de las matemáticas relacionados con el que es precisamente el objeto de los métodos numéricos para computadora.

Página 5

Para resolver el problema con una computadora significa mucho más que el trabajo que ejecuta la maquina.  

Identificación y definición de objetos. descripción matemática. Análisis numérico. Programación de la computadora. Verificación del programa. Producción. Interpretación.

La maquina sigue una serie de pasos o también denominado método numérico la respuesta final para el usuario debe interpretar los resultados para ver lo que significan en función de las combinaciones del objetivo que el sistema propuesto debe satisfacer.

Las soluciones que ofrecen los métodos numéricos son aproximaciones de los valores reales y, por tanto se tendrá un cierto grado de error que será conveniente determinar.El concepto de cifras o dígitos significativos se ha desarrollado para designar formalmente la contabilidad de un valor numérico. El numero de cifras significativas es el numero de dígitos, más un digito estimado que se pueda usar con confianza; los ceros no siempre son cifras significativas ya que pueden usarse solo para ubicar el punto decimal.

1.-Los métodos numéricos obtienen resultados aproximados. Por lo tanto se debe desarrollar criterios para especificar que tan precisos son los resultados obtenidos.

2.-Aunque ciertas cantidades tales como , e o 7 representan números específicos, no se puede expresar exactamente con un numero finitos de dígitos.

Definición de un error

Los errores numéricos se generan con el uso de aproximaciones para representar las operaciones y cantidades matemáticas. Solo en raras ocasiones los datos proporcionados de un problema serán exactos, puesto que suelen originarse en procesos de medida, de modo que hay un error probable en la información de entrada. Además el propio algoritmo genera un error, quizá redondeos inevitables. La información de salida contendrá entonces error generados por las dos fuentes.Algunos términos importantes en el análisis de un error:Exactitud: se refiere a la cercanía de un número o de una medida del valor verdadero que representa.Precisión: se refiere al número de cifras significativas que representan una cantidad.

Esto incluye errores de truncamiento que resultan de representar aproximadamente un procedimiento matemático exacto, y los errores de redondeo, que resultan de presentar aproximadamente números exactos. Para los tipos de errores, la relación entre el resultado exacto o verdadero y el aproximado esta dado por:

Valor verdadero = valor aproximado + error Se encuentra que el error numérico es igual a la diferencia entre el valor verdadero y el valor aproximado esto es:

E = valor verdadero – valor aproximado

Página 6

Donde E se usa para redondear el valor exacto del error. Se incluye el subíndice v par dar a entender que se trata del “verdadero” error.

E = (error aproximado/ valor aproximado) 100

Donde el subíndice a significa que el error está normalizado a un valor aproximado.Uno de los retos a que se enfrentas los métodos numéricos es el de determinar estimaciones del error en ausencia de conocimiento de los valores verdaderos.El error se calcula como la diferencia entre la aproximación previa y la actual. Por lo tanto, el error relativo porcentual está dado por:

E =ABS (((aproximación actual- aproximación previa)/ aproximación actual) 100)

Errores de redondeo

Los errores de redondeo se deben a que las computadoras solo guardan un número finito de cifras significativas durante un cálculo. Las computadoras realizan esta función de maneras diferentes; esta técnica de retener solo los primeros siete términos se llamó “truncamiento” en el ambiente de computación.

Errores de truncamiento

Los errores de truncamiento son aquellos que resultan al usar una aproximación en lugar de un procedimiento matemático exacto.Estos tipos de errores son evaluados con una formulación matemática: la serie de Taylor.

Rn= ((ƒ(n+1) (x))/(n+1)!)hn+1

Error numérico total

El error numérico total es la suma de los errores de redondeo y de truncamiento. La única forma de minimizar los errores de redondeo es la de incrementar el número de cifras significativas de la computadora.

Errores por equivocación

En los primeros años de la computación los resultados numéricos erróneos fueron atribuidos algunas veces al mal funcionamiento de la computadora misma. Hoy en día esta fuente de error es muy improbable y la mayor parte de las equivocaciones se atribuye a errores humanos.Las equivocaciones ocurren a cualquier nivel del proceso de modelación matemática y pueden contribuir con todas las otras componentes del error.

Errores de formulación

Los errores de formulación o de modelamiento degeneran en lo que se podría considerar como un modelo matemático incompleto, ya que si se está usando un modelo deficiente, ningún método numérico generara los resultados adecuados.

Aplicación de los métodos numéricos en la ingeniería

Página 7

Las aplicaciones de los métodos numéricos son prácticamente ilimitadas, y se requieren conocimientos de la materia en disciplinas tan variadas como: economía, contabilidad, mercadotecnia, química, ingeniería en computación, etc.…

Encontramos así aplicaciones de los métodos numéricos en los ámbitos más diversos desde sectores tecnológicos tan clásicos como la ingeniería estructural o la aerodinámica de aviones, hasta aplicaciones más sofisticadas como ingeniería de alimentos, ingeniería medica, diseño de fármacos, biología, etc...

En la actualidad, gracias a la gran evolución que han tenido los métodos numéricos y su implementación en potentes computadoras, es posible, por ejemplo, modelar el choque de un vehículo o hacer el análisis aerodinámico estructural de un avión, resolviendo en cada caso sistemas algebraicos de ecuaciones con varios cientos de miles (a veces de millones) de incógnitas. Se presentan a continuación algunas aplicaciones de los métodos numéricos a diversos problemas de ingeniería.

Mecánica de SólidosExisten hoy en día, un gran número de estructuras en ingeniería civil, que son modelados desde su concepción utilizando técnicas de elementos finitos.

Mecánica de FluidosUna rama muy importante de la ingeniería, es el estudio de la mecánica de fluidos, en donde las ecuaciones que gobiernan el fenómeno físico tienen ciertas peculiaridades que las hacen difíciles de abordar desde el punto de vista numérico. Aquí se presentan problemas de bloqueo numérico de la solución y deben seguirse ciertas alternativas para hacer abordable el problema. Un tipo de problemas que es interesantes resolver es por ejemplo determinar las presiones que provoca el viento sobre una estructura determinada.

Un ejemplo muy representativo podría ser el siguiente:

Simulación de aerodinámica de vehículos.Otro aspecto muy importante en una aplicación de la Mecánica de Fluidos es el de generar laboratorios virtuales para modelar fenómenos físicos. Por ejemplo el túnel de viento para modelar el paso de un vehículo a una cierta velocidad y determinar el coeficiente de penetración en el aire, el cual puede incidir en el gasto energético del vehículo para poder mantener una velocidad constante.

Página 8

Medios de Transporte

En general, para la concepción y producción de un vehículo (ya sea un automóvil, un avión o un barco) es muy común utilizar modelos numéricos de dinámica de fluidos para simular el comportamiento del vehículo en movimiento (ya sea en tierra, en aire o en ambos). Esto permite optimizar la forma geométrica exterior del mismo de manera que su resistencia al avance sea la mínima posible, lo que permitirá tener una vida útil más larga, menor consumo de combustible, que sea menos contaminante, que sea más ligero (más barato de producir).

Procesamiento de Imágenes Médicas.

El problema de registro en imágenes, un problema relevante de procesamiento de imágenes medicas, consiste en encontrar la transformación geométrica que ponga dos imágenes dadas en la mejor correspondencia posible. Una de sus aplicaciones más inmediatas es realizar el registro de un cerebro espécimen con el de un atlas anatómico en el que se conoce perfectamente a qué corresponde cada uno de los boxéeles que forman la imagen. El aplicar una buena técnica de registro de imágenes entre el atlas y el espécimen, nos permitiría segmentar muy fácilmente cada una de las partes que integran la cabeza del espécimen.

Página 9

Eliminación gaussiana sin normalizar

Objetivo

La eliminación gaussiana es un método para eliminar renglones o columnas de una matriz, esto ayuda a tener una matriz equivalente pero más fácil de utilizar, la eliminación gaussiana se utiliza para resolver sistemas de ecuaciones o encontrar la inversa de una matriz, el objetivo de la eliminación gaussiana es tener una matriz escalonada realizando diferentes operaciones entre renglones o columnas de una matriz.

En esta práctica veremos procedimientos sistemáticos para resolver un sistema de ecuaciones lineales. Estos algoritmos trabajan directamente sobre la matriz aumentada del sistema llevándola a la matriz de un sistema triangular que es equivalente al sistema inicial. La equivalencia del sistema triangular final con el inicial se argumenta debido a que el algoritmo solo utiliza los tres tipos de operaciones.

Página 10

Introducción

El primer método que se presenta usualmente en álgebra, para la solución de ecuaciones algebraicas lineales simultáneas, es aquel en el que se eliminan las incógnitas mediante la combinación de las ecuaciones. Este método se conoce como Método de eliminación. Se denomina eliminación gaussiana si en el proceso de eliminación se utiliza el esquema particular atribuido a Gauss.Utilizando el método de Gauss, un conjunto de n ecuaciones con n incógnitas se reduce a un sistema triangular equivalente (un sistema equivalente es un sistema que tiene iguales valores de la solución), que a su vez se resuelve fácilmente por “sustitución inversa”; un procedimiento simple que se ilustrará con la presentación siguiente:

a11 x1 + a12 x2 + a13 x3 + … + a1n xn = c1

a21 x1 + a22 x2 + a23 x3 + … + a2n xn = c2

. . . . .. . . . .. . . . .an1 x1 + an2 x2 + an3x3 + … + ann. xn = cn

En donde: Aij: Se denomina términos.Xi: Se denomina variables.Ci: Se denomina constantes.Aplicando la definición de producto entre matrices, este sistema de n ecuaciones algebraicas lineales con n incógnitas puede escribirse en forma matricial, de la forma A X = B.

Para realizar una correcta introducción al tema que a continuación se dará es necesario retomar algunos conceptos clave los cuales nos ayudaran a comprender mejor cada tema como es el caso de un sistema de ecuaciones lineales, también conocido como sistema lineal de ecuaciones o simplemente sistema lineal, que es un conjunto de ecuaciones lineales sobre un cuerpo o un anillo conmutativo.

El método de eliminación Gaussiana para la solución de sistemas de ecuaciones lineales consiste en convertir a través de operaciones básicas llamadas operaciones de renglón un sistema en otro equivalente más sencillo cuya respuesta pueda leerse de manera directa. El método de eliminación Gaussiana es el mismo para sistemas de ecuaciones 2×2, 3×3, 4×4 y así sucesivamente siempre y cuando se respete la relación de al menos una ecuación por cada variable. Antes de ilustrar el método con un ejemplo, es necesario primeramente conocer las operaciones básicas de renglón las cuales son presentas a continuación: 1. Ambos miembros de una ecuación pueden multiplicarse por una constante diferente de cero. 2. Los múltiplos diferentes de cero de una ecuación pueden sumarse a otra ecuación

3. El orden de las ecuaciones es intercambiable. Una vez conocidas las operaciones que en mi afán por resolver un sistema de ecuaciones puedo realizar procedo a ilustrar el método con un ejemplo:

Página 11

Ejemplo para resolución manual

1. Resolver el siguiente sistema de ecuaciones: x + 2y + 3z = 1 4x + 5y + 6z= −2 7x + 8y + 10z = 5 Donde cada ecuación representa un renglón y las variables iguales de las 3 ecuaciones representan las columnas 1, 2 y 3 respectivamente. Usando el método de eliminación Gaussiana.

Solución: Para simplificar las operaciones se retiran las variables y se mantienen exclusivamente los coeficientes de cada una, el signo de igual también es eliminado pero se mantienen los datos del lado derecho de la ecuación. Quedando como sigue: Diagonal principal La diagonal principal de la matriz busca quede conformada por solo unidades (1) la parte inferior a la diagonal debe quedar en ceros. Esto se hace utilizando las operaciones básicas de renglón para las ecuaciones, de arriba hacia abajo y de izquierda a derecha. Multiplico la ecuación 1 por −4 y el resto de la ecuación 2, de igual forma la multiplico por −7 y la resto de la 3 obteniendo. Después divido la ecuación 2 (renglón 2) entre −3 para hacer el componente de la diagonal principal 1 quedando como sigue: Multiplico la ecuación 2 (renglón 2) por 6 y lo sumo a la ecuación 3 (renglón 3). Una vez lograda la diagonal principal formada por unidades y los datos por debajo de la diagonal principal ceros reintegro las variables en cada ecuación y también el signo igual de las ecuaciones obteniendo: Donde el valor de z= 10 y al sustituir este valor en la ecuación resultante 2, tendríamos y + 2z = 2 al sustituir el valor de z obtenemos que: y + 2(10) = 2 y + 20 = 2 y = 2- 20 y = −18 Al sustituir estos valores en la ecuación resultante 1 se tiene: 1x + 2y + 3z = 1 Si z= 10 y y=−18, entonces el valor de x será: 1x + 2y + 3z = 1 x + 2(−18) + 3(10)= 1 x – 36 + 30 = 1 x – 6 = 1 x = 1 + 6 x = 7 La solución del sistema de ecuaciones sería x= 7, y= −18, y z= 10.El sistema de eliminación gaussiana es el mismo no importando si es un sistema de ecuaciones lineales del tipo 2×2, 3×3, 4×4 etc. siempre y cuando se respete la relación de al menos tener el mismo número de ecuaciones que de variables.

Página 12

Código en Matlab

%***********************************************************>> clear all>> A=[2 -0.9 3 -3.61;-0.5 0.1 -1 2.035;1 -6.35 -0.45 15.401];>> [r,c]=size(A)r = 3c = 4>> %ELIMINACION HACIA ADELANTE>> for k=1:r-1for i=k+1:rfor j=c:-1:kA(i,j)=A(i,j)-(A(i,k)/A(k,k))*A(k,j);end end end>> AA = 2.0000 -0.9000 3.0000 -3.6100 0 -0.1250 -0.2500 1.1325 0 0 9.8500 -36.2480>> %ELIMINACION HACIA ATRAS>> for k=r:-1:2for i=k-1:-1:1for j=c:-1:kA(i,j)=A(i,j)-A(i,k)*A(k,j);end end end

%**********************************************************

Página 13

Diagrama de flujo

A continuación se muestra el código para realizar la eliminación gaussiana en el software de programación C++

Página 14

Código en C

#include <stdio.h>#include <stdlib.h>int main(){//declarando variables para contadoresint k,i,j,m,n;//inicializando dimensionesn=3;m=4;//inicializando matrizfloat A[3][4]={{40,-10,-30,10},{-10,30,-5,0},{-30,-5,65,0}};//mover el pivotefor(k=0;k<=n-1;k++){//moverse en el renglónfor(i=k+1;i<=n-1;i++){//moverse en la columnafor(j=m-1;j>=0;j--){//haciendo las modificaciones para gauss sin normalizarA[i][j]=A[i][j]-((A[i][k]/A[k][k])*A[k][j]);}}}//para imprimir la matriz resultanteprintf("Método: Gauss sin normalizar\n\n");for(i=0;i<n;i++){for(j=0;j<m;j++){printf("%f\t",A[i][j]);}printf("\n");}return 0;}

Página 15

Conclusión

A partir de este tema que es eliminación gaussiana es como se toma base para las demás formas de resolución de ecuaciones lineales y de esta manera se agiliza el trabajo, pues es un método muy sencillo que simplemente para lograr poder comprenderlo a la perfección se necesita realizar de muchos ejercicios, como el ejemplo que se propuso y así mismo existen una infinidad.

Con respecto al método, al principio parece un tanto difícil pero a mi parecer es laborioso pero muy práctico al fin y al cabo, y pues simplemente se utilizan de operaciones aritméticas lo cual nos dice que es un método muy práctico y además muy eficiente.

Página 16

Eliminación gaussiana normalizado

Objetivo

El objetivo principal de la siguiente practica es aprender y saber cómo se realiza el método de gauss normalizado el cual consiste en convertir un sistema de ecuaciones en uno escalonado , dejando sus incógnitas con valor de 1.En la 1ª ecuación tendrá 3 incógnitas , en la 2ª tendrá 2 incógnitas y en la tercera 1 incógnita . De esta forma será fácil a partir de la última ecuación y subiendo hacia arriba, calcular el valor de las 3 incógnitas.

Página 17

Introducción

El método de Gauss Normalizado  es una generalización del método de reducción, que utilizamos para eliminar una incógnita en los sistemas de ecuaciones. Consiste en la aplicación sucesiva del método de reducción, utilizando los criterios de equivalencia de sistemas, para transformar la matriz ampliada con los términos independientes en una matriz triangular, de modo que cada fila (ecuación) tenga una incógnita menos que la inmediatamente anterior. Se obtiene así un sistema, que llamaremos escalonado, tal que la última ecuación tiene una única incógnita, la penúltima dos incógnitas, la antepenúltima tres incógnitas y la primera tendrá todas las incógnitas.

A diferencia del Gauss sin normalizar este sistema normaliza cada incógnita para que su valor sea igual a 1 y así la sustitución hacia atrás será más directa.

El método de gauss normalizado básicamente es parecido al proceso de eliminación escalonada que el método de gauss, pero con la única diferencia que este sistema ocupa la normalización de las incógnitas, esto facilita la sustitución hacia atrás dado que el resultado de cada una será directo sin despejes

Ejemplo para resolución manual

Para poder realizar el gauss normalizado y comprender bien la diferencia entre el método de gauss sin normalizar es necesario realizar un ejemploEjemplo 1:Solucionar el siguiente sistema de ecuaciones por el método de gauss normalizado

2 x 4 y 6 z=¿ 4 x 5 y 6 z=¿3 x 1 y ¿El sistema se expresa con una matriz aumentada

2 4 64 5 63 1 2

18244

Primer paso normalizar el primer renglón dividiendo por el elemento a11 en este caso entre 2, el resultado queda:2/2=12/2=26/2=3

18/2=91 2 34 5 63 1 2

9244

Después de normalizar procedemos a colocar el primer 0 en el segundo renglón, para esto tomamos el numero a modificar y se lo restamos al producto cruzado entre el pivote Ejemplo: 5-(2x4)/1 =-3

Página 18

6-(3x4)/1=-6 24-(9x4)/1=-14

1 2 34 5 63 1 2

9244

=1 2 30 −3 −63 1 2

9−12

4

Hecho el cero en el segundo renglón se hace cero en el tercer renglón con el mismo procedimiento Ejemplo:1-(2x3)/1=-52-(3x3)/1=-74-(9x3)/1=-23

1 2 30 −3 −63 1 2

9−12

4=

1 2 30 −3 −60 −5 −7

9−12−23

Hecho los ceros debajo del pivote de la primera columna, procedemos a normalizar el segundo renglón dividiendo todo el renglón entre -3 -3/-3=1-6/-3=-12/-3=

1 2 30 −3 −60 −5 −7

9−12−23

=1 2 30 1 20 −5 −7

94

−23

Después de normalizar el segundo renglón hacemos cero en el tercer renglón Ejemplo:-7-(2x-5)=3-23-(4x-5)=-3

1 2 30 1 20 −5 −7

94

−23=

1 2 30 1 20 0 3

94

−3

Ahora normalizamos el tercer renglón Ejemplo 3/3=1 -3/3=-1

1 2 30 1 20 0 3

94

−3=

1 2 30 1 20 0 1

94

−1

Sustitución hacia atrás

X3=-1X2=4-2(-1)=6X1= 9-3(-1)-2(6)=0

Página 19

Código Matlab

%***********************************************************

clcclear all

a=[2 4 6 18;    4 5 6 24; %Eta es nuestra matriz     3 1 2 4 ;] [r,c]= size (a)%Eliminación hacia adelantefor k=1:r    for j=c:-1:1 %Aquí empieza la eliminación hacia adelante        a(k,j)=a(k,j)/a(k,k)    end    for i=k+1:r        for j=c:-1:k            a(i,j)= a(i,j)-a(i,k)*a(k,j)        end    endenda%sustitución hacia atrásx(r)=a(r,c) %Aquí empieza la sustitución hacia atrásfor i=r-1:-1:1    sum=0    for j=i+1:r        sum=sum+a(i,j)*x(i)    end     x(i)=(a(i,c)-sum)/a(i,j);endx

%***********************************************************

Página 20

Diagrama de Flujo

Input: Matriz a

for k=1:r-1

for j=c:-1:k

for j=c:-1:1

a(k,j)=a(k,j)/a(k,k)

I

Inicio

    for i=k+1:r

a(i,j)= a(i,j)-a(i,k)*a(k,j)

Página 21

Código en C

for j=i+1:r

x(r)=a(r,c)

for i=r-1:-1:1

sum=0

I

sum=sum+a(i,j)*x(j)

x(i)=(a(i,j)-sum)/a(i,j)

X

Fin

Página 22

#include <stdio.h>#include <stdlib.h>int main(){int k,i,j,m,n;n=3;m=4;float A[3][4]={{40,-10,-30,10},{-10,30,-5,0},{-30,-5,65,0}};for(k=0;k<=n-1;k++){for(i=k+1;i<=n-1;i++){for(j=m-1;j>=0;j--){//solo que aquí se hace la normalizaciónA[k][j]=A[k][j]/A[k][k];A[i][j]=A[i][j]-(A[i][k]*A[k][j]);}}} k=m-1;while(k>=n-1){//terminando normalizaciónA[n-1][k]=A[n-1][k]/A[n-1][n-1];k--;}for(i=0;i<n;i++){for(j=0;j<m;j++){printf("%f\t",A[i][j]);}printf("\n");}//declarando variables para sustituciónfloat sum;float x[n];for(i=n-2;i>0;i--){sum=0;for(j=i+1;j<n;j++){sum=sum+A[i][j]*x[j];}x[i]=(A[i][m-1]-sum)/A[i][i];}//mostrando matriz de resultadosfor(i=0;i<=n-1;i++){printf("%f\t",x[i]);} return 0; }

Conclusión

Página 23

El método de gauss normalizado nos ayuda para resolver sistemas de ecuaciones de cualquier tamaño, a diferencia del gauss sin normalizar este método gracias a la normalización no tiene necesidad de despejar la incógnita y esto hace que la sustitución hacia atrás sea con mayor facilidad, claro, es necesario realizar un poco mas de operaciones pero al final solo será igualar los valores de cada incógnita, para conocer su valor.

Al llevar a cabo la resolución de algún problema mediante este método, es donde se percibe que es muy fácil, y que conforme mas ejercicios se realizan, este proceso se agiliza cada vez más.

Eliminación Gauss-Jordan

Página 24

Objetivo

El objetivo fundamental del presente trabajo es desarrollar un programa de computadora que resuelva sistemas de ecuaciones simultáneas basándose en el método de eliminación de Gauss o método de Gauss-Jordan, en un principio se expondrá la base teórica matemática que sustenta este método y posteriormente se presenta un diagrama de flujo representativo de dicho método, de donde más tarde se presenta una solución ejemplar de un sistema ejecutando este programa.

Lograr una correcta introducción al programa Matlab, así como a los conocimientos acerca de los métodos de eliminación existentes para de esta manera hacer un correcto uso de software mencionado y lograr el objetico del curso, poder programar de manera fácil y correcta, para posteriormente poder utilizar este programa como una herramienta de gran apoyo durante el transcurso de nuestra carrera y a lo largo de nuestra vida.

Página 25

Introducción

La distribución normal fue presentada por primera vez por Abraham de Moivre en un artículo del año 1733,[] que fue reimpreso en la segunda edición de su The Doctrine of Chances, de 1738, en el contexto de cierta aproximación de la distribución binomial para grandes valores de n. Su resultado fue ampliado por Laplace en su libro Teoría analítica de las probabilidades (1812), y en la actualidad se llama Teorema de De Moivre-Laplace.Laplace usó la distribución normal en el análisis de errores de experimentos. El importante método de mínimos cuadrados fue introducido por Legendre en 1805. Gauss, que afirmaba haber usado el método desde 1794, lo justificó rigurosamente en 1809 asumiendo una distribución normal de los errores. El nombre de Gauss se ha asociado a esta distribución porque la usó con profusión cuando analizaba datos astronómicos[] y algunos autores le atribuyen un descubrimiento independiente del de De Moivre.[] Esta atribución del nombre de la distribución a una persona distinta de su primer descubridor es un claro ejemplo de la Ley de Stigler.

Utilizando el método de Gauss, un conjunto de n ecuaciones con n incógnitas se reduce a un sistema triangular equivalente (un sistema equivalente es un sistema que tiene iguales valores de la solución), que a su vez se resuelve fácilmente por “sustitución inversa”; un procedimiento simple que se ilustrará con la presentación siguiente:

a11 x1 + a12 x2 + a13 x3 + … + a1n xn = c1

a21 x1 + a22 x2 + a23 x3 + … + a2n xn = c2

. . . . .. . . . .. . . . .an1 x1 + an2 x2 + an3x3 + … + ann. xn = cn

En donde: aij: Se denomina términos.xi: Se denomina variables.Ci: Se denomina constantes.Aplicando la definición de producto entre matrices, este sistema de n ecuaciones algebraicas lineales con n incógnitas puede escribirse en forma matricial, de la forma A X = C.

El problema de los sistemas lineales de ecuaciones es uno de los más antiguos de la matemática y tiene una infinidad de aplicaciones, como en procesamiento digital de señales, análisis estructural, estimación, predicción y más generalmente en programación lineal así como en la aproximación de problemas no lineales de análisis numérico.

El Método de Gauss – Jordán o también llamado eliminación de Gauss – Jordan, es un método por el cual pueden resolverse sistemas de ecuaciones lineales con n números de variables, encontrar matrices y matrices inversas.

La eliminación de Gauss-Jordan, más conocida como método de Gauss, es un método aplicable únicamente a los sistemas lineales de ecuaciones, y consistente en triangular la matriz aumentada del sistema mediante transformaciones elementales, hasta obtener ecuaciones de una sola incógnita, cuyo valor será igual al coeficiente situado en la misma fila de la matriz.

Página 26

El Método de Gauss consiste en convertir un sistema normal de 3 ecuaciones con 3 incógnitas en uno escalonado, en la que la primera ecuación tiene 3 incógnitas, la segunda ecuación tiene 2 incógnitas, y la tercera ecuación tiene 1 incógnita. De esta forma será fácil a partir de la última ecuación y subiendo, calcular el valor de las tres incógnitas.Para resolver sistemas de ecuaciones lineales aplicando este método, se debe en primer lugar anotar los coeficientes de las variables del sistema de ecuaciones lineales en su notación matricial:

Entonces, anotando como matriz (también llamada matriz aumentada):

Una vez hecho esto, a continuación se procede a convertir dicha matriz en una matriz identidad, es decir una matriz equivalente a la original, la cual es de la forma:

Esto se logra aplicando a las distintas filas y columnas de las matrices simples operaciones de suma, resta, multiplicación y división; teniendo en cuenta que una operación se aplicara a todos los elementos de la fila o de la columna, sea el caso.Obsérvese que en dicha matriz identidad no aparecen los términos independientes, esto se debe a que cuando nuestra matriz original alcance la forma de la matriz identidad, dichos términos resultaran ser la solución del sistema y verificaran la igualdad para cada una de las variables, correspondiéndose de la siguiente forma:d1 = xd2 = yd3 = z

Página 27

Ejemplo para resolución manual

Resolver el siguiente sistema de ecuaciones.

Solución.

a) La matriz aumentada del sistema es:

El primer elemento del primer renglón queremos que sea uno, una manera de obtenerlo es dividiendo entre 3, sin embargo, no es el único camino (ni el mejor) para obtenerlo, en este caso obtendremos −1, primero y después haremos cero los demás elementos de la primer columna, posteriormente obtendremos 1.

b) Desarrollo.

c) Resultado. La solución del sistema es

Página 28

Código de Matlab

%***********************************************************>> clear all>> A=[2 -0.9 3 -3.6;

-0.5 0.1 -1 2.035;

1 -6.35 -0.45 15.401];

>> [r,c]=size(A)

r =

3

c =

4

>> %eliminación hacia adelante

>> for k=1:r

for j=c:-1:1

A(k,j)=A(k,j)/A(k,k);

end

for i=k+1:r

for j=c:-1:k

A(i,j)=A(i,j)-A(i,j)*A(k,j);

end

end

end

>> A

A =

<

1.0e+003 *

0.0010 -0.0004 0.0015 -0.0018

0 0.0010 0.0034 0.0393

Página 29

0 0 0.0010 2.9979

>> %eliminación hacia atrás

>> for k=r:-1:2

for i=k-1:-1:1

for j=c:-1:k

A(i,j)=A(i,j)-A(i,k)*A(k,j);

end

end

end

>> A

A =

1.0e+004 *

0.0001 0 0 -0.9133

0 0.0001 0 -1.0298

0 0 0.0001 0.299

Página 30

Diagrama de flujo

Página 31

Código en C

#include <stdio.h>#include <stdlib.h>int main(){//declarando contadoresint k,i,j,m,n;//inicializando dimensionesn=3;m=4;<<<<<<<<<<<<<<//inicializando matrizfloat A[3][4]={{40,-10,-30,10},{-10,30,-5,0},{-30,-5,65,0}};for(k=0;k<=n-1;k++){for(i=k+1;i<=n-1;i++){for(j=m-1;j>=0;j--){//normalizandoA[k][j]=A[k][j]/A[k][k];//modificando matriz y haciendo cerosA[i][j]=A[i][j]-(A[i][k]*A[k][j]);}}}//acabando de normalizark=m-1;while(k>=n-1){A[n-1][k]=A[n-1][k]/A[n-1][n-1];k--; }//imprimiendo la parte de Gaussprintf("Haciendo Gauss\n\n");for(i=0;i<n;i++){for(j=0;j<m;j++){printf("%f\t",A[i][j]); }printf("\n"); }for(k=0;k<m;k++){for(i=k+1;i<n;i++){for(j=m-1;j>=k;j--){//haciendo ceros del otro lado de la matrizA[k][j]=A[k][j]-(A[k][i]*A[i][j]);}}}printf("\n");//mostrando la matriz Gauss-Jordanprintf("Haciendo Jordan\n\n");for(i=0;i<n;i++){for(j=0;j<m;j++){printf("%f\t",A[i][j]); }printf("\n"); }return 0; }

Página 32

Conclusión

Es un sistema de eliminación muy práctico pues es parecido al que ocupaba en otras clases de matemáticas, pues nos hace realizar una eliminación de variables en cada una de las ecuaciones para al final solamente tener que realizar una pequeña sustitución de valores y poder calcular cada el valor de cada una de las incógnitas.

A mi parecer este método fue uno de los más fáciles pues como ya había mencionado se parece a los métodos que nos enseñaban desde la secundaria y por lo cual tenía más noción de cuales serian los pasos a seguir en la elaboración de un problema como ejemplo.

Página 33

Matriz inversa

Objetivo

El cálculo de la matriz inversa no es un proceso sencillo. Primeramente se aborda desde el punto de vista del método de Gauss y, después por determinantes y adjuntos; posteriormente, se hace uso del software Matlab para su cálculo o de manera manual y, por último, se muestran diversas aplicaciones de ésta.

Del mismo modo, las aplicaciones que se presentan son ejemplos dentro de un campo muy amplio.

Incluso los ejemplos mostrados no finalizan en lo escrito en este bloque, sino que es una introducción al mismo, con el objeto de ilustrar el uso de matrices en problemas no matemáticos, por una parte y hacer accesible los modelos y sus diversas derivaciones, por otra.

Página 34

Introducción

Sean A y B matrices de n x n, y suponiendo que la multiplicación AB = BA = Identidad.

De la definición anterior se deduce que , si A tiene inversa. Nosotros podemos conocer fácilmente si una matriz tiene inversa; basta con encontrar su determinante, y si resulta cero, no tiene inversa; cualquier otro número nos indica que tiene inversa.

Una matriz inversa cuadrada A-1 es la inversa de una matriz cuadrada A, si A A-1 = I.Cualquier matriz cuadrada no singular A, tiene una A-1 única tal que: AA-1 = A-1A = I.

También (AB)-1 = B-1 A-1 donde A, B son matrices n x n.

Cálculo de la inversa de las matrices.

Mediante el procedimiento de eliminación completa de Gauss-Jordan se vio que un sistema de ecuaciones lineales, se reduce por etapas de cálculo a la forma escalonada, eliminando sucesivamente variables de las ecuaciones hasta reducirla a la solución.

Las eliminaciones del procedimiento transforman la matriz de coeficientes.

En la matriz identidad que corresponde a los coeficientes de las ecuaciones transformadas

Se observa que la transformación total con el procedimiento de eliminación de Gauss-Jordan es equivalente a multiplicar el sistema por A-1.

Frecuentemente es necesario no solo resolver un sistema de ecuaciones simultáneas, sino también obtener la inversa de la matriz de coeficientes.

Esto se logra colocando una matriz identidad I m x m a la derecha de la matriz original de coeficientes y aplicando las transformaciones de eliminación a la matriz extendida.

Página 35

La inversa se genera en el lugar de la matriz identidad.

Las matrices se escriben en particiones como sigue: (A| I |b)(A-1A | A-1I | A-1b) = (I | A-1 | X)

La obtención por eliminación de la inversa mediante eliminación también se denomina operaciones elementales a renglones de matrices y se resume así:Intercambio de renglones para que a11 0

Multiplicar el primer renglón por una constante k 0 (Ri kRi) para que a11= 1

Reemplazar todo renglón i > 1, multiplicando el primer renglón (que contiene a11 = 1) por - ai1 y luego sumando por el i-esimo renglón (i > 1), de tal manera que se elimina el primer coeficiente ai1.

El ejemplo ayuda a aclarar el procedimiento.

El determinante es una cantidad importante asociada a una matriz cuadrada. De hecho no podemos obtener una solución única de un conjunto no homogéneo de ecuaciones lineales si el determinante de la matriz de coeficientes es cero. Esto se debe a que, si por lo menos una ecuación de un conjunto de ecuaciones lineales no es linealmente independiente, el determinante es cero. Si el valor del determinante es extremadamente pequeño o grande, es señal de que hay errores graves en la solución de las ecuaciones. El determinante de una matriz también desempeña un papel importante cuando se calculan los valores propios de una matriz.

El determinante de una matriz A se denota como "det(A)". En el caso de una matriz de 2x2 el determinante de A se calcula:  

Página 36

Ejemplo para resolución manual

Resolver la siguiente matriz mediante su inversa

1. Calculamos el determinante de la matriz, en el caso que el determinante sea nulo la matriz no tendrá inversa.

2. Hallamos la matriz adjunta, que es aquella en la que cada elemento se sustituye por su adjunto.

3. Calculamos la traspuesta de la matriz adjunta.

4. La matriz inversa es igual al inverso del valor de su determinante por la matriz traspuesta de la adjunta.

Página 37

Código de Matlab

%****************************************************************clear; clc; fprintf('Dame la matriz a la que le quieres calcular la inversa\n') f=input('cuantas filas:'); c=input('cuantas columnas:'); %********************************************************* %** Los siguientes for anidados son para introducir      ** %** los datos de la matriz a que se quiere calcular     ** %** su inversa                                           ** %********************************************************* for k=1:c   for j=1:f     fprintf('fila: %x\n',j)     fprintf('columna: %x',k)     r=input('numero de esta fila y columna');     a(j,k)=r;     j=j+1;   end   k=k+1; end a b=a; ************************************************************ %** Se calcula la inversa para comprobar el resultado     ** %***********************************************************fprintf(‘inversa de una matriz con Matlab\n') c=inv(b); c

Diagrama de flujo

Página 38

Código en C

#include <stdio.h>#include <stdlib.h>float** crea_matriz(int f, int c);void destruye_matriz(float** m, int f);void lee_matriz(float** m, int f, int c);void imprime_matriz(float** m, int f, int c);float** matriz_inversa(float** m, int d);int main(){ float** Mo; float** Mi; int D; printf("ingrese orden de la matriz: "); scanf("%d", &D); Mo = crea_matriz(D, D); lee_matriz(Mo, D, D); Mi = matriz_inversa(Mo, D); if( Mi == NULL ) { printf("la matriz dada no es invertible:\n"); imprime_matriz(Mo, D, D); } else { printf("matriz original:\n"); imprime_matriz(Mo, D, D); printf("matriz inversa:\n"); imprime_matriz(Mi, D, D); } destruye_matriz(Mo, D); if( Mi != NULL ) { destruye_matriz(Mi, D); } return 1;}float** crea_matriz(int f, int c){ int i; float** r; r = (float**)malloc(f*sizeof(float*)); for(i = 0; i < f; ++i) r[i] = (float*)malloc(c*sizeof(float)); return r;}void destruye_matriz(float** m, int f){ int i; if( m != NULL )

Página 39

{ for(i = 0; i < f; ++i) free( m[i] ); free( m ); }}void lee_matriz(float** m, int f, int c){ int i, j; for(i = 0; i < f; ++i) { for(j = 0; j < c; ++j) { printf("m[%d][%d]? ", i, j); scanf("%f", &m[i][j]); } }}void imprime_matriz(float** m, int f, int c){ int i, j; printf(" "); for(j = 0; j < c; ++j) { printf(" | %8d", j); } printf("\n"); printf("---"); for(j = 0; j < c; ++j) { printf("-+---------"); } printf("\n"); for(i = 0; i < f; ++i) { printf("%3d", i); for(j = 0; j < c; ++j) { printf(" | %8.3f", m[i][j]); } printf("\n"); }}float** matriz_inversa(float** m, int d){ return NULL;}

Página 40

Conclusión

Este procedimiento es bastante laborioso y poco recomendable cuando el orden de la matriz es mayor que 2, pues, por ejemplo, para una matriz de orden  3  hay que resolver  3  sistemas de ecuaciones lineales, cada uno de ellos con tres ecuaciones y tres incógnitas.

Por lo que, este no es el método más adecuado, ya que por el método de eliminación de Gauss-Jordan es posible encontrar la inversa de una matriz más rápidamente, además de que por este método es necesario calcular su determinante ya que si este es cero la matriz original no tiene inversa, y por lo tanto es inútil realizar todas las operaciones.

Página 41

Factorización LU

Objetivo

En la vida real, muchas veces podemos obtener respuestas a problemas las cuales vienen expresadas en forma de sistema de ecuaciones lineales de la forma Ax = b.Cuando la matriz es pequeña no hay mucho problema, porque podemos proceder de forma manual (con lápiz y papel) a solucionar dichos sistemas (usando los métodos conocidos). Pero, tendremos problemas para dar solución a sistemas los cuales se expresan por matrices en orden mn siendo m y n muy grandes.

La forma manual es tediosa, engorrosa y propensa a errores de cálculo. Es en estos casos que necesitamos ayuda herramienta computadora para que pueda (por medio de ciertas técnicas) dar solución a estos sistemas de ecuaciones. Así, es como es este trabajo se encarga de esas técnicas de operar que se repetirán (iterarán) encontrar con la solución final (nosotros llamaremos a estas técnicas algoritmos iterativos).

Página 42

Introducción

La factorización LU de una matriz es una factorización que resume el proceso de eliminación gaussiana aplicado a la matriz y que es conveniente en términos del número total de operaciones de punto flotante cuando se desea calcular la inversa de una matriz o cuando se resolverá una serie de sistemas de ecuaciones con una misma matriz de coeficientes. la factorización o descomposición LU (del inglés Lower-Upper) es una forma de factorización de una matriz como el producto de una matriz triangular inferior y una superior. Debido a la inestabilidad de este método, por ejemplo si un elemento de la diagonal es cero, es necesario pre multiplicar la matriz por una matriz de permutación. Método llamado factorización PA = LU o LU con pivote.

Sea A una matriz no singular (si lo fuera, entonces la descomposición podría no ser única)

Donde L y U son matrices inferiores y superiores triangulares.Para matrices 3x3, esto es:

Por otro lado la descomposición PLU tiene esta forma:

Lm − 1Pm − 1...L2P2L1P1A = U

Con Lm − 1...L1 matrices triangulares inferiores, Pm − 1...P1 matrices de permutación y U una matriz triangular superior.Para determinar L:

L = (L'm − 1 * ... * L'2 * L'1) − 1

Y cada L'k está dado por:

L'k =

Esto se debe a que L'k es igual a Lk, pero con los elementos de la subdiagonal permutados.Otra forma de ver éste tipo de factorización es: A = PTLU Recordando que las matrices de permutación matriz permutación son invertibles y su inversa es su traspuesta

La factorización LU es básicamente una forma modificada de la eliminación gaussiana. Transformamos la matriz A en una triangular superior U anulando los elementos debajo de la diagonal.

E1 * E2 * ... * En * A = U

Página 43

Donde E1,E2,...,En son matrices elementales, que representan los distintos pasos de la eliminación. Luego recordando que la inversa de una matriz elemental, es otra matriz elemental:

Llamamos L a una matriz triangular inferior.

Factorización LU con pivote

Al utilizar la técnica de triangulación de Gauss para obtener la descomposición L-U de una matriz A podemos encontrarnos con el mismo problema de encontrar un coeficiente en la diagonal que sea 0 o un mal condicionamiento. Podemos entonces utilizar la misma técnica de pivoteo: buscar el siguiente elemento en la columna que sea distinto de 0 o, mejor aún, el de mayor valor absoluto.Pero una vez obtenida la descomposición L-U, si queremos aplicarla a resolver un sistema de ecuaciones, tendremos que tener en cuenta la “historia” o registro de las pivotaciones efectuadas para aplicar al vector de términos independientes.Esto se realiza mediante la matriz de permutación P, que consiste en efectuar sobre la matriz identidad, las mismas permutaciones de filas que se vayan efectuando sobre la matriz que se está triangulando por Gauss.

Al mismo tiempo se efectúan las mismas permutaciones sobre los elementos subdiagonal de la matriz L.Así, si tenemos, por ejemplo, el sistema:AX=BY L y U son las matrices obtenidas de la matriz A como descomposición L-U por triangulación de Gauss con pivotaciones recogidas en la matriz de permutación P, es fácil comprobar que :LU=PA (LU)X=P(AX)=PB=NUEVOBPor tanto los procesos de sustitución descendente y ascendente los aplicamos a : LD=NUEVOB UX=D

Página 44

Ejemplo para resolución manual

Determine una factorización LU de la matriz:

SoluciónLa idea del método es ir acumulando las inversas de las operaciones hechas sobre los renglones la matriz para irla transformando en una matriz escalonada. Y más que propiamente las inversas de las operaciones sobre los renglones, las matrices elementales involucradas. Así por ejemplo el primer calculo que se realiza es hacer un cero debajo de el elemento (1, 1) que es el elemento 2, para ello debemos realizar la

operación Esta operación tiene como matriz elemental la matriz:

Así la situación está:

En el siguiente paso del proceso de eliminación es , esta operación tiene como matriz elemental la matriz:

Así la situación está:

En el siguiente paso del proceso de eliminación es R4 R4+R1, esta operación tiene como matriz elemental la matriz:

Así la situación está:

Página 45

Observamos que el hipotético caso de que en

La matriz B3 ya fuera escalonada, es decir la U buscada, entonces:

Así, en el avance de la conversión a escalonada de A:

En este caso la matriz U está en la forma escalonada y por consiguiente el proceso se detiene haciendo cero aquellos valores desconocidos. Por consiguiente una factorización de A será:

Página 46

Código en Matlab

% Factorización LU (sin intercambio de filas)% [L, U] = slu(A) usa la eliminación gaussiana para computar una matriz% triangular inferior L y una matriz triangular superior U tal forma que% L*U = A. El algoritmo se detendrá si la entrada de pivote es muy pequeña.

[n, n] = size(A);for k = 1:n

if abs(A(k, k)) < sqrt(eps)disp([’Pivote muy pequeño encontrado en columna’ int2str(k) ’.’])end

L(k, k) = 1;for i = k+1:n

L(i,k) = A(i, k) / A(k, k);for j = k+1:nA(i, j) = A(i, j) - L(i, k)*A(k, j);end

endfor j = k:nU(k, j) = A(k, j);end

End

Diagrama de flujo

Página 47

Código en C

#include <stdio.h>int main(){int k,i,j,m,n,w;printf("Da el orden de la matriz\n");scanf("%d",&n);m=n+1;float A[n][m];float Res[n];float L[n][m];printf("Da valores en la matriz en la posicion\n");for(i=0;i<n;i++){for(j=0;j<m;j++){printf("[%i][%i]= ",i+1,j+1);if(j<n)scanf("%f",&A[i][j]);elsescanf("%f",&Res[i]);}}printf("U=\n");for(k=0;k<=n-1;k++){//para moverse por los renglonesfor(i=k+1;i<=n-1;i++){for(j=n-1;j>=0;j--){if((j==n-1)&&(i==k+1)){for(w=0;w<n;w++){if(w>=k)L[w][k]=A[w][k]/A[k][k];elseL[w][k]=0;}}//Hace las modificaciones de A[i][j]A[i][j]=A[i][j]-((A[i][k]/A[k][k])*A[k][j]);}}}for(i=0;i<n;i++){for(j=0;j<n;j++)printf("%f\t",A[i][j]);printf("\n");}for(w=0;w<n;w++){if(w==n-1)L[w][n-1]=1;elseL[w][n-1]=0;}printf("L= \n");for(i=0;i<n;i++){for(j=0;j<n;j++)printf("%f\t",L[i][j]);printf("\n");}for(i=0;i<n;i++)L[i][n]=Res[i];printf("L*y=b \n");for(i=0;i<n;i++){for(j=0;j<m;j++)printf("%f\t",L[i][j]);printf("\n");}float y[n];float sum;y[0]=L[0][n];for(i=1;i<n;i++){sum=0;for(j=0;j<i;j++)sum=sum+L[i][j]*y[j];y[i]=L[i][n]-sum;}printf("y= \n");

Página 48

for(i=0;i<n;i++)printf("%f\t",y[i]);//para los valores de las Xfloat x[n];printf("\nU*x=y\n");for(i=0;i<n;i++){for(j=0;j<m;j++){if(j==n)A[i][j]=y[i];printf("%f\t",A[i][j]);}printf("\n");}x[n-1]=A[n-1][m-1]/A[n-1][n-1];for(i=n-2;i>=0;i--){sum=0;for(j=i+1;j<=n-1;j++)//para obtener los valores de la sustituciónsum=sum+A[i][j]*x[j];//se introduce el valor de Xn en la matriz de resultadosx[i]=(A[i][m-1]-sum)/A[i][i];}printf("\nLos valores de X's son\n\n");//se imprime la matriz de resultadosfor(i=0;i<=n-1;i++){printf("%f\t",x[i]);}return 0;}

Página 49

Conclusión

Un método muy utilizado por las computadoras para resolver ecuaciones lineales no singulares. La factorización LU se tiene la gran ventaja de ser un método barato (de poco coste computacional en su ejecución) y rápido para resolver ecuaciones lineales que no sean singulares (y que su diagonal principal sea diferente de cero). Este método se basa en el método de la eliminación gaussiana con sustitución hacia atrás. Es por lo mismo que este proceso es fácil de dominar puesto que la mayoría de los temas a ver se basa en la eliminación gaussiana lo que hace que se tenga una noción mucho más factible a cómo resolver los problemas.

Página 50

Eliminación Gauss-Seidel

Objetivo

Comprender las diferentes formas de solucionar sistemas de ecuaciones lineales por medio del método Gauss-Seidel.Mostrar cómo aplicar los métodos mencionados para facilitar la solución de sistemas de ecuaciones, y poder así programar dichos métodos en la computadora.

Página 51

Introducción

El método de Gauss-Seidel es un método iterativo utilizado para resolver sistemas de ecuaciones lineales. El método se llama así en honor a los matemáticos alemanes Carl Friedrich Gauss y Philipp Ludwig von Seidel.

Un método iterativo trata de resolver un problema (como una ecuación o un sistema de ecuaciones) mediante aproximaciones sucesivas a la solución, empezando desde una estimación inicial. Esta aproximación contrasta con los métodos directos, que tratan de resolver el problema de una sola vez (como resolver un sistema de ecuaciones Ax=b encontrando la inversa de la matriz A). Los métodos iterativos son útiles para resolver problemas que involucran un número grande de variables (a veces del orden de millones).

Aunque este método puede aplicarse a cualquier sistema de ecuaciones lineales que produzca una matriz (cuadrada, naturalmente pues para que exista solución única, el sistema debe tener tantas ecuaciones como incógnitas) de coeficientes con los elementos de su diagonal no-nulos, la convergencia del método solo se garantiza si la matriz es diagonalmente dominante o si es simétrica y, a la vez, definida positiva.En notación matricial se resuelve de la siguiente manera:

Se comienza planteando el sistema de ecuaciones con el que se va trabajar:

De la ecuación 1 despejar x1, de la ecuación 2 despejar x2,…, de la ecuación n despejar xn. Esto da el siguiente conjunto de ecuaciones:

Para comenzar el proceso iterativo, se le da el valor de cero a las variables x2,…, xn; esto dará un primer valor para x1. Más precisamente, se tiene que:

Página 52

Enseguida, se sustituye este valor de x1 en la ecuación 2, y las variables x3,…, xn siguen teniendo el valor de cero. Esto da el siguiente valor para x2:

Estos últimos valores de x1 y x2, se sustituyen en la ecuación 3, mientras que x4,…, xn siguen teniendo el valor de cero; y así sucesivamente hasta llegar a la última ecuación. Todo este paso arrojará una lista de primeros valores para las incógnitas, la cual conforma el primer paso en el proceso iterativo. Para una mejor comprensión esto se simbolizará de esta forma:

Se vuelve a repetir el proceso, pero ahora sustituyendo estos últimos datos en vez de ceros como al inicio. Se obtendrá una segunda lista de valores para cada una de las incógnitas, lo cual se simbolizará así:

En este momento se pueden calcular los errores aproximados relativos, respecto a cada una de las incógnitas. La lista de errores se presenta a continuación:

El proceso se vuelve a repetir hasta que:

Página 53

Ejemplo para resolución manual

Usar el método de Gauss-Seidel para aproximar la solución del sistema:

Primero se despejan las incógnitas x1, x2 y x3 de las ecuaciones 1, 2 y 3 respectivamente. Se tiene:

Se comienza el proceso iterativo sustituyendo los valores de x2= x3= 0 en la primera ecuación, para calcular el valor de x1:

Se sustituye en la ecuación dos:

Por último, se sustituyen los dos valores anteriores en la última ecuación:

Puesto que todavía no se puede calcular ningún error aproximado, se repite el proceso pero ahora con los últimos datos obtenidos para las incógnitas:

Página 54

Puesto que no se ha logrado el objetivo, se debe repetir el mismo proceso con los últimos valores obtenidos de cada una de las incógnitas. Nótese que aunque el error aproximado ya cumple con ser menor al 1%, esto se debe cumplir para los tres errores aproximados. Por lo tanto se repite el mismo proceso. Omitiendo los pasos intermedios, se obtiene:

Código en Matlab

function[]=gaus(y,v) [r,c]=size(y);%r guarda el numero de renglones y c el numero de columnasd=diag(y);%d será un vector el cual contendrá los elementos de la           %diagonal principal de la matriz formada por el sistema           %de ecuacionesh=0;%h servirá de contadorz=0;%z será el valor que usaremos para condicionark=0;%Contadorw=0;%Contadorfor i=1:r    m=0;    n=0;    for j=1:c-1        if j~=i            m=m+abs(y(i,j));%sumando el valor absoluto de cada elemento que                             %no pertenece a la diagonal principal         else            n=abs(y(i,j));%guardando el valor de la diagonal principal        end    end    if m>n %se compara la suma de los elementos que no son de la diagonal            %principal con los de la diagonal principal, si esta condición           %llegara a ser verdadera el sistema no converge.        w=w+1;

Página 55

    endendif w==0    jacobi(y,v);     for i=1:r%Inicio de despeje de incógnitas        for j=1:c            if j~=i                x(i,j)=[-y(i,j)./d(i)];%x será una matriz la cual contendrá                                       %en sus renglones nuestras incógnitas                                        %despejadas             end        end    end %incógnitas despejadas    while z~=1%ciclo que se repetirá hasta encontrar el valor de las incógnitas        for i=1:r%este ciclo nos servirá para controlar el numero de renglón en que se esté analizando y así evaluar las                 %incógnitas despejadas y obtener los nuevos valores que se utilizaran para evaluar dichas incógnitas            f(i)=0;%la posición i del vector f se le asignara cero para evitar una acumulación            for j=1:c%ciclo que nos servirá para encontrar los nuevos valores en los que se evaluara nuestras incógnitas                if j~=c%condicion para evitar multiplicar el valor constante                    f(i)=f(i)+(x(i,j).*v(j));%el vector f tomara los nuevos valores en los se volverán a evaluar las incógnitas despejadas                else                   f(i)=f(i)+(x(i,j));                end            end            if f(i)==v(i)%se comparan los valores del vector f con los del vector v                h=h+1;%si se cumple la condición el contador aumenta            end            v(i)=f(i);%el vector v toma inmediatamente los valores calculados de las incógnitas        end        if h==r            z=1;%si el contador es igual al número de renglones quiere decir que los valores utilizados anteriormente son iguales a los acabados de obtener        else            h=0;%si no el contador regresa a cero        end        k=k+1;    end%valores de las incógnitas obtenidos    disp(‘*****Gauss-Seidel*****’)    for i=1:r        f(i)%imprimir los valores de las incógnitas.    end    disp(‘Numero de iteraciones: ‘);disp(k);else    disp(‘*****No converge el sistema de ecuaciones*****’);end

Página 56

Conclusión

Luego de haber estudiado a profundidad estos temas o herramientas para resolver sistemas de ecuaciones, se concluye que para resolver estos sistemas de ecuaciones lineales existen diferentes métodos, pero dependerá del gusto de cada persona elegir uno en específico. Sin embargo, muchas veces la elección no será arbitraria, pues cada método tiene sus ventajas y sus desventajas. Algunos métodos son más exactos, otros más fáciles de programar, otros más cortos, etc. Como se mencionó en la introducción, los dos métodos estudiados en este trabajo son ideales para programarlos por computadora, pues son iterativos y muy largos.

Se concluye que para resolver estos sistemas de ecuaciones lineales existen diferentes métodos, pero dependerá del gusto de cada persona elegir uno en específico. Sin embargo, muchas veces la elección no será arbitraria, pues cada método tiene sus ventajas y sus desventajas. Algunos métodos son más exactos, otros más fáciles de programar, otros más cortos, etc. Para ser capaces de elegir un método apropiado, lo primero que se necesita es comprender cómo se desarrolla cada uno de estos procesos.

Página 57

Eliminación por medio de bisección

Objetivo

Aprender el proceso de Bisección el cual nos brinda una manera fácil y precisa para poder resolver ecuaciones lineales que de otro modo serían más difíciles de resolver.

En matemáticas, el método de bisección es un algoritmo de búsqueda de raíces que trabaja dividiendo el intervalo a la mitad y seleccionando el sub intervalo que tiene la raíz.

Página 58

Introducción

El Método de Bisección, conocido también como de corte binario, de partición en dos intervalos iguales o método de Bolzano, es un método de búsqueda incremental donde el intervalo se divide siempre en dos. Si la función cambia de signo sobre un intervalo, se evalúa el valor de la función en el punto medio. La posición de la raíz se determina situándola en el punto medio del subintervalo dentro del cual ocurre un cambió de signo. El proceso se repite hasta obtener una mejor aproximación.

En otras palabras; establece que toda función continua f en un intervalo cerrado [a,b] toma todos los valores que se hallan entre f(a) y f(b). Esto es que todo valor entre f(a) y f(b) es la imagen de al menos un valor en el intervalo [a,b]. En caso de que f(a) y f(b) tengan signos opuestos, el valor cero sería un valor intermedio entre f(a) y f(b), por lo que con certeza existe un p en [a,b] que cumple f(p)=0. De esta forma, se asegura la existencia de al menos una solución de la ecuación f(a)=0.

El método consiste en lo siguiente:

Debe existir seguridad sobre la continuidad de la función f(x) en el intervalo [a,b] A continuación se verifica que Se calcula el punto medio m del intervalo [a,b] y se evalúa f(m) si ese valor es

igual a cero, ya hemos encontrado la raíz buscada En caso de que no lo sea, verificamos si f(m) tiene signo opuesto con f(a) o con

f(b) Se redefine el intervalo [a, b] como [a, m] ó [m, b] según se haya determinado en

cuál de estos intervalos ocurre un cambio de signo Con este nuevo intervalo se continúa sucesivamente encerrando la solución en un

intervalo cada vez más pequeño, hasta alcanzar la precisión deseada

Enseguida se muestra el algoritmo para el Método de Bisección y el programa realizado en Matlab.

Algoritmo

Paso 1: Escójanse los valores iniciales xl y xu de forma tal que la función cambie de signo sobre el intervalo. Esto se puede verificar asegurándose de que f(xl)f(xu) < 0.

Paso 2: La primera aproximación a la raíz xr se determina como:

Paso 3: Realice las siguientes ecuaciones y determine en que subintervalo cae la raíz:

a. si f(xl)f(xr)<0, entonces la raíz se encuentra dentro del primer subintervalo. Por lo tanto, resuélvase xu=xr y continúe en el paso 4.

Página 59

b. si f(xl)f(xr)>0, entonces la raíz se encuentra dentro del segundo subintervalo. Por lo tanto, resuélvase xl=xr, y continúe en el paso 4.

c. si f(xl)f(xr)=0, entonces la raíz es igual a xr y se terminan los cálculos.

Paso 4: Calcúlese una nueva aproximación a la raíz mediante:

Paso 5: Decídase si la nueva aproximación están exacta como se desea. Si es así, entonces los cálculos terminan, de otra manera se regresa al paso 3. Esto se hace mediante el cálculo de los errores, que al igual que en el método de Gauss-Seidel o en cualquier otro me todo se calculan mediante la siguiente fórmula:

Página 60

Ejemplo para resolución manual

Consideremos el problema de encontrar un número positivo x tal que cos(x) = x3. Podríamos tratar de encontrar el cero de f(x) = cos(x) - x3.

Sabemos que f '(x) = -sin(x) - 3x2. Ya que cos(x) ≤ 1 para todo x y x3 > 1 para x>1, deducimos que nuestro cero está entre 0 y 1. Comenzaremos probando con el valor inicial x0 = 0,5

Los dígitos correctos están subrayados. En particular, x6 es correcto para el número de decimales pedidos. Podemos ver que el número de dígitos correctos después de la coma se incrementa desde 2 (para x3) a 5 y 10, ilustando la convergencia cuadrática.

Tomamos una estimación inicial de la solución. En este caso podemostomar por ejemplo x0 = 1.0, y calculamos las siguientes aproximaciones.Desde el punto de vista práctico, si deseamos aproximar laSolución con 6 decimales, podemos detener los cálculos cuando dosAproximaciones consecutivas coincidan hasta el decimal 8. En nuestroCaso, obtendríamosx0 = 1.0,x1 = 1−e1 − 11e1 + 112= 0. 53788284,x2 = x1 −ex1 − 1x1ex1 + 1x21= 0. 56627701,x3 = 0. 56714 258,x4 = 0. 56714 329,x5 = 0. 56714 329.

Página 61

Código de Matlab

clc

clear all

a=[10 -10 -30 10;

-10 30 -5 0;

-30 -5 65 0]

[r,c]=size(a)

ea=1;

while ea>.5;

for i=1:r

x(i)=0

end

for i=1:r

suma=0;

for j=1:r

if i~=j;

suma=suma+a(i,j)*x(j)

end

end

x(i)=(a(i,c)-suma)/a(i,j)

end

for k=1:r

ea(k)=((x(k)-x(i))/x(k))*100

end

end

Página 62

Diagrama de flujo

Página 63

Código de C++

#include <stdio.h>

#include <conio.h>

#include <math.h>

int main ()

{ int i;

float xa[100],xb[100],xr[100],fa[100],fb[100],fr[100],ea[100],tol,ff[100];

printf("Este programa resuelve la siguiente ecuación en un determinado intervalo f=tan-1(x)+x-1);

printf("\n Ingrese el límite inferior del intervalo: ");

scanf("%f",&xa[1]);

printf("\n Ingrese el límite superior del intervalo: ");

scanf("%f",&xb[1]);

do

{

for(i=1;i<=10;i++)

{

fa[i]=atan(xa[i])+xa[i]-1;

fb[i]=atan(xb[i])+xb[i]-1;

xr[i]=(xa[i]+xb[i])/2;

fr[i]=atan(xr[i])+xr[i]-1;

ff[i]=fa[i]*fr[i];

ea[i]=((xb[i]-xa[i])/xb[i])*100;

printf("\n\nxa%d=%f",i,xa[i]);

Página 64

printf("\nxb%d=%f",i,xb[i]);

printf("\nxr%d=%f",i,xr[i]);

printf("\nfa%d=%f",i,fa[i]);

printf("\nfb%d=%f",i,fb[i]);

printf("\nff%d=%f",i,ff[i]);

printf("\nfr%d=%f",i,fr[i]);

printf("\nea%d=%f",i,ea[i]);

if (fa[i]*fr[i]<0)

{

xa[i+1]=xa[i];

xb[i+1]=xr[i];

xr[i+1]=((xa[i+1]+xb[i+1])/2);

}

if (fa[i]*fr[i]> 0)

{

xa[i+1]=xr[i];

xb[i+1]=xb[i];

xr[i+1]=((xa[i+1]+xb[i+1])/2);

}

}

}

while(ea[i]>=.5);

getch();

return 0;

}

Página 65

Conclusión

El método de bisección es un método bastante útil y bastante preciso para poder obtener la raíz de una función no lineal, sin embargo este método requiere de más iteraciones que otros métodos así es que de cierto modo no es tan conveniente usarlo.

Aunque el método de newton-Raphson en general es muy eficiente, hay situaciones en que presenta dificultades. Un caso especial es en el de las raíces múltiples. En algunos casos es posible que para raíces simples se presenten dificultades por su lenta convergencia, el delta x se acerca muy lentamente a cero o no se acerca.

El método de Newton-Raphson es la manera más eficiente de resolverlas, aunque las ecuaciones y sus derivadas puedan parecer realmente muy intimidantes.

Página 66

Eliminación por medio de regla falsa

Objetivo

Este es uno de los métodos que ocupa ecuaciones algebraicas, y hemos agregado por tanto, esa línea recta que une el intervalo [a,b]. La idea principal es que si tomamos el punto donde la recta corta el eje x, estaremos más cerca de hallar la raíz.

El método de la regla falsa o falsa posición es un método iterativo de resolución numérica de ecuaciones no lineales. El método combina el método de bisección y el método de la secante.

Página 67

Introducción

Mediante este método se busca una solución de la ecuación f(x) = 0, una raíz de f. Como en el método de bisección, se parte de un intervalo inicial [a0,b0] con f(a0) y f(b0) de signos opuestos, lo que garantiza que en su interior hay al menos una raíz.

El algoritmo va obteniendo sucesivamente en cada paso un intervalo más pequeño [ak, bk] que sigue incluyendo una raíz de la función f.

Entonces, supongamos que tenemos una función f(x), que es continua en el intervalo [xa, xb], y que además f(xa) y f(ba) tienen signos opuestos por lo que se deduce que existe al menos una solución para esa ecuación.

Ahora, necesitamos saber la ecuación de la línea recta que une esos dos puntos. Para ello nos ayudamos de la ecuación punto-pendiente, por eso, hallamos la pendiente:

Ahora vamos a sustituir eso en la ecuación de la recta:

Pero recordamos que la recta en cuestión corta el eje x, así que hacemos y=0:

Simplificamos multiplicando todo por xb-xa, para quitar el denominador:

Página 68

Como paso final, despejamos la incógnita x:

Vamos ahora a describir paso a paso como se desarrolla el método de la regla falsa (considerando f(x) continúa):

1) Primero debemos encontrar unos valores iniciales xa y xb tales que:

2) Aproximamos a la raíz, para ello usamos:

3) Evaluamos f(xr). Se pueden dar hasta tres casos:

A)

Como f(xa) y f(xr) tienen signos opuestos, por la condición mencionada anteriormente deducimos que, la raíz se encuentra en el intervalo [xa, xr]

B)

f(xa) y f(xr) tienen el mismo signo. Así que xb y xr han de tener signos distintos, pues:

Por tanto, la raíz se encuentra en el intervalo [xr, xa].*Pista: Como consideramos que la ecuación tiene que ser continua (si o si), al darse este caso, no cumpliría con la condición de continuidad, al menos que tomemos como referencia un tercer punto (xr) cuya imagen (f(xr)) será de signo opuesto.

C)

En este caso, como f(xr)=0 ya tenemos localizada la raíz. 

Debemos repetir estos 3 pasos señalados anteriormente hasta que:|E|<Eb

 

Página 69

Ejemplo para resolución manual

Página 70

Código en Matlab

function x = regula_falsi(fun,a,b,maxiter)% Aproxima por el método de la regla falsa una raíz de la ecuación fun(x)=0

fprintf(1, 'Método de la regla falsa\n');

fprintf(1,'\n');

n=1;

u=feval(fun,a);

v=feval(fun,b);

if sign(u)==sign(v)

disp('ERROR: la función debe cambiar signo en a,b');

break;

end;

for n=1:1:maxiter

c=a-(u*(b-a)/(v-u));

w=feval(fun,c);

fprintf(1, 'n= %i, c= %f, f(c)= %e \n',n, c,w);

if sign(u)==sign(w)a = c; u=w;

elseb=c; v=w;

endn=n+1;

end;x=c

Página 71

Diagrama de flujo

Página 72

Conclusión

Este método en comparación al anterior tiende una aproximación a la respuesta de la función más rápidamente, lo que es lo mismo requiere de mucho menos pasos para obtenerlo.

Como ya lo vimos toma aportaciones de métodos como son el de secante y el de bisección pues al ser un método iterativo de trabaja en un intervalo, probando con valores uno a uno hasta llegar al resultado.

Al ser una línea recta, la que imaginariamente se traza, hace que se reduzcan los pasos, así como las operaciones a realizar y se requiere de menos esfuerzo y tiempo para llegar al resultado.

Página 73

Eliminación Newton-Raphson

Objetivo

Conocer el método de Newton-Raphson el cual ayudara a lograr una más pronta resolución de ecuaciones pues por medio de este método se generan los resultados esperados mucho más rápidamente, de manera más sencilla y sin tantas operaciones.

El método de Newton-Raphson es un método de optimización iterativo al igual que los vistos anteriormente que se basa en aproximar la función a optimizar por medio de la serie de Taylor hasta orden 2. El método de Newton (conocido también como el método de Newton-Raphson o el método de Newton-Fourier) es un algoritmo eficiente para encontrar aproximaciones de los ceros o raíces de una función real. También puede ser usado para encontrar el máximo o mínimo de una función, encontrando los ceros de su primera derivada.

Página 74

IntroducciónNewton aplicaba el método solo a polinomios, y no consideraba las aproximaciones sucesivas xn, sino que calculaba una secuencia de polinomios para llegar a la aproximación de la raíz x. El método de Newton-Raphson es un método abierto, en el sentido de que su convergencia global no está garantizada. La única manera de alcanzar la convergencia es seleccionar un valor inicial lo suficientemente cercano a la raíz buscada. Así, se ha de comenzar la iteración con un valor razonablemente cercano al cero (denominado punto de arranque o valor supuesto). La relativa cercanía del punto inicial a la raíz depende mucho de la naturaleza de la propia función; si ésta presenta múltiples puntos de inflexión o pendientes grandes en el entorno de la raíz, entonces las probabilidades de que el algoritmo diverja aumentan, lo cual exige seleccionar un valor supuesto cercano a la raíz.

Una vez que se ha hecho esto, el método linealiza la función por la recta tangente en ese valor supuesto. La abscisa en el origen de dicha recta será, según el método, una mejor aproximación de la raíz que el valor anterior. Se realizarán sucesivas iteraciones hasta que el método haya convergido lo suficiente. f'(x)= 0 Sea f : [a, b] -> R función derivable definida en el intervalo real [a, b]. Empezamos con un valor inicial x0 y definimos para cada número natural n.

Donde f ' denota la derivada de f.

Estimación del ErrorSe puede demostrar que el método de Newton-Raphson tiene convergencia cuadrática: si

es raíz, entonces:

Para una cierta constante . Esto significa que si en algún momento el error es menor o igual a 0,1, a cada nueva iteración doblamos (aproximadamente) el número de decimales exactos. En la práctica puede servir para hacer una estimación aproximada del error:Error relativo entre dos aproximaciones sucesivas:

Con lo cual se toma el error relativo como si la última aproximación fuera el valor exacto. Se detiene el proceso iterativo cuando este error relativo es aproximadamente menor que una cantidad fijada previamente.

El método de Newton-Raphson no trabaja con intervalos donde nos asegure que encontraremos la raíz, y de hecho no se tiene ninguna garantía de que nos aproximaremos a dicha raíz. Desde luego existen ejemplos donde este método no converge a la raíz, en cuyo caso se dice que el método diverge. Sin embargo, en los casos donde si converge a la raíz, lo hace con una rapidez impresionante.También observe que en el caso de que f´(Xi)=0, el método no se puede aplicar. De hecho vemos geométricamente que esto significa que la recta tangente es horizontal y por lo tanto no interseca al eje x en ningún punto, a menos que coincida con este, en cuyo caso x, mismo es una raíz de f(X).

Página 75

Además de que el método descrito es de aplicación exclusiva para funciones de una sola variable con forma analítica o implícita cognoscible.

Ventajas: Es un método más rápido que los otros métodos Generalmente converge independientemente de la aproximación inicial que se

escoge.

Desventajas: Es necesario conocer la derivada de la función, la cual a veces es difícil de obtener Si la derivada de la función toma un valor cercano a cero, el método puede no

converger Cuando hay raíces múltiples (polinomios), el método a veces falla.

Ejemplo para resolución manual

Consideremos el problema de encontrar un número positivo x tal que cos(x) = x3. Podríamos tratar de encontrar el cero de f(x) = cos(x) - x3.

Sabemos que f '(x) = -sin(x) - 3x2. Ya que cos(x) ≤ 1 para todo x y x3 > 1 para x>1, deducimos que nuestro cero está entre 0 y 1. Comenzaremos probando con el valor inicial x0 = 0,5

Los dígitos correctos están subrayados. En particular, x6 es correcto para el número de decimales pedidos. Podemos ver que el número de dígitos correctos después de la coma se incrementa desde 2 (para x3) a 5 y 10, ilustrando la convergencia cuadrática.Tomamos una estimación inicial de la solución. En este caso podemos tomar por ejemplo x0 = 1.0, y calculamos las siguientes aproximaciones.Desde el punto de vista práctico, si deseamos aproximar la solución con 6 decimales, podemos detener los cálculos cuando dos aproximaciones consecutivas coincidan hasta el decimal 8. En nuestro caso, obtendríamos:x21= 0. 56627701,x3 = 0. 56714 258,x4 = 0. 56714 329,x5 = 0. 56714 329.

Página 76

Código de Matlab

%****************************************************************

clear; clc;

02 tol=input('Ingrese el porcentaje de error: ');

03 f=input('Ingrese la función: ');

04 i=1;

05 fx(i)=x0;

07 syms x;

08 f1=subs(f,x,fx(i));

09 z=diff(f);

10 d=subs(z,x,fx(i));

12 ea(1)=100;

14 while abs(ea(i))>=tol;

15 fx(i+1)=fx(i)-f1/d; f1=subs(f,x,fx(i+1)); d=subs(z,x,fx(i+1));

16 ea(i+1)=abs((fx(i+1)-fx(i))/fx(i+1)*100);

17 i=i+1;

18 end

19 fprintf('i fx(i) Error aprox (i) \n');

20 for j=1:i;

21 fprintf('%2d \t %11.7f \t %7.3f \n',j-1,fx(j),ea(j));

22 end

Página 77

Diagrama de flujo

Página 78

Conclusión

Aunque el método de Newton-Raphson en general es muy eficiente, hay situaciones en que presenta dificultades. Un caso especial es en el de las raíces múltiples. En algunos casos es posible que para raíces simples se presenten dificultades por su lenta convergencia, el delta x se acerca muy lentamente a cero o no se acerca.

El método de Newton-Raphson es la manera más eficiente de resolverlas, aunque las ecuaciones y sus derivadas puedan parecer realmente muy intimidantes.

Página 79

Eliminación por medio de secante

Objetivo

El objetivo principal de esta práctica es conocer el método de la secante el cual es un método de tipo abierto, el cual requiere de dos puntos iniciales, los cuales pueden ser arbitrarios. Lo que hace básicamente este método, es trazar rectas secantes a la curva de la ecuación que se está analizando, y verificar la intersección de dichas rectas con el eje de las X para conocer si es la raíz que se busca.

Introducción

Página 80

El método de la secante al ser un método abierto, converge con la raíz con una velocidad semejante  a la de Newton-Raphson, aunque de igual forma corre el riesgo de no converger con esta nunca. Su principal diferencia con el método de Newton-Raphson es que no se requiere obtener la derivada de la función para realizar las aproximaciones, lo cual facilita las cosas al momento de crear un código para encontrar raíces por medio de este método.

Es una variación del método de Newton-Raphson donde en vez de calcular la derivada de la función en el punto de estudio, teniendo en mente la definición de derivada, se aproxima la pendiente a la recta que une la función evaluada en el punto de estudio y en el punto de la iteración anterior.

Un problema en la implementación del método de Newton-Raphson es el de la evaluación de la derivada. Aunque esto no es un inconveniente para los polinomios y para muchas otras funciones, existen algunas funciones cuyas derivadas pueden ser en extremo difíciles de evaluar. En estos casos, la derivada se puede aproximar mediante una diferencia finita. Por ello el método de la secante es una alternativa dado que elimina la derivada de la formula y lo hace directo

Este método se basa en la formula de Newton-Rapshon pero evita el cálculo de la derivada usando la siguiente aproximación

f ' (Xi )= f (Xi−1 )−f (Xi )Xi−Xi

Sustituyendo en la fórmula de Newton Rapshon se obtiene

X i+1=Xi−f (Xi)f ' (Xi )

≅ Xi−

f (Xi )f (X−1 )−f ( Xi)Xi−1−Xi

X i+1≅ Xi−f (Xi ) (Xi−1−X i )f ( Xi−1 )−f (Xi )

Que es la fórmula del método de la secante para poder calcular el valor de Xi+1 se necesitan 2 valores anteriores Xi y Xi-1

Ejemplo para resolución manual

Página 81

Usar el método de la secante para calcular la raíz aproximada de la función f(x)=x2 −4.

Comenzando con x0 =4, x1 =3 y hasta que ∈r ≤1% .

Aplicando para la primera iteración con la fórmula

X2=Xi−f (Xi ) ( Xi−1−Xi )f (Xi−1 )−f (Xi )

Tendríamos un valor para x2 = 2.2857 . Si se calcula el error relativo con los valores x2 como valor real y x1 como valor aproximado se tendrá:

Ea=3−2.28572.2857

x100=31.25

Ahora si se calcula en una segunda iteración x3 = x2 –x2-x1 f(x2 ) ,

Se tendría f(x2)− f(x1)

X3=X 2−f (Xi ) (X−1−Xi )f (Xi−1 )−f ( Xi)

Un valor para x3 = 2.0541, con un error relativo:

Ea=2.2857−2.05412.0541

x100=11.28

Ahora si se continúa realizando los cálculos iterativamente, se tendrán valores como los mostrados en la siguiente tabla.

Tabla 1. Resultados al aplicar el método de la Secante a la función f(x)=x2 −4.Con x0 =4 y x1 =3

Código en Matlab

Página 82

% Método de la secanteclear allclc f=inline('exp(-x)-log(x)')x0=1x1=1.5tol=0.000001 xra=0;xr=0;i=1;error=100; fx1=f(x1);fx0=f(x0); xr=x1-((x0-x1)/(fx0-fx1))*fx1; fprintf('It. x0 x1 xr error\n');fprintf('%2d \t %11.7f \t %11.7f \t %11.20f \t %11.7f \n',i,x0,x1,xr,error); while error >= tol, xra=xr; x1=xr; fx1=f(x1); fx0=f(x0); xr=x1-((x0-x1)/(fx0-fx1))*fx1; error= ABS((xr - xra)/xr); i=i+1; fprintf('%2d \t %11.7f \t %11.7f \t %11.20f \t %11.7f \n',i,x0,x1,xr,error);end RESULTADO=xr

Diagrama de flujo

Página 83

Código en C

f=inline('exp(-x)-log(x)')

x0=1, x1=1.5, tol=0.0000001

xra=0, xr=0, i=1, error=100

fx1=f(x1), fx0=f(x0)

I

xr=x1-((x0-x1)/(fx0-fx1))*fx1

It, x0, x1, xr, error

while e>0.000001

fx1=f(x1), fx0=f(x0)

xr=x1-((x0-x1)/(fx0-fx1))*fx1

error= abs(((xr - xra)/xr)*100)

It, x0, x1, xr, error

xra=0, xr=0

FIN

Página 84

#include <stdio.h>#include <math.h>doublef (double x){ return (x * x) - 1;} double df (double x){ return (2 * x);} double Secante (double x01, double x02, int N, double T,

double (*fx) (double)) { int i = 1; double x; while (i <= N) { x =

x01 - ((x01 - x02) * (*fx) (x01)) / ((*fx) (x01) - (*fx) (x02)); if (abs (x - x01) < T)

break; i++; x02 = x01; x01 = x; } printf ("Iteraciones: %d", i); return x;} int main (void){ printf ("Método de la Secante: %f", Secante (0.6, 0.61, 20, 0.000001, f)); return 0;}

Conclusión

Página 85

Resulto un método un tanto complicado puesto que se ocupan muchos datos, y se tiene que ser muy ordenado en cuanto a procedimientos, pues en la mayoría de las formulas ocupadas, piden datos que con anterioridad se obtuvieron y que se seguirán ocupando, es por esto que para mi criterio se me hizo un método muy complicada y enrredadizo.

Interpolación de Newton

Página 86

Objetivo

El principal objetivo de esta práctica es aprender el método de Newton para diferencias divididas las cuales son un método de interpolación que nos permite encontrar un valor en cierto punto deseado

Introducción

Interpolar significa encontrar un valor intermedio entre dos o más puntos base conocidos, los cuales se pueden aproximar mediante polinomios.

Página 87

Sea en el sistema de coordenadas de la grafica anterior, las ecuaciones F(x) y G(x) en cuyo espacio “a”, “b” se pueden interpolar determinados valores.La iinterpolación es, a partir de una serie de puntos, obtener una ecuación cuya curva pase por todos ellos o lo más cerca posible.La ecuación general para este método es la siguiente:

Lo importante de este método o la parte interesante es el cálculo de las b's.Problema de interpolación:          Dados n+1 puntos  (x0 ,y0 ), (x1 ,y1 ), (x2 ,y2 ), ...., (xn ,yn ) del plano, hallar un polinomio de grado n                             pn(x)= a0 + a1 x  + a2 x2 + .... +an xn         que pase por estos puntos, esto es que pn(xi) = yi , para n=0,1,2, ... ,n    Para probar la existencia de este polinomio se pueden considerar sus coeficientes  (a0 ,a1 ,a2 ,.... ,an ) como incógnitas a determinar en las n+1 ecuaciones  pn(xi) = yi , para n=0,1,2, ... ,n,   ya que los  (xi,  yi ) son números ya conocidos como datos del problema. Aparece pues el sistema de  n+1 ecuaciones con n+1 incógnitas            a0 + a1 x0

  + a2 x02 + .... +an x0

n  =  y0           a0 + a1 x1

  + a2 x12 + .... +an x1

n  =  y1

           ...           a0 + a1 xn

  + a2 xn2 + .... +an xn

n  =  yn

      Si llamamos  A   la matriz de este sistema, sabemos que el sistema tiene solución única si el determinante de A es distinto de cero. Llamemos por ejemplo

Página 88

Al polinomio de interpolación que estamos buscando. En notación de Matlab esto sería                                         p(x) = c(1) * x^(n-1) + c(2) * x^(n-2) + ... + c(n-1) * x + c(n)       Luego,  para hallar el vector de coeficientes c=(c1,c2, ..., cn) ,  si  y=(y1,y2, ..., yn) son los n datos. Se tendrá                                                            c' = A \ y' esto es de A ct = y t, ct = A-1 y t, donde A es la matriz de Vandermonde, donde ahora si  x = (x1,x2, ..., xn)  son las abscisas de los puntos a interpolar, será  A= ( aij ) =  (xi

n-j). Para A(i,j)= aij , i representa fila, j columna.    El polinomio de interpolación en forma de Newton     Utilizar la matriz de Vandermonde para muchos nodos no es muy buena idea ya que el tiempo de cálculo para matrices grandes es excesivo. Es mucho más sencillo utilizar el método clásico de las diferencias divididas de Newton. Recordemos su definición, para dos nodos, se llama diferencia dividida de orden uno a :

    Mientras que la diferencia dividida de orden n se obtiene por recurrencia a partir de las anteriores como

    El polinomio de Newton en diferencias divididas es entonces                      p(x)=f[x0]+(x-x0) f[x0,x1]+ (x-x0)(x-x1) f[x0,x1]+  +(x-x0)(x-x1)  (x-xn-1) f[x0,x1, ... , xn]

Ejemplo para resolución manual

>Cuantos polinomios de cada grado 0 < d <5 pasan a través de los puntos (-1;-5); (0;-1); (2; 1) y (3; 11)?

Página 89

Luego no hay polinomios de interpolación de grados 0, 1 o 2; existe solamente uno de grado 3

Código en Matlab

clear;clc

Página 90

x=[0 1 2 3];y=[1 2 2.5 4]; % entrada de datosxa=x;ya=y;d=zeros(length(y));d(:,1)=y';for k=2:length(x) for j=1:length(x)+1-k d(j,k)=(d(j+1,k-1)-d(j,k-1))/(x(j+k-1)-x(j)); endendfor w=1:length(x) ds=num2str(abs(d(1,w))); if w>1 if x(w-1)<0 sg1='+'; else sg1='-'; end end if d(1,w)<0 sg2='-'; else sg2='+'; end if w==1 acum=num2str(d(1,1)); elseif w==2 polact=['(x' sg1 num2str(abs(x(w-1))) ')' ]; actual=[ds '*' polact]; acum=[acum sg2 actual]; else polact=[polact '.*' '(x' sg1 num2str(abs(x(w-1))) ')' ]; actual=[ds '*' polact]; acum=[acum sg2 actual]; endendfprintf(' n Valores de X y Y n ');disp(xa);disp(ya);fprintf('n Polinomio interpolación Newton : %s n',acum);x=input(' X interp = ');if x>max(xa)|x<min(xa)endxinterp=x;yinterp=eval(acum);fprintf(' Y(%g) = %g n',x,yinterp);

Diagrama de flujo

Página 91

Código en C

Página 92

#include <stdio.h>main(){

float C[8][8],X[8],M[8],x,f,pe,mul,pol,rf,ft;int n,i,j,e;printf("Ingrese el grado del polinomio a evaluar:");scanf("%d",&n);printf("\n\nIngresando los valores x0,x1.........\n");for(i=0;i<=n;i++){

printf("\nDame el valor de x%d=",i); scanf("%f",&x);

X[i]=x;}printf("\nIngresando los valores de f.......\n");for(i=0;i<=n;i++){

printf("\nDame el valor de f%d=",i);scanf("%f",&f);C[i][0]=f;

}printf("\n\nIngresa el valor del punto a evaluar:");scanf("%f",&pe);

for(i=1;i<=n;i++)for(j=1;j<=i;j++)

{C[i][j]=(C[i][j-1]-C[i-1][j-1])/(X[i]-X[i-j]);

}mul=1;for(i=1;i<=n;i++)

for(j=0;j<=(i-1);j++){

mul=(pe-X[j])*mul;M[i]=mul;

}pol=0;rf=0;for(i=1;i<=n;i++){

pol=C[i][i]*M[i];rf=rf+pol;

}ft=C[0][0]+rf;printf("\n\nLa aproximación en el punto %.4f es %.4f\n\n",pe,ft);

return 0;}

Conclusión

Página 93

Este método llegaría a ser un tanto complicado y confuso, solo como recomendación hay que ser ordenados en cada paso puesto que cada resultado obtenido se ocupa al final cuando se sustituyen los valores en la formula, y si no se tiene a la mano los valores se convierte en un proceso tedioso, pero al igual que los demás métodos es fácil, mientras se le ponga empeño y se realicen muchos ejercicios.

Diferencias divididas de Newton

Página 94

Objetivo

El principal objetivo de esta práctica es aprender el método de Newton para diferencias divididas las cuales son un método de interpolación que nos permite encontrar un valor en cierto punto deseado

Introducción

Página 95

El método de Newton es especialmente indicado en el caso de que deseemos realizar muchas evaluaciones del polinomio interpolador, ya que da el polinomio preparado para ser evaluado por el algoritmo de Horner. Otro aspecto particularmente conveniente es que, si deseamos aumentar el orden del polinomio interpolador, los coeficientes ak ya calculados permanecen inalterados, es decir, no destruimos el trabajo ya realizado cuando deseamos aumentar el orden del polinomio interpolador. Se dice en este caso que los coeficientes ak tienen la propiedad de permanencia.Definición: dados n+1 puntos que corresponden a los datos

X Xo Xi … Xn

Y Yo Yi … Yn

Y de los cuales se representan gráficamente como puntos en el plano cartesiano

Si existe una función f(x) definida en el intervalo [Xo, Xn] (donde suponemos que Xo<Xi<…<Xn) tal que f (Xi)=Yi para i=0, 1,2…n, entonces a f(X) se le llama una función de interpolación de los fatos, cuando es usada para aproximar valores dentro del intervalo [Xo, Xn]Y se le llama función de extrapolación de los datos, cuando este definida y es usada para aproximar valores fuera del intervalo

El tipo de interpolación que se elige, depende de la naturaleza de los datos, así como de los valores intermedios que se esperen

Un tipo de interpolación muy importante es por funciones polinomiales, dado que pueden existir una infinidad de funciones polinomiales de interpolación para un mismo grupo de datos, además se requiere que el polinomio de interpolación sea único

El polinomio dividido de interpolación de Newton se define como

f ( X )=b0+b1 (X−X0 )+b2 ( X−X 0 ) ( X−X i )+…bn (X−X0 )… (X−Xn−1)

Donde b0=f (Xo)

Página 96

b1=f [X1 , X0 ]

b2=f [X2 , X1 , X0 ]

.

.

.

bn=f [X n ,…, X 0 ]

Supongamos de nuevo que tenemos los mismos n puntos:

Con ellos se obtiene Si se consideran únicamente los primeros n−1 puntos.

Se puede construir Sea c (x) la corrección que permite pasar de

La formula anterior dice que c tiene n−1 raíces diferentes x1, x2,..., xn-1, entonces:

De la última igualdad se puede despejarαn−1. Este valor se define como la diferencia dividida de orden n− 1 de f en los puntos x1, x2, ..., xn. Se denota

Una de las igualdades anteriores se reescribe:

Ejemplo para resolución manual

Página 97

Calcule diferencias divididas para f (x) = px en el intervalo [2:0; 2:4] con subintervalos de ancho 0:1.

Cuantos polinomios de cada grado 0 < d < 5 pasan a través de los puntos (-1;-5); (0;-1); (2; 1) y (3; 11)?

Luego no hay polinomios de interpolación de grados 0, 1 o 2;

Existe solamente uno de grado 3

Página 98

Código en Matlab

function c= newtondd(x, y, n)

for j=1:n

v(j,1)=y(j);

end

for i=2:n

for j=1:n+1-i

v(j, i)=(v(j+1,i-1)-v(j,i-1))/(x(j+i-1)-x(j));

end

end

for i=1:n

c(i)=v(1,i);

end

Página 99

Diagrama de flujo

Página 100

Código en C

#include <stdio.h>main(){

float C[8][8],X[8],M[8],x,f,pe,mul,pol,rf,ft;int n,i,j,e;printf("Ingrese el grado del polinomio a evaluar:");scanf("%d",&n);printf("\n\nIngresando los valores x0,x1.........\n");for(i=0;i<=n;i++){

printf("\nDame el valor de x%d=",i); scanf("%f",&x);

X[i]=x;}printf("\nIngresando los valores de f.......\n");for(i=0;i<=n;i++){

printf("\nDame el valor de f%d=",i);scanf("%f",&f);C[i][0]=f;

}printf("\n\nIngresa el valor del punto a evaluar:");scanf("%f",&pe);

for(i=1;i<=n;i++)for(j=1;j<=i;j++)

{C[i][j]=(C[i][j-1]-C[i-1][j-1])/(X[i]-X[i-j]);

}mul=1;for(i=1;i<=n;i++)

for(j=0;j<=(i-1);j++){

mul=(pe-X[j])*mul;M[i]=mul;

}pol=0;rf=0;for(i=1;i<=n;i++){

pol=C[i][i]*M[i];rf=rf+pol;

}ft=C[0][0]+rf;printf("\n\nLa aproximación en el punto %.4f es %.4f\n\n",pe,ft);

return 0;}

Página 101

Conclusión

Este método llegaría a ser un tanto complicado y confuso, solo como recomendación hay que ser ordenados en cada paso puesto que cada resultado obtenido se ocupa al final cuando se sustituyen los valores en la formula, y si no se tiene a la mano los valores se convierte en un proceso tedioso, pero al igual que los demás métodos es fácil, mientras se le ponga empeño y se realicen muchos ejercicios.

Página 102

Polinomio de LaGrange

Objetivo

Dado que existe un único polinomio interpolador para un determinado conjunto de puntos, resulta algo confuso llamar a este polinomio el polinomio interpolador de LaGrange. Un nombre más conciso es interpolación polinómica en la forma de LaGrange.

El cual es una técnica de interpolación de un conjunto de datos o de una función por un polinomio. Es decir, dado cierto número de puntos obtenidos por muestreo o a partir de un experimento se pretende encontrar un polinomio que pase por todos los puntos, el cual simplemente es una reformulación del polinomio de Newton que evita los cálculos de las diferencias divididas.

Página 103

Introducción

En análisis numérico, el polinomio de LaGrange, llamado así en honor a Joseph-Louis de LaGrange, es el polinomio que interpola un conjunto de puntos dado en la forma de LaGrange.Dado que existe un único polinomio interpolador para un determinado conjunto de puntos, resulta algo confuso llamar a este polinomio el polinomio interpolador de LaGrange. La fórmula de interpolación permite calcular de manera aproximada los valores deLa función f(x), y consiste en sustituir la función f(x) a aproximar por otra función g(x) que pudiera convenir por razones de simplicidad, operatividad, etc...

Se trataría de construir otra función g(x) con adecuados parámetros a:

De modo que se cumplan las condiciones de interpolación prefijadas en un conjunto de puntos del dominio de la función f(x), que se denominan nodos de interpolación.Estas condiciones consisten, en general, que coincidan los valores que presenta la función dada en los nodos de interpolación con los valores que en dichos nodos presenta la función interpoladora:

O bien, por ejemplo, que coincidan en dichos nodos las derivadas de ambas funciones:

Siempre aparecerá, obviamente, un término residual, r (x) n , como diferencia entreLa función a interpolar y la función interpoladora:

Esto se puede resumir de la siguiente manera:Dado un conjunto de k + 1 puntos

Donde todos los xj se asumen distintos, el polinomio interpolador en la forma de Lagrange es la combinación lineal

De bases polinómicas de Lagrange

Página 104

Ejemplo para resolución manual

La función tangente y su interpolador.

Se desea interpolar en los puntos

Con cinco puntos, el polinomio interpolador tendrá, como máximo, grado cuatro (es decir, la máxima potencia será cuatro), al igual que cada componente de la base polinómica.

La base polinómica es:

Página 105

Así, el polinomio interpolador se obtiene simplemente como la combinación lineal entre los

y los valores de las abscisas:

Código en Matlab

function y0 = lagrange_interp(x, y, x0)

% x is the vector of abscissas.% y es el vector coincidente de ordenadas.% x0 representa el objetivo de ser interpolados% y0 representa la solución de la interpolación de LaGrange

y0 = 0;

n = length(x);

for j = 1 : n

    t = 1;

    for i = 1 : n

        if i~=j

            t = t * (x0-x(i))/(x(j)-x(i));

        end

Página 106

    end

    y0 = y0 + t*y(j);

end 

Diagrama de flujo

Página 107

Código en C

# include <stdio.h># include <conio.h># include <graphics.h># include <malloc.h># include <stdio.h>

void LaGrange(double x, double X[ ], double y[ ], int Lit)

{

double r=0, num=1, den=1; for(int i=0; i<Lit;i++){ //para el total de polinomios for(int j=0; j<Lit;j++) { //para cada polinomio if (i!=j){ num*=(x - X[j]); den*=(X[i] - X[j] ); }} num*=y[i]; printf("Iteracion %d valor %lf\n", i, num/den); getch(); r+=num/den; num=den=1; } printf("\n El resultado es: %lf", r);}

void main(){ int m, modo=DETECT, medio; double *X,*Y,x; clrscr(); printf("cuantas entradas tendrá la tabla?\n\t\t"); scanf("%d",&m);

X=(double*)malloc(sizeof(double)*m);

printf("Ingresa la tabla los valores de X:\n"); for(int i=0; i<m; i++) scanf("%lf", &X[i]); printf("\nIngresa la tabla los valores de Y:\n");

Página 108

for(i=0; i<m; i++) scanf("%lf", &Y[i]); printf("Escribe el valor X para el cual se encontrara el valor de Y\n");

scanf("%lf",&x); LaGrange(x, X, Y, m); getch();}

Conclusión

Como conclusión podemos anotar que este método es fácil pero que tiene sus limitaciones puesto que entre más grande se vaya volviendo el sistema, así como las variables en cada uno, pues este se va expandiendo en cuanto a operaciones a realizar.Hasta llegar al grado de hojas completas en puras operaciones, puesto que por consiguiente, solo es bueno para sistemas pequeños.

Página 109

Método de mínimos cuadrados

Objetivo

Resolver mediante el método de mínimos cuadrados y el polinomio aproximador el procedimiento más objetivo para ajustar una recta a un conjunto de datos presentados en un diagrama de dispersión se conoce como "el método de los mínimos cuadrados". El ejemplo más simple de una aproximación por mínimos cuadrados es el ajuste de una línea recta a un conjunto de parejas de datos observadas.

Página 110

Introducción

Supongamos que hemos medido un conjunto de pares de datos (Xi, Yi) en un experimento, por ejemplo, la posición de un móvil en ciertos instantes de tiempo.

Queremos obtener la función y=f(X) que se ajuste lo mejor posible a los valores experimentales. Se puede ensayar muchas funciones lineales, polinomiales, exponenciales o logarítmicas.

Una vez establecido la función a ajustar se determinan sus parámetros, en el caso de un polinomio, serán los coeficientes del polinomio de modo que los datos experimentales se desvíen los menos posible de la formula empírica.

La función más sencilla es la función lineal y=ax+b que ya hemos tratado. El procedimiento de ajustar los datos experimentales a una línea recta se denomina regresión lineal.

Queremos aproximar un polinomio de grado n, a un conjunto de m pares de datos (x i, y i) de modo que n* m. Sea el polinomio

Se calcula la cantidad

Para obtener los valores de los coeficientes del polinomio aproximador se tienen que determinar los valores de los coeficientes a0 , a1, a2 , ...an de forma que la cantidad S tome un valor mínimo.Hagamos las derivadas parciales de S respecto de a0 , a1, a2 , ...an iguales a cero:

Página 111

Obtenemos un sistema den+1 ecuaciones conn+1 incógnitas ,a0 , a1, a2 , ...an.

Ejemplo para resolución manual

Ajústese una línea recta a los valores x e y de las primeras dos columnas de la siguiente tabla:

Se pueden calcular las siguientes cantidades:

Usando las ecuaciones:

Se tiene que:

Página 112

Por lo tanto la ecuación lineal con ajuste por mínimos cuadrados es:

Código en Matlab

function [m,b]=mincuadlin(X)

n=length(X(1,:));

A=0;

B=0;

C=0;

D=0; 

for i=1:n;     A=A+X(1,i);

    B=B+X(2,i);

    C=C+(X(1,i))^2;

    D=D+X(1,i)*X(2,i); end 

m=(n*D-A*B)/(n*C-A^2);

b=(C*B-D*A)/(n*C-A^2);  for i=1:n;     hold on;     plot (X(1,i),X(2,i),'*','MarkerEdgeColor','r','LineWidth',1); end 

x=X(1,1):1:X(1,n);

y=m*x+b;

Página 113

plot(x,y,'b');

title('Aproximación lineal por mínimos cuadrados.');

Diagrama de flujo

Página 114

Código en C

#include <iostream>#include <cstdlib>#include <cmath>

main()  {          int i, j;    float x[20], y[20], m, sum_y, sum_x, xy[20], sum_xy, xx[20], sum_xx, a, b;    sum_y=0;    sum_x=0;    sum_xy=0;    sum_xx=0;               Printf( *Introduzca el numero de datos que contiene la muestra debe de ser < 20 datos\n\n n= ");    cin>>m;    printf("\n\n *Introduzca los valores para X \n");    for(j=1,i=1;j<=m,i<=m;j++,i++)       {          printf("\n X"<<i<<"= ");          cin>>x[j];       }           printf("\n\n *Introduzca los valores para Y \n");    for(j=1,i=1;j<=m,i<=m;j++,i++)       {          printf("\n Y"<<i<<"= ");          cin>>y[j];       }     for(j=1;j<=m;j++)         {          sum_y=sum_y+y[j];           sum_x=sum_x+x[j];                              }       for(j=1;j<=m;j++)         {          xy[j]=(x[j])*(y[j]); 

Página 115

          sum_xy=sum_xy+xy[j];                             }       for(j=1;j<=m;j++)         {          xx[j]=(x[j])*(x[j]);           sum_xx=sum_xx+xx[j];                             }      printf("\n\n * Ecuacion 1 \n\n Ec1: "<<sum_y<<" = "<<m<<" a + "<<sum_x<<" b \n\n");      printf("\n\n * Ecuacion 2 \n\n Ec2: "<<sum_xy<<" = "<<sum_x<<" a + "<<sum_xx<<" b \n\n");              b=(((sum_y*-sum_x)+(sum_xy*m))/((sum_x*-sum_x)+(sum_xx*m)));       a=(sum_y-(b*sum_x))/m;             printf("\n\n *Los coeficientes de regresion son: \n\n a= "<<a<<"\n\n b= "<<b<<endl<<endl);      printf("\n\n *La ecuacion de regresion es: \n\n ^y^= "<<a<<" + "<<b<<" (x) \n\n\n");        return 0;       }         

Conclusión

Durante la elaboración de esta práctica, pudimos observar que al igual de los demás métodos anteriores, este se basa en mejorar y obtener un resultado a partir de un par de datos del cual seguirán surgiendo nuevos valores hasta que el valor del error tolerado sea menor que lo establecido, y al igual que los demás métodos iterativos hay que continuar realizando el procedimiento hasta lo acordado del error tolerable.

Página 116

Método del trapecio

Objetivo

No todas las funciones son fáciles de integrar, de hecho algunas ni siquiera se pueden integrar, así que se usan otros métodos que se aproximan a una integral.

El método del trapecio es uno de los más antiguos y sirvió de base para desarrollar las integrales (junto con otros métodos parecidos como el de los rectángulos), pero nunca serán exactos, solo se aproximan).

Pero es un muy buen método en lo que a complejidad se refiere pues es práctico, y lograr el fin de la ecuación, resolverla.

Página 117

Introducción

Las integrales son el área debajo de una curva delimitada por 2 puntos sobre el eje de las x, un punto inicial o punto a y un punto final o punto b. Al derivar una función y evaluarla entre esos 2 puntos se obtiene el área que está debajo de la curva, como lo muestra la imagen, se puede conocer el área sombreada que se muestra integrando la función y evaluándola entre los 2 puntos.

Este método consiste en "llenar" el área que se quiere conocer con trapecios.(Se supone que la base inferior de todos los trapecios mide lo mismo) y lo que se hace es sacar el área de cada uno de los trapecios y luego sumarlas todas para obtener más o menos el área sombreada. Mientras más trapecios se coloquen más precisa será la aproximación, y también mientras más trapecios se coloquen su base inferior tiende a ser 0. El área de un trapecio se obtiene como muestra la imagen de arriba, así que solo hay que hacer un pequeño análisis matemático para obtener una ecuación que nos permita obtener el área de los trapecios en la curva: Se separa al trapecio como si estuviera compuesto de un triangulo y un rectángulo. La serie de ecuaciones que se muestran abajo son un desarrollo en el cual se trata al trapecio primero sacando el área del rectángulo y luego la del triangulo y sumándolas. Luego se simplifican las ecuaciones y se obtiene la que estamos buscando.

El área del rectángulo es bxh y la base es la resta entre los puntos x1-x0 la altura es el punto y1. El área del triangulo es (bxh)/2 la base es la misma que la del rectángulo y la altura es la resta del punto y0-y1.

Se factorizan y simplifican las ecuaciones. Por último queda la ecuación del área de cada trapecio.

Corresponde al caso donde , es decir :

Donde es un polinomio de interpolación (obviamente de grado 1) para los datos:

Página 118

Del capítulo anterior, sabemos que este polinomio de interpolación es:

Integrando este polinomio, tenemos que:

Por lo tanto, tenemos que:

Que es la conocida Regla del Trapecio.

Este nombre se debe a la interpretación geométrica que le podemos dar a la fórmula.

El polinomio de interpolación para una tabla que contiene dos datos, es una línea recta. La integral, corresponde al área bajo la línea recta en el intervalo, que es precisamente el área del trapecio que se forma.

Página 119

Ejemplo para resolución manual

Utilizar la regla del trapecio para aproximar la integral:

Solución.Usamos la fórmula directamente con los siguientes datos:

Por lo tanto tenemos que:

Página 120

Código en Matlab

clcclear

f='exp(x^2)';

a=0;b=1;n=4;

% f función

% a,b intervalo

% n numero partes

disp('Funcion: ');f

disp('De [a: ');a

disp('Hacia b]: ');b

f=inline(f);

h=(b-a)/n;

aprox=f(a)+f(b);

for i=1:n-1

x=a+i*h;

aprox=aprox+2*f(x);

end

aprox=(h/2)*aprox;a=0;

Página 121

disp(aprox);

Diagrama de flujo

Página 122

Código en c

#include <iostream.h>

#include <iomanip.h>

double f(double x)

// Aquí introduces la función que quieres integrar

{

return (x*x*x/3)+4*x;

}

int main(){

double h = 0.00001,a = 1,b = 10,sum;

sum = (f(a)+f(b))/2.0;

for(double x = a + h;x < b;x += h)

sum += f(x);sum = sum*h;

printf("integral = " << sum << endl );

printf( "fin del programa ! ! !";

return 0;}

// MAIN// Con los datos del programa obtendrás integral = 1031.253733// la integral exacta seria ; [(x^3/3)+4x] entre 1 y 10 = 1031

Página 123

Conclusión

Como pudimos darnos cuenta este es un método muy práctico, y muy sencillo además de todo, y como al principio se decía existen funciones que son muy difíciles de integrar y que en ocasiones no se pueden integrar y pues este método nos sirve de mucho pues lo hace un poco mas fácil.

Página 124

Regla de Simpson de 1/3

Objetivo

El desarrollo de las integrales siempre es un problema debido a la complejidad de las funciones a integrar es por ello que se realizan software de aplicación en este campo mediante varios métodos, uno de ellos es la Regla de Simpson que es simple de utilizar. En este caso que se tienen una funcione a integrar probaremos su legitimidad de forma manualmente.Obteniendo resultados de manera muy rápida, y correcta mediante este método.

Página 125

Introducción

Además de aplicar la regla trapezoidal con segmentos cada vez más finos, otra manera de obtener una estimación más exacta de una integral, es la de usar polinomios de orden superior para conectar los puntos.

A las formulas resultantes de calcular la integral bajo estos polinomios se les llama reglas de Simpson.

Regla de Simpson de 1/3.

La regla de Simpson de 1/3 resulta cuando se sustituye un polinomio de segundo orden en la ecuación:

Si a y b se denominan como x0 y x2 , y f2 (x) se representa mediante un polinomio de LaGrange de segundo orden, entonces la integral es:

Después de integrar y de reordenar términos, resulta la siguiente ecuación:  

Página 126

Ejemplo para resolución manual

Use la regla de Simpson 1/3 y 3/8 para integrar la siguiente función: f(x) = 0.2 +25x – 200x2 + 675x3 – 900x4 + 400x5

 Desde a = 0 hasta b = 0.8. La integral exacta es 1.640533. -         Por Simpson 1/3 x0 = 0

x2 = 0.8

x1 = (0 + 0.8)/2 = 0.4 f(x0) = f(0) = 0.2

f(x1) = f(0.4) = 2.456

f(x2) = f(0.8) = 0.232 Sustituimos los valores en la ecuación: I ≈ (b-a) f(x0) + 4f(x1) + f(x2). 6I ≈ 0.8 0.2 + 4(2.456) + 0.232.

6I ≈ 1.367467

Sustituimos los valores en la ecuación: I ≈ (b-a) f(x0) + 3f(x1) + 3f(x2) + f(x3).

8I ≈ 0.8 0.2 + 3(1.432724) + 3(3.487177) + 0.232.

8I ≈ 1.519170

Página 127

Código en Matlab

clear all; clc; fprintf('Calculo de la integral por el método de Simpson de 1/3\n\n'); f=input('introduce la funcion:','s'); a=input('lime inferior:'); b=input('limite superior:'); c=input('numero de segmentos a dividir (numero par):'); h=(b-a)/c; z=0;x=a;for i=1:c;if (-1)^i==1

k=eval(f);

z=z+k;

end

x=h*i;end zz=0;x=a;for i=2:c; if (-1)^i==-1 k=eval(f); zz=zz+k; endx=h*i;end x=a; if x==a d=eval(f); end x=b; if x==b e=eval(f); end z=z*4; v=zz*2;

Página 128

z=z+v+d+e; z=z/(3*c); z=z*(b-a)fprintf('Resultado ');

Diagrama de flujo

Página 129

Código en c

#include<iostream.h>#include<math.h>#include<stdio.h>void main(void){int N,i;double a,b,suma,f,xi,h;printf(" *********METODO SIMPSON 1/3************");<<endl<<endl;cout<<"LA FUNCION A INTEGRAR ES F(X)= (X)/SQRT(1+X^4) "<<endl<<endl;Printf("Ingrese el Límite Inferior de la Integral definida: ");cin>>a;Printf("Ingrese el Limite Superior de la Integral definida: ";cin>>b);Printf(“Ingrese un Numero par de Iteraciones : ";cin>>N;h=(b-a)/N;suma=0;i=0;for(i=0;i<=N;i++){ {if (i%2!=0)f=4*xi/sqrt(1+xi*xi*xi*xi);else if (i%2==0)f=2*xi/sqrt(1+xi*xi*xi*xi);elseif(i==0)f=xi/sqrt(1+xi*xi*xi*xi);

else if(i==N)f=xi/sqrt(1+xi*xi*xi*xi);}xi=a+i*h;suma=suma+f;}Printf("los valores son los siguientes : "<<endl<<endl;cout<<"a= "<<a<<endl);Printf("b= "<<b<<endl);Printf("h= "<<h<<endl<<endl<<endl);Printf("la suma es = "<<suma<<endl;cout<<"la integral es = "<<suma*h/3<<endl);}

Página 130

Conclusión

Los resultados obtenidos manualmente son similares al obtenido con el programa el cual se hace más efectivo cuando el numero de iteraciones es más alto, obteniendo un valor de 0.4406266 manualmente y con el software el valores de 0.39876 el cual se acerca cuando el numero de iteraciones es de 100 el número es exactamente 0.435956 que no es un valor tan alejado de los cálculos realizados .

Página 131

Regla de Simpson de 3/8

Objetivo

El desarrollo de las integrales siempre es un problema debido a la complejidad de las funciones a integrar es por ello que se realizan software de aplicación en este campo mediante varios métodos, uno de ellos es la Regla de Simpson que es simple de utilizar.

En este caso que se tienen una funcione a integrar probaremos su legitimidad primero manualmente y así veremos que tan complicado puede llegar a volverse este método.

Página 132

Introducción

La derivación de la Regla de los Tres Octavos de Simpson es similar a la regla de un tercio, excepto que se determina el área bajo una parábola de tercer grado que conecta 4 puntos sobre una curva dada. REGLA DE SIMPSON DE 1/3. La regla de Simpson de 1/3 resulta cuando se sustituye un polinomio de segundo orden en la ecuación:

Si a y b se denominan como x0 y x2 , y f2 (x) se representa mediante un polinomio de LaGrange de segundo orden, entonces la integral es:

Después de integrar y de reordenar términos, resulta la siguiente ecuación:  

Regla de Simpson de 1/3 de segmentos múltiples

Así como la regla trapezoidal, la regla de Simpson se mejora dividiendo el intervalo de integración en segmentos de igual anchura. h=(b-a)/nLa integral total se representa como:

Sustituyendo la regla de Simpson en cada una de las integrales individuales se obtiene:

Página 133

Reordenando los términos, se obtiene:

REGLA DE SIMPSON DE 3/8.

De manera similar a la derivación de la regla trapezoidal y a la regla de Simpson de 1/3, se ajustan polinomios de LaGrange de tercer orden a cuatro puntos e integrar;

Para obtener

En donde h=(b-a)/3. A esta ecuación se le llama regla de Simpson de 3/8 porque h es un múltiplo de 3/8. Esta es la tercera regla cerrada de integración de Newton-Cotes.    

REGLA DE SIMPSON 3/8 MULTIPLES.

La regla de Simpson de 1/3 es, en general, el método de preferencia ya que alcanza exactitud de tercer orden con tres puntos en vez de los de cuatro puntos necesarios para la versión de 3/8. No obstante, la regla de 3/8 tiene utilidad en aplicaciones de segmentos múltiples cuando el número de segmentos es impar. Para una estimación de cinco segmentos una alternativa es la de aplicar la regla de Simpson de 1/3 a los primeros segmentos y la regla de Simpson de 3/8 a los Últimos tres. De esta manera, se obtiene una estimación con exactitud de tercer orden a través del intervalo completo

Página 134

Ejemplo para resolución manual

Use la regla de Simpson 1/3 y 3/8 para integrar la siguiente función:

Por Simpson 3/8 Cada separación va a tener:x = (0 + 0.8)/3 = 0.2667 x0 = 0x1 = (0 + 0.2667) = 0.2667x2 = (0.2667 + 0.2667) = 0.5333x3 = 0.8 f(x0) = f(0) = 0.2f(x1) = f(0.2667) = 1.432724f(x2) = f(0.5333) = 3.487177f(x3) = f(0.8) = 0.232 Sustituimos los valores en la ecuación: I ≈ (b-a) f(x0) + 3f(x1) + 3f(x2) + f(x3).

8I ≈ 0.8 0.2 + 3(1.432724) + 3(3.487177) + 0.232.

8I ≈ 1.519170

Sustituimos los valores en la ecuación: I ≈ (b-a) f(x0) + 3f(x1) + 3f(x2) + f(x3).

8I ≈ 0.8 0.2 + 3(1.432724) + 3(3.487177) + 0.232.

8I ≈ 1.519170

Página 135

Código en Matlab

clc% Método de Simpson 3/8 de segmentos múltiples impares

a=input('limite inferior:');b=input('limite superior:');n=input('segmentos impares :');h=(b-a)/n% Subrutina para la regla de Simpson de 3/8....% Pulsa una tecla...pauseif (-1)^n==-1, b=b-(3*h),n=(n-3),e=b+h,f=b+2*h,g=b+3*h,k=(e)*((funcion(b)+3*(funcion(e)+funcion(f))+funcion(g))/8);endpauseclc% Subrutina para la sumatoria impar de Simpson 1/3% pulsa una tecla...pausep=0;for i=1:n;

if (-1)^i==1,p=p+funcion(a+(i-1)*h); endp

endclc% Subrutina para la sumatoria par% pulsa una tecla...pauses=0;for i=2:n;

if (-1)^i==-1,s=s+funcion(a+(i-1)*h); ends

endclc

% Y se tiene la fórmula de Simpson 1/3 de segmentos múltiplesI=(b-a)*(funcion(a)+4*p+2*s+funcion(b))/(3*n)% Finalmente la suma de las reglas de 1/3 y 3/8 es....I=I+k% Que es el valor de la integración

Página 136

Diagrama de flujo

Página 137

Código en c

/*Método de Simpson 3/8 dada una funcion*/void Simpson3_8(float a,float b,int n,float *Area){ register int i; float h; float S0,S1,x; S0=S1=0.0; if(n<1){ _error(INTERVALOS); exit(1); } h=(b-a)/n; x=a; for(i=1;i<n;i++){ x+=h; if(i==(i/3)*3)

S0+=2*f(x); else

S1+=3*f(x); } *Area=3*(b-a)/(8*n)*(f(a)+S0+S1+f(b)); printf("\n El area es -> %5.6f",*Area); getch();}

void Datos(){ int i; clrscr(); printf("\n Numero de Segmentos (Par) = "); scanf("%d",&n); if(n<1){

_error(INTERVALOS);exit(1);

} printf("\n Valor de a => "); scanf("%f",&a); printf("\n Valor de b => "); scanf("%f",&b); putchar('\n'); for(i=0;i<=n;i++){ printf(" Teclee x[%d] => ",i); scanf("%f",&X[i]); printf(" Teclee Fx[%d] => ",i); scanf("%f",&Fx[i]); putchar('\n'); }}

Página 138

Conclusión

En este método, nos pudimos dar cuanta que a diferencia del método de Simpson de 1/3, este es más veloz en cuanto a llegar a la solución del sistema, es más fácil, por algo se llama mejorado, puesto que se le hacen mejoras para que además de todo, sea mas exacto que el primer método.

Este método tiene sus ventajas, y sus desventajas, como todos pero entre mas pasan los métodos, estos se hacen más hábiles por así decirlo.

Página 139

Método de Euler

Objetivo

Mediante el método de Euler, comprender en su totalidad como es que funciona, y cuales son las ventajas de este método teniendo claro que existen mejores métodos y mas rápidos pero que cada uno de los métodos cuenta con sus ventajas.

Página 140

Introducción

Una de las técnicas más simples para aproximar soluciones de una ecuación diferencial es el método de Euler, o de las rectas tangentes. Suponga que se desea aproximar la solución del problema de valor inicial.Es un procedimiento de integración numérica para resolver ecuaciones diferenciales ordinarias a partir de un valor inicial dado.El método de Euler es el más simple de los métodos numéricos resolver un problema del siguiente tipo:

Consiste en dividir los intervalos que va de a en sub intervalos de ancho ; ósea:

De manera que se obtiene un conjunto discreto de puntos:

del intervalo de interés . Para cualquiera de estos puntos se cumple que:

.

La condición inicial , representa el punto por donde pasa la curva solución de la ecuación de el planteamiento inicial, la cual se denotará como

.

Ya teniendo el punto se puede evaluar la primera derivada de en ese punto; por lo tanto:

Grafica A.

Página 141

Con esta información se traza una recta, aquella que pasa por y de pendiente

. Esta recta aproxima en una vecinidad de . Tómese la recta como

reemplazo de y localícese en ella (la recta) el valor de y correspondiente a . Entonces, podemos deducir según la Gráfica A:

Se resuelve para :

Es evidente que la ordenada calculada de esta manera no es igual a , pues

existe un pequeño error. Sin embargo, el valor sirve para que se aproxime en el

punto y repetir el procedimiento anterior a fin de generar la sucesión de aproximaciones siguiente:

Ejemplo para resolución manual

Página 142

A partir de las siguientes condiciones iniciales, resuelva el sistema por el método de Euler

Calculamos el valor de tomando en cuenta que el valor de divisiones es de ; por lo tanto quedaría así:

Plantear cuales son valores iniciales de y .

.

Teniendo dichos valores podemos comenzar con el método:

Por lo que el resultado obtenido es: ; posteriormente procederemos a encontrar el valor relativo entre el valor exacto de la ecuación que es

Finalmente se calcula el Error relativo:

Página 143

Código en Matlab

Página 144

Diagrama de flujo

Página 145

Código en c

#include<iostream.h>#include<conio.h>#include<iomanip.h>#include<math.h>

/**********************Se ingresa la funcion****************************/

float func(float x, float y){ return 0.5*(1+x)*pow(y,2);}/**********************Metodo de Euler******************************/

void Euler(){ float x0,y0,xf,yf,h; int n,i; clrscr(); printf(setw(50)<<"Metodo de Integracion de Euler");printf(setw(50)<<"------------------------------"<<endl); printf("Ingrese el valor de x0: "; cin>>x0;printf(Ingrese el valor de y0: "); cin>>y0; printf(ingrese el valor de xf: "); cin>>xf; do{ printf(Ingrese el numero de subintervalos a emplear: "); cin>>n; }while(n<=0); h=(xf-x0)/n; printf(endl;printf(setw(10)<<"I"<<setw(15)<<"Xi"<<setw(15)<<"Yi"<<endl); printf(setw(10)<<"-"<<setw(15)<<"--"<<setw(15)<<"--"<<endl); for(i=1;i<=n;i++) { y0=y0+h*func(x0,y0); x0=x0+h; reportar(x0,y0,i); } printf("\nEl valor de Yf: "<<y0<<endl); getch();}

Conclusión

El esquema anterior se conoce por el nombre de esquema o método de Euler y constituye el método más sencillo para resolver numéricamente una ecuación diferencial ordinaria de primer orden.Nótese que dicho esquema necesita en cada paso del valor y(xk), por tanto cuanto más cercano sea el valor yk calculado del y(xk) real más preciso será el método.

Página 146

Método de Euler mejorado

Objetivo

Las ecuaciones diferenciales aparecen naturalmente al modelar situaciones físicas en las ciencias naturales, ingeniería, y otras disciplinas, donde hay envueltas razones de cambio de una ó varias funciones desconocidas con respecto a una ó varias variables independientes, y es que al conocer como funcionan con distintos métodos propuestos, lograremos comprender su comportamiento y así poder ocuparlas en nuestro benéfico, y claro cuando sea necesario. Estos modelos varían entre los más sencillos que envuelven una sola ecuación diferencial para una función desconocida, hasta otros más complejos que envuelven sistemas de ecuaciones diferenciales acopladas para varias funciones desconocidas. Por ejemplo, la ley de enfriamiento de Newton y las leyes mecánicas que rigen el movimiento de los cuerpos, al ponerse en términos matemáticos dan lugar a ecuaciones diferenciales.

Página 147

Introducción

Este método se basa en la misma idea del método anterior, pero hace un refinamiento en la aproximación.Dado el problema de valor inicial

Tomando un promedio entre ciertas pendientes nos genera la fórmula es la siguiente: 

Donde

Para entender esta fórmula, analicemos el primer paso de la aproximación, con base en la siguiente gráfica: 

En la gráfica, vemos que la pendiente promedio  corresponde a la pendiente de  la recta bisectriz de la recta tangente a la curva en el punto de la condición inicial y la "recta

tangente" a la curva en el punto  donde  es la aproximación obtenida con la primera fórmula de Euler. Finalmente, esta recta bisectriz se traslada paralelamente  hasta el punto de la condición inicial, y se considera el valor de esta recta en  el punto 

como la aproximación de Euler mejorada. 

Página 148

Ejemplo para resolución manual

Dado el problema de valor inicial

1. Aproxima la solución usando el método de Euler modificado de 5 pasos.2. Calcula los errores de truncamiento locales y el error de truncamiento global.1. Método de Euler modificado.El problema en forma normal es

Tenemos

Iteraciones Fase 0.

Fase 1. Partimos de los valores

Calculamos

Fase 2. Partimos de los valores

Calculamos

Página 149

Página 150

Calculamos

Resumimos los resultados en una tabla

Página 151

Código en Matlab

clear all

disp('METODO DE EULER MODIFICADO')

clc

syms x

syms y

f=inline(input('ingrese la derivada:','s'));

x=input('ingrese el valor de x:');

y=input('ingrese el valor de y:');

h=input('ingrese el valor de h:');

n=input('ingrese numero de iteraciones:');

clc

disp('x(n) y´(n) hy´(n) y(n+1),p hy´(n+1),p y(n+1),c');

for i=1:n

s=h+x;

y1=feval(f,x,y);

hy1=h*y1;

y2=y+hy1;

y3=feval(f,s,y2);

hy2=y3*h;

yn=y+((hy1+hy2)/2);

fprintf('\n%0.1f %0.4f %0.4f %0.4f %0.4f %0.4f',x,y,hy1,y2,hy2,yn);

y=yn;

x=x+h;

x=0:1/20:4; plot(x, hy1,x, y1); grid on;

end

Página 152

Código en c

#include <iostream>#include <fstream>

using namespace std;

double euler(double);int main(){ cout << "Hola, yo calculare la solucion a la ecuacion diferencial usando Euler" << endl; cout << "y'=y, con y(0)=1." << endl; cout << "Elija el h" << endl; double h; cin >> h; cout << " En x=1.5, el resultado es " << euler(h) << endl; return 0;}

double euler(double h){ ofstream salida("salida_euler.dat"); double ynp1=0,ynp1prima=0,yn=1,ynprima=1; salida << "#En este caso, h=" << h << endl; for(double x=0; x<=1.5;x+=h) { salida << x << " " << yn << endl; ynp1prima=ynprima+h; ynp1=yn+h*ynprima; ynprima=ynp1prima; yn=ynp1; } salida.close(); return ynp1;}

Página 153

Conclusión

Podemos afirmar, que los programas aquí expuestos resuelven ecuaciones diferenciales ordinarias, de primer orden; y probablemente podemos destacar los errores que existen por cada uno de los métodos. Se dice que los errores del método de Euler, radica en un intervalo proporcional a h2, mientras que su error global es proporcional a h; este método podría ser inestable si la ecuación diferencial ordinaria, tiene una constante de tiempo con signo negativo, a menos que se utilice una h pequeña, en cambio en el método modificado si la ecuación diferencial ordinaria, no es lineal, se requiere de un método iterativo para cada intervalo. Su error en un intervalo es proporcional a h3, mientras que su error global lo es a h2. En fin podemos afirmar que ambos métodos poseen una desventaja, que consiste en que los órdenes de precisión son bajos. Esta desventaja tiene dos facetas, para mantener una alta precisión se necesita una h pequeña, lo que aumenta el tiempo de cálculo y provoca errores de redondeo.

Página 154

Método de Runge-Kutta

Objetivo

El objetivo de los métodos numéricos de Runge-Kutta, es el análisis y solución de los problemas de valor inicial de ecuaciones diferenciales ordinarias (EDO), estos son una extensión del método de Euler para resolver las ecuaciones diferenciales ordinarias, pero con un orden de exactitud más alto que este.

Página 155

Introducción

Uno de los métodos más utilizados para resolver numéricamente problemas de ecuaciones diferenciales ordinarias con condiciones iniciales es el método de Runge- Kutta de cuarto orden, el cual proporciona un pequeño margen de error con respecto a la solución real del problema y es fácilmente programable en un software para realizar las iteraciones necesarias.Sin entrar en mucho detalle, mencionamos solamente que el método de Runge-Kutta cambia la dirección en el sentido de que no sigue la misma línea de los métodos de Euler.

De hecho está basado en una aplicación de los polinomios de Taylor. Comentamos sin embargo, que el método de Runge-Kutta si contiene como casos especiales los de Euler. Las fórmulas

donde

Se conocen como las reglas o fórmulas de Runge-Kutta de orden cuatro para la ecuación diferencial

Página 156

Ejemplo para resolución manual

Un paracaidista con una masa de 55500 g salta de un aeroplano aplíquese la ecuación principal para calcular la velocidad antes de abrir el paracaídas. El cociente de arrastre c es aproximadamente igual a 10500 g/s. Solución : Al sustituir los valores de los parámetros en la ecuación principal se obtiene

Al dar varios valores de t se obtienen las velocidades se obtienen las velocidades para el tiempo, los resultados se presentan a continuación: TABLA DE RESULTADOS

Tiempo en segundos

Velocidad en cm/s.

0 0

2 1631.7

4 2749.5

6 3515.1

8 4039.6

10 4398.8

12 4644.9

Al infinito 5180.0

Código en Matlab

Página 157

Diagrama de flujo

Página 158

Página 159

Código en c

#include<iostream.h>#include<conio.h>#include<iomanip.h>#include<math.h>float func(float x, float y){return 0.5*(1+x)*pow(y,2); }void reportar(float x, float y, int i){printf(setiosflags(ios::showpoint | ios::fixed));printf(setiosflags(ios::right));cout.precision(4);printf(setw(10)<<i<<setw(15)<<x<<setw(15)<<y”);}int menu(){void Kutta(){float x0,y0,xf,yf,h,k1,k2,k3,k4;int n,i;clrscr();printf(setw(50)<<"Método de Runge-Kutta"); printf(setw(50)<<"-----------------------"<<endl);printf("Ingrese el valor de x0: ");cin>>x0;printf(“Ingrese el valor de y0: ");cin>>y0;printf(“ingrese el valor de xf: ");cin>>xf;do{ printf(“Ingrese el numero de subintervalos a emplear: ");cin>>n;}while(n<=0);h=(xf-x0)/n;printf(“endl”);printf(setw(10)<<"I"<<setw(15)<<"Xi"<<setw(15)<<"Yi");printf(setw(10)<<"-"<<setw(15)<<"--"<<setw(15)<<"--");for(i=1;i<=n;i++){ k1=func(x0,y0);k2=func(x0+h/2,y0+h*k1/2);k3=func(x0+h/2,y0+h*k2/2);k4=func(x0+h,y0+h*k3);y0=y0+(k1+2*k2+2*k3+k4)*h/6;x0=x0+h;reportar(x0,y0,i);} printf(“El valor de Yf: "<<y0”);getch();}

Página 160

Conclusión

Puede observarse que al graficar con los valores obtenidos la aproximación realizada por el método de Runge-Kutta es muy cercana al valor exacto de la solución, lo cual puede confirmarse con la vista de los errores absolutos, siendo el mayor error del orden de 10-3 e igual a cero luego de t =13.5, es decir, la aproximación numérica es igual a la solución real en esos casos.

Página 161

Bibliografía

Métodos numéricos:Introducción, aplicaciones y programación.Ediciones UPCAntonio Huerta, Antonio Rodríguez

Métodos numéricos I Justino Alavez RamírezTextos de enseñanza de ciencias básicas

Métodos numéricos para ingenieríaJuan Manuel Izar LandetaEditorial Universitaria Potosina

Métodos numéricos y computación Ward Chaney, David kincaid Canage learning

Métodos numéricos para la física y la ingeniera Luiz Vazquez, Salvador Jimenes Carlos Aguirre Pedro Jose PascualMc Graw hillPag. 87-97

Métodos numéricos para ingenieros (con aplicaciones en computadoras personales)Steven C. Chapra, Raymond P. CanaleMc Graw Hill Pag. 363-371

Métodos numéricos aplicados con softwareShoiro nakamura Pearson Education

Métodos numéricosBajválov, N.S.,Paraninfo, Madrid, 1966.

Página 162