Está en la página 1de 21

SOLUCION DE ECUACIONES NO LINEALES

Considere una función 𝑦 = 𝑓(𝑥), 𝑐𝑜𝑛 𝑥 ∈ [𝑎, 𝑏]. Continúa en este intervalo.
Problema: Hallar una raíz de la ecuación 𝑓(𝑥) = 0

METODOS CERRADOS
METODO DE BISECCION

Procedimiento del método de bisección


Paso 1: Se elige el intervalo [𝑥𝑙, 𝑥𝑢] ⊂ [𝑎, 𝑏] tal que 𝑓(𝑥𝑙) ∗ 𝑓(𝑥𝑢) < 0. Esto significa que ∃𝑐 ∈
[𝑥𝑙, 𝑥𝑢], 𝑡𝑎𝑙 𝑞𝑢𝑒 𝑓(𝑐) = 0.
Paso 2: El método de bisección toma el punto medio de tal intervalo, como una primera aproximación,
así tenemos: 𝑥𝑟 = (𝑥𝑙 + 𝑥𝑢)/2
Paso 3: Luego se evalúa lo siguiente:
Si 𝑓(𝑥𝑙) ∗ 𝑓(𝑥𝑟) < 0, entonces 𝑥𝑢 = 𝑥𝑟; y se regresa al paso 2.
Si 𝑓(𝑥𝑙) ∗ 𝑓(𝑥𝑟) > 0, entonces 𝑥𝑙 = 𝑥𝑟; y se regresa al paso 2.
Si 𝑓(𝑥𝑙) ∗ 𝑓(𝑥𝑟) = 0, entonces 𝑐 = 𝑥𝑟; y termina el cálculo. Por lo general es lo más improbable
𝑥𝑟𝑛𝑢𝑒𝑣𝑜 −𝑥𝑟𝑎𝑛𝑡𝑒𝑟𝑖𝑜𝑟
Se puede calcular el error relativo porcentual, como sigue: 𝐸𝑎 = | | × 100%
𝑥𝑟𝑛𝑢𝑒𝑣𝑜
La relación de la tolerancia porcentual, para n cifras significativas, es: 𝐸𝑠 = (0.5 × 102−𝑛 )%
Los cálculos deben efectuarse hasta que: 𝐸𝑎 ≤ 𝐸𝑠

Algoritmo del método de bisección

Problema 01: Dada la función 𝑓(𝑥) = ln(𝑥) + 2𝑥 − 5


a) Geométricamente ubique el cero de f entre dos enteros consecutivos.
b) para encontrar aproximadamente el cero de f, aplicar el método de bisección, usando el criterio de
parada |𝑥𝑘 − 𝑥𝑘−1 | < 10−3
c) para encontrar aproximadamente el cero de f, aplicar el método de bisección, usando el criterio de
|𝑥𝑘 −𝑥𝑘−1 |
parada |𝑥𝑘 |
< 5 × 10−3
Solución:
1
a) Graficando la función en el intervalo de 1 a 5, tenemos que:
Archivo: funcion.m Graficando en MatLab
function y=funcion(x) x=1:0.001:5;y=funcion(x);
y=log(x)+2*x-5; plot(x,y),grid

-1

-2

-3
1 1.5 2 2.5 3 3.5 4 4.5 5

Vemos que la raíz esta en el intervalo [2; 3]


