Académique Documents
Professionnel Documents
Culture Documents
Considere una función 𝑦 = 𝑓(𝑥), 𝑐𝑜𝑛 𝑥 ∈ [𝑎, 𝑏]. Continúa en este intervalo.
Problema: Hallar una raíz de la ecuación 𝑓(𝑥) = 0
METODOS CERRADOS
METODO DE BISECCION
-1
-2
-3
1 1.5 2 2.5 3 3.5 4 4.5 5
2
04. METODOS NUMERICOS ECUACIONES NO LINEALES Amado Malca Villalobos
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
3
04. METODOS NUMERICOS ECUACIONES NO LINEALES Amado Malca Villalobos
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
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
5
04. METODOS NUMERICOS ECUACIONES NO LINEALES Amado Malca Villalobos
>> 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
04. METODOS NUMERICOS ECUACIONES NO LINEALES Amado Malca Villalobos
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.
7
04. METODOS NUMERICOS ECUACIONES NO LINEALES Amado Malca Villalobos
8
04. METODOS NUMERICOS ECUACIONES NO LINEALES Amado Malca Villalobos
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
04. METODOS NUMERICOS ECUACIONES NO LINEALES Amado Malca Villalobos
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
04. METODOS NUMERICOS ECUACIONES NO LINEALES Amado Malca Villalobos
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
04. METODOS NUMERICOS ECUACIONES NO LINEALES Amado Malca Villalobos
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