Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Sesion 7
Sesion 7
Departamento de Matemática
Laboratorio de Computación para las Aplicaciones de la Matemática en Ingeniería
Laboratorio Mat 270 Análisis
Numérico
SEPTIMA SESIÓN
Aproximación de soluciones
ecuaciones y sistemas
de ecuaciones algebraicas no lineales.
Semana del Lunes 3 al 10 de Junio de 2016
Sugerencias:
Cualquier consulta plantearla a su ayudante de sala o al ayudante coordinador.
2.1 Método General de Punto Fijo
Definición
x n1 g x n , n 0, 1, 2,
Observación
Toda ecuación no lineal f x 0 es equivalente a un problema de punto fijo del tipo g x x para
g x x d x f x en que d x 0 para todo x .
El método de la cuerda de Newton es un método de punto fijo del tipo anterior en que:
1
d x
f ' x0
1
d x
f xn
Ejercicio
El algoritmo de punto fijo puede ser muy rápido. He aquí un ejemplo de ello:
g x x
x sin x 2
e x 12 e x ��
2� cos x 1 x �
x �2 2
sin x 2
clear
gi=inline('[x+(exp(-x)*(-12-exp(x)*x*sin(x^2))/
(2*x^2*cos(x^2)+(1+x)*sin(x^2))),x]');
fplot(gi,[1.8 2.5]); grid on;
axis([1.8 2.2 1.8 2.2])
Ahora calculemos las iteraciones de punto fijo con punto inicial x0 2 y obtengamos el
punto fijo con 25 D.S.
g=inline('x+((exp(-x)*(-12-exp(x)*x*sin(x^2))/
(2*x^2*cos(x^2)+(1+x)*sin(x^2))))');
a=2;
tol=0.5*10^(-25);
digits(25);
for i=1:100,
b=g(a);
iteraciones=[vpa(a),vpa(b)]
if (abs(a-b) <= tol),
break;
end
a=b;
end
x=vpa(b)
Ejercicio:
clear
x=-4:8;
plot(x,0.8*x+0.3,'r',x,x,'b'),
grid on;
title('La identidad en azul')
Ilustraremos de manera gráfica cómo las iteraciones van progresando hasta alcanzar el
punto fijo. La siguiente función permite la formación de la "escalera" que es clásica
cuando la sucesión converge monótonamente.
function anima(g,x0)
xn=x0;
figure(1);
fplot(g,[-4 8]); grid on;
hold on;
fplot(@(x)x,[-4 8],'r');
for i=1:15,
xn1=g(xn);
plot([xn xn1],[xn1 xn1],'k');
pause(0.25);
xn=xn1;
xn1 = g(xn);
plot([xn xn],[xn xn1],'k');
pause(0.25);
end
hold off;
Ejercicio.
Ahora visualizamos "la huida" que se produce con el punto inicial x 0 0.5 .
x0=0.5;
lim=[-4 8];
anima(g,x0);
Ejercicio
Trate usted de visualizar la convergencia o divergencia para el caso siguiente en que si, por ejemplo
parte de x0 4 ocurre "un salto" a los positivos para una posterior convergencia por descenso:
g x 0.1 x 2 1
g=inline('0.2*x+1');
x0=600;
lim=[-4 8];
anima(g,x0);
Ejemplo
Considere el problema de evaluar el trabajo realizado por una fuerza a lo largo de una
trayectoria curva parametrizada por v t x t , y t , donde x t 3 �
cos t e
y t 2�
sin 2 �
t
clear
t=linspace(0,2);
x=3*cos(t);
y=2*sin(2*t);
plot(x,y);
grid on;
axis([-1.5 3.5 -1.5 2.5]);
clear
syms t s g
x=t+3*cos(t);
y=2*sin(2*t)-t;
f=[-x^2 2-y^2]
dv=[diff(x);diff(y)]
dW=mtimes(f,dv)
Esta función se integra entre t 0 y t 2 . La función que define el trabajo realizado
desde t 0 hasta t s está dada por, además se realizan evaluaciones de la funcion de
trabajo desde 0 hasta 2 en Dx 0.5 .
g=int(dW,0,s)
h=inline('-3*s^2*cos(s)-9*s*cos(s)^2-9*cos(s)^3+4*sin(2*s)-
8/3*sin(2*s)^3-4*s*cos(2*s)^2+2*s-2*s^2*sin(2*s)+9','s');
digits(25);
vpa(h(2))
for i=0:0.5:2
h(i)
end
Aplicación del método de Newton (la curva identidad esta en rojo, la función de iteración
en otro color)
f x
Se calcula la raíz doble de la ecuación f x 0 a partir de la ecuación: 0
f ' x
Visualicemos el corte de la identidad con la función de iteración de Newton de esta
última ecuación. El trazado de ésta es horizontal lo cual explica la rapidez al menos
cuadrática de convergencia.
x=1.3:0.01:1.5;
u=f(x)./h(x);
figure(1);
plot(x,f(x),'b',x,u,'k'); grid on;
f xn f ' ' xn f xn
2
x n 1 xn ; n 1, 2,
f ' xn 2 f ' xn f ' xn
figure(1);
ezplot(x,[0.7 1.6])
hold on;
h=findobj(gcf,'type','Line');
set(h,'color','r');
ezplot(gg,[0.7 1.6])
hold off;
grid on;
aux=1;
for k=1:10,
x=vpa(aux);dos = vpa(eval(gg));
dif = vpa(dos - aux);
aux = vpa(dos);
iter(k,:) = vpa([dos dif]);
end
iter
Problema.
x 3.
clear
syms x h y
digits(50);
f=inline('x^7','x');
figure(1);
ezplot(f,[1.99 2.01]);
grid on;
xlabel('X');
ylabel('f(x)=x^7');
x=3;
vpa(limit((f(x+h)-f(x))/h,h,0.01)) %Límite por la derecha
vpa(limit((f(x)-f(x-h))/h,h,0.01)) %Límite por la Izquierda
vpa(limit((f(x+h/2)-f(x-h/2))/h,h,0.01)) %Diferencia Central
w=inline('7*y^6','y');
vpa(w(3))
clear r
vpa(limit((f(x+h)-2*f(x)+f(x-h))/h^2,h,0.001))
w=inline('42*y^5','y');
vpa(w(3))
En la sección anterior dimos gráficamente, aunque no numéricamente, con puntos de partidas para las dos soluciones que se ven ex
x - 1 2 + y - 2 2 = 4
x - 3 2 y - 4 2 = 9
Primero necesitamos definir las funciones que permitan escribir el sistema en la forma f1 0 , f 2 0
clear
syms x y
f1 = (x - 1)^2 + (y - 2)^2 - 4;
f2 = (x - 3)^2 + (y - 4)^2 - 9;
g=f1^2 + f2^2
Observemos que los puntos de partida son buenos puntos
p0 = [0; 3.7]
x=p0(1); y=p0(2);
a = eval(f1);
b = eval(f2);
eval(g)
valor=[a; b]
Veamos el otro:
q0 = [2.7; 1];
x=q0(1);
y=q0(2);
eval(f1)
eval(f2)
Hagamos las primeras iteraciones Newton con el primer punto. Necesitamos la matriz Jacobiana
jac = jacobian([f1;f2])
x=p0(1); y=p0(2);
matriz = eval(inv(jac))
p1 = p0 - matriz*valor
x=p1(1); y=p1(2);
valor = [eval(f1); eval(f2)]
eval(g)
Segunda Iteracion
matriz = eval(inv(jac))
p2 = p1 - matriz*valor
x=p2(1); y=p2(2);
eval(f1)
eval(f2)
eval(g)
Ejemplo
Resolvamos el problema de calcular los coeficientes y nodos de la formula de aproximación gaussiana propuesto en la sección ante
Habíamos establecido el sistema de ecuaciones no lineales a resolver: F 0 en que F esta dado por:
syms x1 x2 x3 w1 w2 w3 x;
X=[x1 x2 x3 w1 w2 w3];
F=[ X(4) + X(5) + X(6) - 2;
X(4)*X(1) + X(5)*X(2) + X(6)*X(3) - int(x,x,-1,1);
X(4)*X(1)^2 + X(5)*X(2)^2 + X(6)*X(3)^2 - int(x^2,x,-1,1);
X(4)*X(1)^3 + X(5)*X(2)^3 + X(6)*X(3)^3 - int(x^3,x,-1,1);
X(4)*X(1)^4 + X(5)*X(2)^4 + X(6)*X(3)^4 - int(x^4,x,-1,1);
X(4)*X(1)^5 + X(5)*X(2)^5 + X(6)*X(3)^5 - int(x^5,x,-1,1)]
G X - J(X) -1 F(X)
J=jacobian(F,X)
Primera Iteración.
Examinemos la matriz jacobiana
B = A' - inv(Jv)*eval(F)
for i=1:10,
v=B;
x1=v(1); x2=v(2); x3=v(3); w1=v(4); w2=v(5); w3=v(6);
Jv = eval(J);
det(Jv);
B = B - inv(Jv)*eval(F);
[v B]
end
Ejercicio.
Problema
Considere las superficies de dos cerros los cuales se cortan en una quebrada por donde circula un río.
¿Como determinar la curva que traza el río?
x=-3:0.25:3;
y=-3:0.25:3;
[X Y]=meshgrid(x,y);
cerro1 = 5-(X.^2+Y.^2);
cerro2 = 10-((X-1).^2+3*Y.^2);
figure(1); surf(X,Y,cerro1)
hold on; surf(X,Y,cerro2); hold off;
a=1;
b=2;
for i=1:10
med=(b+a)/2;
if f(a)*f(med)<0
a=a;
b=med;
elseif f(med)*f(b)<0
a=med;
b=b;
elseif f(med)==0
solucion=med;
end
end
solucion=med
ErrorRelativo=abs(2^(1/2)-solucion)/2^(1/2)
Hagamos lo mismo que se hizo con la bisección, ahora utilizando el método de la Regla
Falsa. Se propone una manera de programar n iteraciones con del método de Regula Falsi
en el intervalo [a,b]. Utilicemos los mismos valores anteriores (a = 1 , b = 2 , n = 10):
a=1;
b=2;
for i=1:10
med=(a*f(b)-b*f(a))/(f(b)-f(a));
if f(a)*f(med)<0
a=a;
b=med;
elseif f(med)*f(b)<0
a=med;
b=b;
elseif f(med)==0
solucion=med;
end
end
solucion=med
ErrorRelativo=abs(2^(1/2)-solucion)/2^(1/2)
Descripción:
f xn
x n 1 x n ; n 1, 2,
f ' x0
Geométricamente:
"la aproximación x x n 1 es la abcisa donde la paralela a la tangente por x0 , f x 0 que pasan por
xn , f xn corta a la horizontal".
Ejemplo
Apliquemos 2 iteraciones del método a la función f x cos x x . Un buen punto de partida es x
4
clear
syms x
f=cos(x)-x;
g=diff(f);
x=pi/4;
df=eval(g);
x1(1)=x;
f1(1)=eval(f);
for i=1:2
x=x-eval(f)/df
x1(i+1)=x;
f1(i+1)=eval(f);
end
Graficamente
ezplot(f,[-3 3])
hold on
grid on
for i=1:3
syms x
y1=df*(x-x1(i))+f1(i);
x=-1:0.05:x1(i);
ezplot(y1,[-3 3])
h=findobj(gcf,'type','Line');
set(h,'color','b');
end
hold off
Problema
Ponga a prueba este método, por ejemplo con el problema de aproximar la solucion de la
ecuacion f(t) = 2 donde :
t
f t 1 1 2 x dx [ 1 , 2 ]
2