b) Apliquemos el método de bisección, elaborando el programa en MatLab, con el criterio de parada
|𝑥𝑘 − 𝑥𝑘−1 | < 10−3
Archivo: biseccion01.m Ejecución en MatLab
clear;clc; >> biseccion01
disp('CALCULO DE LA RAIZ DE UNA ECUACION CALCULO DE LA RAIZ DE
NO LINEAL') UNA ECUACION NO LINEAL
disp('POR EL METODO CERRADO DE BISECCION') POR EL METODO CERRADO
error=input('Ingrese el error permitido= DE BISECCION
'); Ingrese el error permitido= 0.001
xl=input('Ingrese limite inferior xl = '); Ingrese limite inferior xl = 2
xu=input('Ingrese limite superior xu = '); Ingrese limite superior xu = 3
Es=error; Raiz Solucion :
Ea=100; 2.123458862304688
xr=0; Error aproximado : 0.0007185818
i=0; Numero iteraciones: 16
while Ea>Es >>
xa=xr;
xr=(xl+xu)/2; %FORMULA DE BISECCION
if funcion(xl)*funcion(xr)<0
xu=xr;
Ea=abs((xr-xa)/xr)*100;
elseif funcion(xl)*funcion(xr)>0
xl=xr;
Ea=abs((xr-xa)/xr)*100;
end
i=i+1;
end
fprintf('Raiz Solucion : %12.15f\n',xr)
fprintf('Error aproximado : %12.10f\n',Ea)
fprintf('Numero iteraciones: %12.0f\n',i)

c) Apliquemos el método de bisección, elaborando el programa en MatLab, con el criterio de parada


|𝑥𝑘 −𝑥𝑘−1 |
|𝑥𝑘 |
< 5 × 10−3
Esto significa que
𝑥𝑟𝑛𝑢𝑒𝑣𝑜 − 𝑥𝑟𝑎𝑛𝑡𝑒𝑟𝑖𝑜𝑟
𝐸𝑎 = | | × 100% < 𝐸𝑠 = (0.5 × 102−𝑛 )% = 5 × 10−3
𝑥𝑟𝑛𝑢𝑒𝑣𝑜
Significa que la solución debe tener 4 cifras significativas correctas

2
Archivo: biseccion02.m Ejecución en MatLab
clear;clc; >> biseccion02
disp('CALCULO DE LA RAIZ DE UNA ECUACION CALCULO DE LA RAIZ DE
NO LINEAL') UNA ECUACION NO LINEAL
disp('POR EL METODO CERRADO DE BISECCION') POR EL METODO CERRADO
n=input('Ingrese precisión de cifras DE BISECCION
significativas n = '); Ingrese precisión de cifras
xl=input('Ingrese límite inferior xl = '); significativas n = 4
xu=input('Ingrese límite superior xu = '); Ingrese límite inferior xl = 2
Es=(0.5*10^(2-n)); Ingrese límite superior xu = 3
Ea=100; Raiz Solucion :
xr=0; 2.123474121093750
i=0; Error aproximado : 0.0028743066
while Ea>Es Numero iteraciones: 14
xa=xr; >>
xr=(xl+xu)/2; %FORMULA DE BISECCION
if funcion(xl)*funcion(xr)<0
xu=xr;
Ea=abs((xr-xa)/xr)*100;
elseif funcion(xl)*funcion(xr)>0
xl=xr;
Ea=abs((xr-xa)/xr)*100;
end
i=i+1;
end
fprintf('Raiz Solucion : %12.15f\n',xr)
fprintf('Error aproximado : %12.10f\n',Ea)
fprintf('Numero iteraciones: %12.0f\n',i)

Ejemplo 02: Función: 𝑒 𝑥 + 𝑥 = 0, equivalente a: 𝑒 𝑥 = −𝑥


a) Graficando las funciones
Archivo: funcion.m Graficando en MatLab
function y=funcion(x) x=-100:0.01:5;y=funcion(x);
y=exp(x)+x; plot(x,y),grid

g(x) = exp(x) h(x) = -x en [-2,0]


f(x)=exp(x)+x, x en [-100,5] 2
200
1.8

150 1.6

1.4
100
eje de las ordenadas

1.2

1
50
0.8

0 0.6

0.4
-50
0.2

-100 0
-100 -80 -60 -40 -20 0 20 -2 -1.8 -1.6 -1.4 -1.2 -1 -0.8 -0.6 -0.4 -0.2 0
eje de las abscisas

Tiene una raíz en el intervalo: [-1, 0]


Archivo: grafica.m Graficando en MatLab
x=-2:0.001:0; >> grafica
y=exp(x);z=-x; >>
plot(x,y,x,z),grid

3
Archivo: biseccion02.m Ejecución en MatLab
clear;clc; >> biseccion02
disp('CALCULO DE LA RAIZ DE UNA ECUACION CALCULO DE LA RAIZ DE
NO LINEAL') UNA ECUACION NO LINEAL
disp('POR EL METODO CERRADO DE BISECCION') POR EL METODO CERRADO
n=input('Ingrese precisión de cifras DE BISECCION
significativas n = '); Ingrese precisión de cifras
xl=input('Ingrese límite inferior xl = '); significativas n = 6
xu=input('Ingrese límite superior xu = '); Ingrese límite inferior xl = -2
Es=(0.5*10^(2-n)); Ingrese límite superior xu = 0
Ea=100; Raíz Solución : -
xr=0; 0.567143201828003
i=0; Error aproximado : 0.0000420385
while Ea>Es Numero iteraciones: 23
xa=xr; >>
xr=(xl+xu)/2; %FORMULA DE BISECCION
if funcion(xl)*funcion(xr)<0
xu=xr;
Ea=abs((xr-xa)/xr)*100;
elseif funcion(xl)*funcion(xr)>0
xl=xr;
Ea=abs((xr-xa)/xr)*100;
end
i=i+1;
end
fprintf('Raiz Solucion : %12.15f\n',xr)
fprintf('Error aproximado : %12.10f\n',Ea)
fprintf('Numero iteraciones: %12.0f\n',i)

METODO DE FALSA POSICION O INTEROLACION LINEAL DE LA RAIZ

Considerando una función 𝑦 = 𝑓(𝑥), 𝑐𝑜𝑛 𝑥 ∈ [𝑎, 𝑏]. Continúa en este intervalo. Se debe hallar una
raíz de la ecuación 𝑓(𝑥) = 0
Se supone elegido el intervalo [𝑥𝑙, 𝑥𝑢] ⊂ [𝑎, 𝑏] tal que 𝑓(𝑥𝑙) ∗ 𝑓(𝑥𝑢) < 0. Esto significa que ∃𝑐 ∈
[𝑥𝑙, 𝑥𝑢], 𝑡𝑎𝑙 𝑞𝑢𝑒 𝑓(𝑐) = 0.
El método consiste en trazar una recta secante que pase por estos dos untos ya conocidos, en los que
cambia d signo la función. La intersección de esta recta con el eje x nos da una mejor aproximación de
la raíz

Como los triángulos coloreados son semejantes tenemos que


𝑓(𝑥𝑖 ) 𝑓(𝑥𝑢 )
=
𝑥𝑟 − 𝑥𝑙 𝑥𝑢 − 𝑥𝑟
De donde despejando 𝑥𝑟 , tenemos que:
𝑓(𝑥𝑢 )(𝑥𝑙 − 𝑥𝑢 )
𝑥𝑟 = 𝑥𝑢 −
𝑓(𝑥𝑙 ) − 𝑓(𝑥𝑢 )
A partir de aquí se usa el mismo criterio que el método de bisección, para aproximarnos a la raíz.
4
Algoritmo del Método de Falsa Posición

Problema: Hallar una raíz de la ecuación: 𝑒 −𝑥 − 𝑥 = 0, usando el método de falsa posición.


Solución:
Graficando la ecuación en la forma 𝑒 −𝑥 = 𝑥, tenemos que:
2

1.8

1.6

1.4

1.2

0.8

0.6

0.4

0.2

0
0 0.2 0.4 0.6 0.8 1 1.2 1.4 1.6 1.8 2

Aquí vemos que la raíz esta en el intervalo [0,1]


Programa en MatLab del método de falsa posición
Archivo: regulafalsi.m Ejecución en MatLab
clear;clc; >> regulafalsi
disp('calcula la raíz de una ecuación no calcula la raiz de una ecuación no
lineal') lineal
disp('por el método de falsa posición') por el método de falsa posición
n=input('Ingrese precisión de cifras Ingrese precisión de cifras
significativas n='); significativas n=6
xl=input('Ingrese límite inferior xl=') Ingrese límite inferior xl=0
xu=input('Ingrese límite superior xu=') xl =
Es=0.5*10^(2-n);Ea=100; 0
xr=0;i=0; Ingrese límite superior xu=1
while Ea>Es xu =
xa=xr; 1
xr=xu-(funcion(xu))*(xl- Raiz Solucion :
xu)/(funcion(xl)-funcion(xu));% formula 0.567143299931633
del metodo de regula falsi Error aproximado : 0.0000134185
if funcion(xl)*funcion(xr)<0 Numero iteraciones: 8
xu=xr; >>
Ea=abs((xr-xa)/xr)*100;
elseif funcion(xl)*funcion(xr)>0
xl=xr;
Ea=abs((xr-xa)/xr)*100;
end
i=i+1;
end
fprintf('Raíz Solucion : %12.15f\n',xr)
fprintf('Error aproximado : %12.10f\n',Ea)
fprintf('Numero iteraciones: %12.0f\n',i)

5
Hallar la raíz de y=x^3+x+16; que se encuentra en el intervalo [-3; -2]
Solución

>> regulafalsi
calcula la raiz de una ecuacion no lineal
por el metodo de falsa posicion
Ingrese precision de cifras significativas n=6
Ingrese limite inferior xl=-3
xl = -3
Ingrese limite superior xu=-2
xu = -2
Raiz Solucion : -2.387686487318143
Error aproximado : 0.0000105224
Numero iteraciones: 10
>>

6
METODOS ABIERTOS
Estos métodos requieren uno o dos valores para el inicio del proceso del cálculo de la raíz, pero que no
necesariamente encierran la raíz, pueden ser convergentes a la raíz o divergentes. Pero cuando
convergen lo hacen de una manera más acelerada.

METODO DEL PUNTO FIJO O SUSTITUCION SUCESIVA


En este método tenemos que la ecuación inicial de 𝑓(𝑥) = 0, se convierte en una ecuación
equivalente 𝑥 = 𝑔(𝑥). En la que la función g debe cumplir ciertas condiciones respecto a ala
convergencia. De esta forma se obtiene un proceso iterativo, como sigue:
𝑥0
{𝑥
𝑛+1 = 𝑔(𝑥𝑛 ), 𝑛 ∈ 𝑁
Además el error aproximado de esta ecuación se calcula usando la siguiente formula
𝑥𝑖+1 − 𝑥𝑖
𝐸𝑎 = | | × 100%
𝑥𝑖+1

ALGORITMO DEL MÉTODO DE PUNTO FIJO

CODIGO DEL METODO DE PUNTO FIJO


Archivo: puntofijo.m Ejecución en MatLab
clear;clc; calcula la raiz de una ecuacion no
disp('calcula la raíz de una ecuación no lineal
lineal') por el método abierto
disp('por el método abierto') iteración simple unto fijo
disp('iteración simple unto fijo') Ingrese precisión de cifras
n=input('Ingrese precisión de cifras significativas n=4
significativas n='); Ingrese valor inicial x0=0
xi=input('Ingrese valor inicial x0=') xi =
Es=0.5*10^(2-n);Ea=100; 0
i=0; Raíz Solución :
while Ea>Es 0.567135490206278
xa=xi; Error aproximado : 0.0038004666
xi=g(xi); Numero iteraciones: 20
Ea=abs((xi-xa)/xi)*100; >>
i=i+1;
end
fprintf('Raíz Solución : %12.15f\n',xi)
fprintf('Error aproximado : %12.10f\n',Ea)
fprintf('Numero iteraciones: %12.0f\n',i)

7
METODO DE NEWTON - RAPHSON

Es el método más popular para calcular raíces, por su rapidez de convergencia.


Considérese la ecuación f (x)= 0 , Donde la función f cumple las condiciones para aplicar el método
de las tangentes en cierto intervalo.
El acercamiento se da por un proceso iterativo, se parte de una primera aproximación xi.
Luego se traza la tangente a la función en el punto (xi,f(xi)).
La siguiente aproximación de la raíz es la intersección de esta tangente con el eje x, se denomina
x(i+1).
En esta nueva aproximación se halla nuevamente la tangente, y el proceso sigue hasta que se cumpla la
condición del error.

ALGORITMO DEL MÉTODO DE NEWTON - RAPHSON

Según ello resolver: 𝑓(𝑥) = 𝑒 −𝑥 − 𝑥 = 0, empleando como valor inicial xi=0.


Solución:

8
Archivo: newton.m Ejecución en MatLab
clear;clc; calcula la raíz de una ecuación
disp('calcula la raíz de una ecuación no no lineal
lineal') por el método abierto
disp('por el metodo abierto') Newton - Raphson
disp('Newton - Raphson') Ingrese precisión de cifras
n=input('Ingrese precisión de cifras significativas n=6
significativas n='); Ingrese valor inicial xi=0
xi=input('Ingrese valor inicial xi=') xi = 0
Es=0.5*10^(2-n);Ea=100; Raíz Solución :
i=0; 0.567143290409781
while Ea>Es Error aproximado :
xa=xi; 0.0000221064
fxi=funcion(xi); Numero iteraciones: 4
dxi=dfuncion(xi); >>
xi=xi-fxi/dxi;
Ea=abs((xi-xa)/xi)*100;
i=i+1;
end
fprintf('Raiz Solucion : %12.15f\n',xi)
fprintf('Error aproximado : %12.10f\n',Ea)
fprintf('Numero iteraciones: %12.0f\n',i)

METODO DE LA SECANTE
Este método surge en reemplazo del método de Newton-Raphson, por el inconveniente de la derivada.
Ya que en algunas funciones su derivada resulta muy engorrosa. Por ello se reemplaza la derivada por
una estimación de la pendiente, con diferencias.

La aproximación de la derivada 𝑓′(𝑥) esta dado por la pendiente de la recta secante que corta a la
función en (𝑥𝑖−1 , 𝑓(𝑥𝑖−1 )) y (𝑥𝑖 , 𝑓(𝑥𝑖 )), siendo 𝑥𝑖−1 𝑦 𝑥𝑖 puntos muy cercanos, de lo cual se
obtiene
𝑓(𝑥𝑖−1 ) − 𝑓(𝑥𝑖 )
𝑓′(𝑥𝑖 ) ≅
𝑥𝑖−1 − 𝑥𝑖
Esta aproximación de la derivada por la diferencia finita dividida hacia atrás, se reemplaza en el
algoritmo de Newton-Raphson, de donde se obtiene:
𝑓(𝑥𝑖 )(𝑥𝑖−1 − 𝑥𝑖 )
𝑥𝑖+1 = 𝑥𝑖 −
𝑓(𝑥𝑖−1 ) − 𝑓(𝑥𝑖 )
Algoritmo del método de la secante

9
Hallar la raíz de 𝑓(𝑥) = 𝑒 −𝑥 − 𝑥 = 0, usando el método de la secante, use como valores iníciales o
semilla 𝑥0 = 0 𝑦 𝑥1 = 1 .
Archivo: newton.m Ejecución en MatLab
clear;clc; calcula la raiz de una ecuacion no
disp('calcula la raiz de una ecuacion no lineal
lineal') por el metodo abierto
disp('por el metodo abierto') de la secante
disp('de la secante') Ingrese precision de cifras
n=input('Ingrese precision de cifras significativas n=6
significativas n='); Ingrese valor inicial xi-1=0
xo=input('Ingrese valor inicial xi-1=') xo =
xi=input('Ingrese valor inicial xi=') 0
Es=0.5*10^(2-n);Ea=100; Ingrese valor inicial xi=1
i=0; xi =
while Ea>Es 1
xa=xi; Raiz Solucion :
fxo=funcion(xo); 0.567143299931633
fxi=funcion(xi); Error aproximado : 0.0000134185
xi=xi-fxi*(xo-xi)/(fxo-fxi); Numero iteraciones: 8
Ea=abs((xi-xa)/xi)*100; >>
i=i+1;
end
fprintf('Raiz Solucion : %12.15f\n',xi)
fprintf('Error aproximado : %12.10f\n',Ea)
fprintf('Numero iteraciones: %12.0f\n',i)

10
SISTEMAS DE ECUACIONES LINEALES
Esto es resolver un conjunto de ecuaciones simultaneas no lineales:
𝑓1 (𝑥1 , 𝑥2 , … , 𝑥𝑛 ) = 0
𝑓2 (𝑥1 , 𝑥2 , … , 𝑥𝑛 ) = 0
⋮ ⋮ ⋮
𝑓𝑛 (𝑥1 , 𝑥2 , … , 𝑥𝑛 ) = 0
La solución de este sistema de ecuaciones simultáneas, consiste de un conjunto de valores de 𝑥𝑖 que
simultáneamente verifican todas las ecuaciones.

ITERACION SIMPLE DE PUNTO FIJO


𝑥 2 + 𝑥𝑦 = 10
Resolver el sistema: {
𝑦 + 3𝑥𝑦 2 = 57
Usando el método de iteración de punto fijo y empleando como valor inicial 𝑥𝑖 = 1.5 𝑦 𝑦𝑖 = 3.5.
Solución:

Rescribiendo el sistema tenemos


𝑢(𝑥, 𝑦) = 𝑥 2 + 𝑥𝑦 − 10 =
𝑣(𝑥, 𝑦) = 𝑦 + 3𝑥𝑦 2 − 57 = 0
Despejando x e y de las ecuaciones, respectivas tenemos:
𝑥 = 𝑔(𝑥, 𝑦) = √10 − 𝑥𝑦 𝑥𝑖 = 𝑔(𝑥𝑖 , 𝑦𝑖 ) = √10 − 𝑥𝑖 𝑦𝑖
57−𝑦 57−𝑦𝑖
𝑦 = ℎ(𝑥, 𝑦) = √ 𝑦𝑖 = ℎ(𝑥𝑖 , 𝑦𝑖 ) = √
3𝑥 3𝑥𝑖

Codigo en MatLab
Archivo: puntofijosist.m Ejecución en MatLab
clear;clc; calcula la raiz de un sistema de
disp('calcula la raiz de un sistema de dos dos ecuaciones no lineales
ecuaciones no lineales') por el metodo abierto
disp('por el metodo abierto') iteracion simple punto fijo
disp('iteracion simple punto fijo') Ingrese precision de cifras
n=input('Ingrese precision de cifras significativas n=4
significativas n='); Ingrese valor inicial xo=1.5
xo=input('Ingrese valor inicial xo=') xo = 1.5000
yo=input('Ingrese valor inicial yo=') Ingrese valor inicial yo=3.5
Es=0.5*10^(2-n);Eax=100;Eay=100; yo = 3.5000
i=0; la raiz "x" es:
while Eax>Es & Eay>Es 2.000032559383514
xi=g(xo,yo); la raiz "y" es:
yi=h(xi,yo); 2.999973420852066
Eax=abs((xi-xo)/xi)*100; Numero iteraciones: 9
Eay=abs((yi-yo)/yi)*100; >>
xo=xi;yo=yi;
i=i+1;
end
fprintf('la raiz "x" es: %12.15f\n',xi)
fprintf('la raiz "y" es: %12.15f\n',yi)
fprintf('Numero iteraciones: %12.0f\n',i)

11
Método de Newton-Raphson para sistemas
Este método en el caso de una variable, uso el teorema de Taylor. Que desarrolla la serie de primer
orden, como sigue:
𝑓(𝑥𝑖+1 ) ≅ 𝑓(𝑥𝑖 ) + 𝑓′(𝑥𝑖 )(𝑥𝑖+1 − 𝑥𝑖 )
Donde si 𝑓(𝑥𝑖+1 ) se hace cero, tenemos que
𝑓(𝑥𝑖 )
𝑥𝑖+1 = 𝑥𝑖 −
𝑓′(𝑥𝑖 )
En el caso de un sistema de n ecuaciones con n variables, se debe usar una serie de Taylor de multiples
variables, consideremos el caso n igual a 2.
𝑢(𝑥, 𝑦) = 0
𝑣(𝑥, 𝑦) = 0
De donde usando la serie de Taylor
𝜕𝑢𝑖 𝜕𝑢𝑖
𝑢𝑖+1 = 𝑢𝑖 + (𝑥𝑖+1 − 𝑥𝑖 ) + (𝑦 − 𝑦𝑖 )
𝜕𝑥 𝜕𝑦 𝑖+1
𝜕𝑣𝑖 𝜕𝑣𝑖
𝑣𝑖+1 = 𝑣𝑖 + (𝑥𝑖+1 − 𝑥𝑖 ) + (𝑦 − 𝑦𝑖 )
𝜕𝑥 𝜕𝑦 𝑖+1
Donde igualando las expresiones 𝑢𝑖+1 = 0 𝑦 𝑣𝑖+1 = 0
Y luego despejando 𝑥𝑖+1 𝑦 𝑦𝑖+1
∆𝑥 ∆𝑦
𝑥𝑖+1 = 𝑥𝑖 − 𝑦𝑖+1 = 𝑦𝑖 −
∆ ∆
Donde tenemos que:
𝜕𝑢𝑖 𝜕𝑢𝑖 𝜕𝑢𝑖 𝜕𝑢𝑖
𝜕𝑢𝑖 𝜕𝑣𝑖 𝜕𝑣𝑖 𝜕𝑢𝑖
𝑢𝑖 𝜕𝑣𝑖 𝜕𝑣𝑖
𝑢𝑖 𝜕𝑢𝑖 𝜕𝑣𝑖
𝜕𝑥 𝜕𝑦 𝜕𝑦 𝜕𝑥
∆= | 𝜕𝑣 𝜕𝑣𝑖
| = ∙ − ∙ ∆𝑥 = | 𝜕𝑣𝑖
| = 𝑢𝑖 ∙ − 𝑣𝑖 ∙ ∆𝑦 = | 𝜕𝑣 | = 𝑣𝑖 ∙ − 𝑢𝑖 ∙
𝑖 𝜕𝑥 𝜕𝑦 𝜕𝑥 𝜕𝑦 𝜕𝑦 𝜕𝑦 𝑖 𝜕𝑥 𝜕𝑥
𝑣𝑖 𝑣𝑖
𝜕𝑥 𝜕𝑦 𝜕𝑦 𝜕𝑥

Programa en Matlab de Ne-R para un sistema de dos ecuaciones con dos incognitas
Archivo: newtonsist.m Ejecución en MatLab
clear;clc; calcula la raiz de un sistema
disp('calcula la raiz de un sistema de dos de dos ecuaciones no
ecuaciones no lineales') lineales
disp('por el metodo abierto') por el metodo abierto
disp('de Newton - Raphson') de Newton - Raphson
n=input('Ingrese precision de cifras Ingrese precision de cifras
significativas n='); significativas n=6
xi=input('Ingrese valor inicial xi=') Ingrese valor inicial xi=1.5
yi=input('Ingrese valor inicial yi=') xi =
Es=0.5*10^(2-n);Eax=100;Eay=100; 1.5000
i=0; Ingrese valor inicial yi=3.5
%El sistema es yi =
%u(x,y)=x^2+x*y-10=0 3.5000
%v(x,y)=y+3*x*y^257=0 la raiz "x" es:
while Eax>Es & Eay>Es 1.999999908285831
xa=xi;ya=yi; la raiz "y" es:
ui=xi^2+xi*yi-10;vi=yi+3*xi*yi^2-57; 3.000000320999110
duidx=2*xi+yi;duidy=xi; Numero iteraciones: 8
dvidx=3*xi^2;dvidy=1+6*xi*yi; >>
Jacobiano=duidx*dvidy-duidy*dvidx;
% algoritmo de N-R
xi=xi-(ui*dvidy-vi*duidy)/Jacobiano;
yi=yi-(vi*duidx-ui*dvidx)/Jacobiano;
Eax=abs((xi-xa)/xi)*100;
Eay=abs((yi-ya)/yi)*100;
i=i+1;
end
fprintf('la raiz "x" es: %12.15f\n',xi)
fprintf('la raiz "y" es: %12.15f\n',yi)
fprintf('Numero iteraciones: %12.0f\n',i)

12
SOLUCION DE ECUACIONES LINEALES

Considerando que una matriz en R o en C, tiene la forma de m filas por n columnas, donde m y n son
naturales. Cabe indicar que si uno de ellos es cero, la matriz será vacia.

PRODUCTO DE MATRICES
Para el producto de matrices se considera que: [𝐶]𝑚×𝑛 = [𝐴]𝑚×𝑝 ∙ [𝐵]𝑝×𝑛
Donde tenemos que: 𝑐𝑖 𝑗 = ∑𝑝𝑘=1 𝑎𝑖 𝑘 ∙ 𝑏𝑘 𝑗
Algoritmo del producto de matrices

Hallar el producto AB y BA de las matrices:


1 2 4 7 3 1
𝐴 = [3 1 2] y 𝐵 = [2 3 5]
4 1 1 8 1 6

Programa en Matlab
Archivo: prodmatrices.m Ejecutando en MatLab
clc;clear; Ingrese la matriz [A][1 2 4;3 1 2;4 1 3]
A=input('Ingrese la matriz [A]') A=
B=input('Ingrese la matriz [B]') 1 2 4
a=size(A);b=size(B); 3 1 2
n=a(1);m1=a(2); 4 1 3
m2=b(1);l=b(2); Ingrese la matriz [B][7 3 1;2 3 5;8 1 6]
for i=1:n B=
for j=1:l 7 3 1
if m1==m2 2 3 5
sum=0; 8 1 6
for k=1:m1 C=
sum=sum+A(i,k)*B(k,j); 43 13 35
end 39 14 20
C(i,j)=sum; 54 18 27
else >>
disp('Error en las dimensiones
de la matriz')
end
end
end
C

13
SISTEMAS LINEALES TRIANGULARES

SEL TRIANGULAR SUPERIOR

Sea el sistema 𝐴𝑋 = 𝑏, donde la matriz A es triangular superior. Es decir que 𝑎𝑖 𝑗 = 0, 𝑖 > 𝑗, además
los elementos de la diagonal son no nulos. Entonces la solución es fácil de hallar, y es como sigue:

Programa en Matlab
Archivo: SEL_TSUP.m Ejecución en MatLab
clear;clc; Resolución de un sistema
disp('Resolución de un sistema triangular triangular superior AX=B
superior AX=B') por el método de sustitución
disp('por el método de sustitución regresiva
regresiva') Ingrese la matriz [A], triangular
A=input('Ingrese la matriz [A], triangular superior
superior\n'); [5 6 7;0 8 4;0 0 6]
B=input('Ingrese la matriz de Ingrese la matriz de coeficientes
coeficientes\n'); [6 7 8]'
n=length(A); X=
X=B*0; -0.9167
X(n)=B(n)/A(n,n); 0.2083
for i=n-1:-1:1 1.3333
sum=0; >>
for j=1+1:n
sum=sum+A(i,j)*X(j);
end
X(i)=(B(i)-sum)/A(i,i);
end
X

SEL TRIANGULAR INFERIOR


Sea el sistema 𝐴𝑋 = 𝑏, donde la matriz A es triangular inferior. Es decir que 𝑎𝑖 𝑗 = 0, 𝑖 < 𝑗, además
los elementos de la diagonal son no nulos. Entonces la solución es fácil de hallar, y es como sigue:

14
Programa en Matlab
Archivo: SEL_TSUP.m Ejecución en MatLab
clear;clc; Resolución de un sistema
disp('Resolución de un sistema triangular triangular superior AX=B
superior AX=B') por el método de sustitución
disp('por el método de sustitución regresiva
regresiva') Ingrese la matriz [A], triangular
A=input('Ingrese la matriz [A], triangular superior
superior\n'); [5 6 7;0 8 4;0 0 6]
B=input('Ingrese la matriz de Ingrese la matriz de coeficientes
coeficientes\n'); [6 7 8]'
n=length(A); X=
X=B*0; -0.9167
X(n)=B(n)/A(n,n); 0.2083
for i=n-1:-1:1 1.3333
sum=0; >>
for j=1+1:n
sum=sum+A(i,j)*X(j);
end
X(i)=(B(i)-sum)/A(i,i);
end
X

15
METODOS ITERATIVOS PARA SISTEMAS LINEALES
La idea de el método de iteración de punto fijo, en ecuaciones no lineales se extiende en la solución de
un SEL. Los métodos son de Jacobi y Gauss Seidel
Definición: Se dice que una matriz A de orden n, es de diagonal estrictamente dominante cuando
𝑛

|𝑎𝑖 𝑖 | > ∑|𝑎𝑖 𝑗 | , 𝑝𝑎𝑟𝑎 𝑡𝑜𝑑𝑜 𝑖 = ̅̅̅̅̅


1, 𝑛
𝑗=1
𝑗≠𝑖
Método de iteración de Jacobi: Si A es una matriz diagonalmente dominante. Entonces el SEL
𝐴𝑋 = 𝐵 tiene solución única 𝑋 = 𝑃. Además, el proceso iterativo dado por
(𝑘) (𝑘) (𝑘) (𝑘)
(𝑘+1)
𝑏𝑗 − 𝑎𝑗 1 𝑥1 − … − 𝑎𝑗 𝑗−1 𝑥𝑗−1 − 𝑎𝑗 𝑗+1 𝑥𝑗+1 − ⋯ − 𝑎𝑗 𝑛 𝑥𝑛
𝑥𝑗 = , 𝑝𝑎𝑟𝑎 𝑗 = ̅̅̅̅̅
1, 𝑛
𝑎𝑗 𝑗
Produce una sucesión de vectores {𝑃𝑘 } que converge a 𝑃 cualquiera que sea el vector de partida 𝑃0 .

Definición: Sean X e Y dos puntos n dimensionales . Definimos la distancia entre X e Y según la


norma ‖∗‖1 como ‖𝑋 − 𝑌‖1 = ∑𝑛𝑗=1|𝑥𝑗 − 𝑦𝑗 |

Programa de MatLab jacobi.m Ejecucion en MatLab


function X=jacobi(A,B,P,delta,max1) >> A=[8 1 2;-1 6 3;3 -1 10];
% Datos: A es una matriz invertible de >> B=[16;20;31];
orden N x N >> P=[0;0;0];
% B es una matriz de orden N x 1 >> X=jacobi(A,B,P,0.001,6)
% P es una matriz de orden N x 1: el X=
punto inicial 0.999280526620370
% delta es la tolerancia para P 1.998697048611111
% max1 es el número máximo de iteraciones 2.998402488425926
% Resultados >> X=jacobi(A,B,P,0.001,50)
% X es una matriz de orden N x 1: X=
% la aproximación a la solución de AX=B 1.000562246817130
% generada por el 2.000678843557099
% método iterativo de Jacobi 3.000085546875000
N=length(B); >>
for k=1:max1
for j=1:N
X(j)=(B(j)-A(j,[1:j-1,j+1:N])*P([1:j-
1,j+1:N]))/A(j,j);
end
err=abs(norm(X'-P));
relerr=err/(norm(X)+eps);
P=X';
if (err<delta)|(relerr<delta)
break
end
end
X=X';

Método de iteración de Gauss-Seidel: Si A es una matriz diagonalmente dominante. Entonces el


SEL 𝐴𝑋 = 𝐵 tiene solución única 𝑋 = 𝑃. Además, el proceso iterativo dado por
(𝑘+1) (𝑘+1) (𝑘) (𝑘)
(𝑘+1)
𝑏𝑗 − 𝑎𝑗 1 𝑥1 − … − 𝑎𝑗 𝑗−1 𝑥𝑗−1 − 𝑎𝑗 𝑗+1 𝑥𝑗+1 − ⋯ − 𝑎𝑗 𝑛 𝑥𝑛
𝑥𝑗 = , 𝑝𝑎𝑟𝑎 𝑗 = ̅̅̅̅̅
1, 𝑛
𝑎𝑗 𝑗
Produce una sucesión de vectores {𝑃𝑘 } que converge a 𝑃 cualquiera que sea el vector de partida 𝑃0 .

16
Programa de MatLab jacobi.m Ejecucion en MatLab
function X=gseid(A,B,P,delta,max1) >> A=[8 1 2;-1 6 3;3 -1 10];
% Datos >> B=[16;20;31];
%A es una matriz invertible de orden N x N >> P=[0;0;0];
%B es una matriz de orden N x 1
% P es una matriz de orden N x 1: el punto
>> X=gseid(A,B,P,0.0001,10)
inicial X=
%delta es la tolerancia para P 0.999993408203125
%maxl es el número máximo de iteraciones 1.999989013671875
% Resultados 3.000000878906250
% X es una matriz de orden N x 1: >> X=gseid(A,B,P,0.0001,6)
%la aproximación a la solución de AX=B X=
%generada por el %método iterativo de Gauss- 0.999938476562500
Seidel
N=length(B);
2.000013183593750
for k=1:max1 3.000019775390625
for j=1:N >> X=gseid(A,B,P,0.000001,16)
if j==1 X=
X(1)=(B(1)-A(1,2:N)*P(2:N))/A(1,1); 1.000000123596192
elseif j==N 2.000000205993652
X(N)=(B(N)-A(N,1:N-1)*(X(1:N-1))')/A(N,N); 2.999999983520508
else >>
% X contiene la aproximación k-ésima '/.
%y P la (k-l)-ésima
X(j)=(B(j)-A(j,1:j-1)*X(1:j-1)-
A(j,j+1:N)*P(j+1:N))/A(j,j);
end
end
err=abs(norm(X'-P));
relerr=err/(norm(X)+eps);
P=X';
if (err<delta)|(relerr<delta)
break
end
end
X=X';

17
ECUACIONES DIFERENCIALES ORDINARIAS

Una solución del problema de valor inicial


𝑦 ′ = 𝑓(𝑡, 𝑦), 𝑦(𝑡0) = 𝑦0
En un intervalo [𝑡0, 𝑡1] es una función derivable 𝑦 = 𝑦(𝑡) tal que
𝑦(𝑡0) = 𝑦0 𝑒 𝑦 ′ (𝑡) = 𝑓(𝑡, 𝑦(𝑡)) 𝑝𝑎𝑟𝑎 𝑡𝑜𝑑𝑜 𝑡 ∈ [𝑡0, 𝑡1]
Considere la ecuación diferencial
(𝑡 − 𝑦)
𝑦′ = , 𝑒𝑛 𝑒𝑙 𝑟𝑒𝑐𝑡𝑎𝑛𝑔𝑢𝑙𝑜 0 ≤ 𝑡 ≤ 5, 0 ≤ 𝑦 ≤ 4
2
𝑦(0) = 1, 𝑙𝑎 𝑠𝑜𝑙𝑢𝑐𝑖𝑜𝑛 𝑒𝑠 𝑦(𝑡) = 3𝑒 −𝑡/2 − 2 + 𝑡.
𝑦(0) = 4, 𝑙𝑎 𝑠𝑜𝑙𝑢𝑐𝑖𝑜𝑛 𝑒𝑠 𝑦(𝑡) = 6𝑒 −𝑡/2 − 2 + 𝑡.

Graficando con MatLab, tenemos


Archivo: Ejecución en MatLab
[t,y]=meshgrid(0:5,4:-1:0) >> vectores
dt=ones(5,6) >>
dy=(t-y)/2 4.5

quiver(t,y,dt,dy); 4

hold on 3.5

t1=0:0.01:5; 3

2.5
z1=3*exp(-t1/2)-2+t1; 2

z2=6*exp(-t1/2)-2+t1; 1.5

plot(t1,z1,t1,z2) 1

grid 0.5

hold off 0

-0.5
0 1 2 3 4 5 6

Método de Euler
Construcción de las aproximaciones a la solución del problema de valor inicial 𝑦 ′ =
𝑓(𝑡, 𝑦), 𝑐𝑜𝑛 𝑦(𝑎) = 𝑦0 en [a,b] dadas por 𝑦𝑘+1 = 𝑦𝑘 + ℎ𝑓(𝑡𝑘 , 𝑦𝑘 ), 𝑝𝑎𝑟𝑎 𝑘 = 0,1, … , 𝑀 − 1.

18
Archivo: euler.m Ejecución en MatLab
function E=euler(f,a,b,ya,M) >> E=euler('f',0,3,1,10)
% Datos E=
% - f es la función, almacenada 0 1.0000
% como una cadena de caracteres ’f’ 0.3000 0.8500
% - a y b son los extremos derecho e 0.6000 0.7675
izquierdo del intervalo 0.9000 0.7424
% - ya es la condición inicial y(a) 1.2000 0.7660
% - M es el número de pasos 1.5000 0.8311
% Resultado 1.8000 0.9314
% - E=[T’ Y’] siendo T el vector 2.1000 1.0617
de las abscisas e Y el vector de las 2.4000 1.2175
ordenadas 2.7000 1.3949
h=(b-a)/M; 3.0000 1.5906
T=zeros(1,M+1); >>
Y=zeros(1,M+1) ;
T=a:h:b;
Y(1)=ya;
for j=1:M
Y(j + 1)=Y(j)+h*feval(f,T(j),Y(j)) ;
end
E=[T' Y'];

Metodo de Heun

Construcción de las aproximaciones a la solución del problema de valor inicial 𝑦 ′ =



𝑓(𝑡, 𝑦), 𝑐𝑜𝑛 𝑦(𝑎) = 𝑦0 en [a,b] dadas por 𝑦𝑘+1 = 𝑦𝑘 + 2 [𝑓(𝑡𝑘 , 𝑦𝑘 ) +
𝑓(𝑡𝑘+1 , 𝑦𝑘+ ℎ 𝑓(𝑡𝑘 , 𝑦𝑘 ))], 𝑝𝑎𝑟𝑎 𝑘 = 0,1, … , 𝑀 − 1.
Archivo: heun.m Ejecución en MatLab
function E=heun(f,a,b,ya,M) >> E=heun('f',0,3,1,10)
% Datos:f es la función, almacenada como E =
una cadena de caracteres ’ f ’ 0 1.0000
% a y b son los extremos derecho 0.3000 0.8838
e izquierdo del intervalo 0.6000 0.8253
% ya es la condición inicial 0.9000 0.8165
y(a) 1.2000 0.8506
% M es el número de pasos 1.5000 0.9216
% Resultado:E=[T’ Y’] siendo T el 1.8000 1.0243
vector de las abscisas e 2.1000 1.1544
% Y el vector de las 2.4000 1.3081
ordenadas 2.7000 1.4821
h=(b-a)/M; 3.0000 1.6736
T=zeros(1,M+1); >>
Y=zeros(1,M+1);
T=a:h:b;
Y(1)=ya;
for j=1:M
k1=feval(f,T(j),Y(j));
k2=feval(f,T(j+1),Y(j)+h*k1);
Y(j+1)=Y(j)+(h/2)*(k1+k2);
end
E=[T' Y'];

19
Comparando los resultados
Prog01.m Prog02.m
E=euler('f',0,3,1,10) E=heun('f',0,3,1,10)
plot(E(:,1),E(:,2)) plot(E(:,1),E(:,2))
hold on hold on
% solucion del PVI: y'=(t- % solucion del PVI: y'=(t-
y)/2, y(0)=1 y)/2, y(0)=1
t1=0:0.001:3;z1=3*exp(-t1/2)- t1=0:0.001:3;z1=3*exp(-t1/2)-
2+t1; 2+t1;
plot(t1,z1,'r'),grid plot(t1,z1,'r'),grid
legend('sol euler','sol legend('sol heun','sol
exacta') exacta')
hold off hold off
1.7 1.8
sol euler sol heun
1.6 sol exacta 1.7 sol exacta

1.5 1.6

1.4 1.5

1.3 1.4

1.2 1.3

1.1 1.2

1 1.1

0.9 1

0.8 0.9

0.7 0.8
0 0.5 1 1.5 2 2.5 3 0 0.5 1 1.5 2 2.5 3

El método de la serie de Taylor


𝑑𝑦
Considerando el PVI: 𝑦 ′ = 𝑑𝑡 = 𝑓(𝑡, 𝑦), 𝑐𝑜𝑛 𝑦(𝑎) = 𝑦, donde la incognita 𝑦 = 𝑦(𝑡). Para aplicar este
método debemos recordar la regla de la cadena, con lo cual tenemos:
𝑦′(𝑡) = 𝑓
′′ (𝑡)
𝑦 = 𝑓𝑡 + 𝑓𝑦 𝑦 ′ = 𝑓𝑡 + 𝑓𝑦 𝑓
𝑦 ′′′ (𝑡) = 𝑓𝑡𝑡 + +2𝑓𝑡𝑦 𝑦 ′ + 𝑓𝑦 𝑦 ′′ + 𝑓𝑦𝑦 (𝑦 ′ )2 = 𝑓𝑡𝑡 + +2𝑓𝑡𝑦 𝑓 + 𝑓𝑦𝑦 (𝑓)2 + 𝑓𝑦 (𝑓𝑡 + 𝑓𝑦 𝑓)
𝜕 𝜕
En general se tiene: 𝑦 (𝑛) (𝑡) = 𝑃(𝑛−1) 𝑓(𝑡, 𝑦(𝑡)), 𝑑𝑜𝑛𝑑𝑒 𝑃 = (𝜕𝑡 + 𝑓 𝜕𝑦)
De donde el proceso iterativo del método de Taylor, nos da el siguiente proceso:
𝑑2 ℎ2 𝑑3 ℎ3 𝑑𝑛 ℎ 𝑛
𝑦𝑘+1 = 𝑦𝑘 + 𝑑1 ℎ + + + ⋯+ , 𝑠𝑖𝑒𝑛𝑑𝑜 𝑑𝑗 = 𝑦 (𝑗) (𝑡𝑘 )
2! 3! 𝑛!
(𝑡−𝑦)
Resolver: 𝑦 ′ = 2 , 𝑦(0) = 1 , 𝑑𝑜𝑛𝑑𝑒 𝑙𝑎 𝑠𝑜𝑙𝑢𝑐𝑖𝑜𝑛 𝑒𝑠 𝑦(𝑡) = 3𝑒 −𝑡/2 − 2 + 𝑡.
(𝑡−𝑦) 2−𝑡+𝑦 −2+𝑡−𝑦 2−𝑡+𝑦
Entonces 𝑦 ′ = , 𝑦 (2) = , 𝑦 (3) = , 𝑦 (4) = ,
2 4 8 16

Método de Taylor de orden 4

20
Archivo: heun.m Ejecución en
MatLab
function T4=taylor(df,a,b,ya,M) >>
% Datos: df=[y’ y’’ y’’’ y’’’’], almacenada como una cadena de T4=taylor('df',0,3,1,20
caracteres ’ df ’ )
% a y b son los extremos derecho e izquierdo del intervalo T4 =
0 1.0000
% ya es la condición inicial y(a)
0.1500 0.9332
% M es el número de pasos 0.3000 0.8821
% Resultado: T4=[T’ Y’] siendo T el vector de las abscisas e Y 0.4500 0.8455
el vector de las ordenadas 0.6000 0.8225
h=(b-a)/M; 0.7500 0.8119
0.9000 0.8129
T=zeros(1,M+1); 1.0500 0.8247
Y=zeros(1,M+1); 1.2000 0.8464
1.3500 0.8775
T=a:h:b; 1.5000 0.9171
Y(1)=ya; 1.6500 0.9647
1.8000 1.0197
for j=1:M 1.9500 1.0816
D=feval(df,T(j),Y(j)); 2.1000 1.1498
2.2500 1.2240
2.4000 1.3036
Y(j+1)=Y(j)+h*(D(1)+h*(D(2)/2+h*(D(3)/6+h*D(4)/24)) 2.5500 1.3883
2.7000 1.4777
); 2.8500 1.5715
end 3.0000 1.6694
T4=[T' Y']; >>

Comparando los resultados


T4=taylor('df',0,3,1,10)
plot(T4(:,1),T4(:,2))
hold on
% solucion del PVI: y'=(t-y)/2, y(0)=1
t1=0:0.001:3;z1=3*exp(-t1/2)-2+t1;
plot(t1,z1,'r'),grid
legend('sol Taylor','sol exacta')
hold off
1.8
sol Taylor
1.7 sol exacta

1.6

1.5

1.4

1.3

1.2

1.1

0.9

0.8
0 0.5 1 1.5 2 2.5 3

21

También podría gustarte