SOLUCIÓN NUMÉRICA DE SISTEMAS DE ECUACIONES NO LINEALES
Enviado por XIMENIUS • 15 de Diciembre de 2015 • Práctica o problema • 7.431 Palabras (30 Páginas) • 210 Visitas
4[pic 2]
SOLUCIÓN NUMÉRICA DE SISTEMAS
DE ECUACIONES NO LINEALES
Un sistema de ecuaciones no lineales consiste en un conjunto de ecuaciones con varias incógnitas, en donde al menos una de sus ecuaciones no es de primer grado y combina ecuaciones algebraicas y trascendentes. Su representación es:
[pic 3] (4.1)
La solución del sistema (4.1) consta de un conjunto de valores de xi, que simultáneamente hacen que todas las ecuaciones sean iguales a cero.
El problema de encontrar manualmente la solución de un sistema de ecuaciones no lineales, es mucho más complicado que para sistemas de ecuaciones lineales o ecuaciones trascendentes, analizadas en los capítulos anteriores, debido a que algunos sistemas carecen de soluciones reales. La mayoría de los enfoques para determinar las soluciones de los sistemas dados en (4.1) son extensiones de los métodos abiertos para resolver simples ecuaciones y sistemas de ecuaciones lineales.
4.1 Solución de sistema de ecuaciones no lineales mediante MatLab
MatLab tiene el comando fsolve y solve para resolver sistemas de ecuaciones no lineales del tipo (4.1), que hacen menos complicado y tedioso encontrar la solución.
Comando | Descripción |
x = fsolve( f, x0) | Resuelve el sistema de ecuaciones no lineales dado en f y con los valores iniciales X0 por los Métodos de Gauss-Newton, Levenberg-Marquardt y Gran escala. |
x = fsolve(f,x0,options) | Resuelve el sistema de ecuaciones no lineales dado en f con los valores iniciales X0, con la estructura options. Ésta se utiliza con optimset('Display', 'iter', 'TolFun',1e-8) |
[x, fval] = fsolve( f, x0) | Resuelve el sistema de ecuaciones no lineales dado en f y con los valores iniciales X0 por los Métodos de Gauss-Newton, Levenberg-Marquardt y Gran escala. Además, proporciona la exactitud de las raíces a la solución mediante fval. |
[x,y,z, . . .,n]=solve(‘ec1’, ‘ec2’,. . . , ‘ecn’) | Resuelve el sistema de ecuaciones no lineales ( ‘ec1’, ‘ec2’,..., ‘ecn’ ) en forma simbólica. Obtiene de forma inmediata todas las raíces que puede calcular con mejor exactitud en los resultados que fsolve, pero las soluciones dadas son muy complicadas. |
4.2 Solución de Sistemas de Dos Ecuaciones No Lineales
Ejemplo 4.1 Resuelve el siguiente sistema de ecuaciones no lineales:
[pic 4] (4.2)
Solución:
Gráficamente la solución del sistema (4.2) está representada por las intersecciones del círculo y la exponencial. Graficando ambas ecuaciones con ayuda de la función ezplot tenemos (Ver Fig. 4.1, que está editada con la barra de herramientas de Figure 1):
>> ezplot('x^2 + y^2 - 4') >> hold on, grid >> ezplot('exp(x) + y – 1') |
[pic 5]
Figura 4.1 Gráfica del círculo y de la exponencial
La figura 4.1 muestra que la solución está cercana a (-1.8, 0.8) y a (1, -1.7).
Se genera un archivo function en el editor de M-File de MatLab con el sistema de ecuaciones no lineales (4.2) con el nombre de circulo.m y se guarda en Work.
%Solución de un sistema de dos ecuaciones no lineales function F = circulo(x) F = [ x(1)^2 + x(2)^2 - 4; exp(x(1)) + x(2) -1]; |
Escribiendo las instrucciones en la Ventana de Comandos de MatLab para llamar al archivo circulo.m y resolver el sistema (4.2) tenemos:
Primer punto >> x0 = [-1.8; 0.8]; >> [x fval] = fsolve('circulo',x0) Optimization terminated: first-order optimality is less than options.TolFun. (La optimización terminó: el óptimo de primer orden es menor que la opción. Tolerancia de la función) x = -1.8163 0.8374 fval = 1.0e-006 * 0.1853 0.0144 La solución es X = -1.8163 Y = 0.8374 Segundo punto >> x0 = [1; -1.7]; >> [x fval] = fsolve('circulo',x0) Optimization terminated: first-order optimality is less than options.tolfun. (La optimización terminó: el óptimo de primer orden es menor que la opción. Tolerancia de la función) x = 1.0042 -1.7296 fval = 1.0e-007 * 0.5263 0.1029 La solución es X = 1.0042 Y = -1.7296 |
El comando solve no requiere crear un archivo function para encontrar la solución del sistema (4.1), lo hace directamente en forma simbólica, tampoco requiere de un valor inicial como fsolve para llegar a las raíces.
Usando el comando solve para resolver el sistema (4.2) tenemos:
>> [x, y]= solve('x^2 + y^2 = 4' ,'exp(x) + y = 1') x = -1.816264 y = .837368 |
El comando solve tiene la desventaja de no poder calcular en algunos sistemas de ecuaciones no lineales todas las posibles raíces, como es el caso del sistema (4.2). En este caso el comando fsolve es más efectivo.
...