You are on page 1of 34

Guin N1+N2 (Pablo Guerrero) 2010/2011

cd('c:\Documents and Settings\matap.AULA\Mis Documentos')


diary Sesion02
format compact
% Primera hora: Resolucion de una ENL y un SENL
type f2_1
function y=f2_1(x)
y=log(x)-3*x+5;
fplot('f2_1',[0 10]), grid
Warning: Log of zero.
> In C:\Documents and Settings\matap.AULA\Mis documentos\f2_1.m
In C:\MATLAB6p1\toolbox\matlab\specgraph\fplot.m at line 96
fplot('f2_1',[0 3]), grid
Warning: Log of zero.
> In C:\Documents and Settings\matap.AULA\Mis documentos\f2_1.m
In C:\MATLAB6p1\toolbox\matlab\specgraph\fplot.m at line 96
fplot('f2_1',[0.5 2.5]), grid
fplot('f2_1',[0 0.001]), grid
Warning: Log of zero.
> In C:\Documents and Settings\matap.AULA\Mis documentos\f2_1.m
In C:\MATLAB6p1\toolbox\matlab\specgraph\fplot.m at line 96
fplot('f2_1',[0 0.01]), grid
Warning: Log of zero.
> In C:\Documents and Settings\matap.AULA\Mis documentos\f2_1.m
In C:\MATLAB6p1\toolbox\matlab\specgraph\fplot.m at line 96
type bipart

at line 2

at line 2

at line 2

at line 2

% METODO DE BIPARTICION
% Function [x,e,tol]=bipart(F,a,b,n)
% F= nombre de la funcion a resolver
% a= extremo inferior del intervalo inicial
% b=
"
superior "
"
"
% n= numero de iteraciones
% x= solucion devuelta
% e= condicion de error(e=0, correcto. e=1, intervalo inicial incorrecto)
% tol= cota de |x'-x| (x'=solucion aproximada, x=solucion verdadera)
function [x,e,tol]=bipart(F,a,b,n)
FA=feval(F,a);FB=feval(F,b);x=(a+b)/2;FX=feval(F,x);e=0;
if FA*FB>0,e=1,break,end
if FA==0,x=a,break,end
if FB==0,x=b,break,end
% Iteraciones
for k=1:n
FX=feval(F,x);if FX==0,break,end
if FA*FX<0,
b=x;FB=feval(F,b);
else
a=x;FA=feval(F,a);
end
x=(a+b)/2;
end
tol=(b-a)/2;
edit bipart
fschange('C:\Documents and Settings\matap.AULA\Mis documentos\bipart.m');
clear bipart
type bipart
%
%
%
%
%
%

METODO DE BIPARTICION
Function [x,e,tol]=bipart(F,a,b,n)
F= nombre de la funcion a resolver
a= extremo inferior del intervalo inicial
b=
"
superior "
"
"
n= numero de iteraciones
Pgina 1 de 20

Guin N1+N2 (Pablo Guerrero) 2010/2011


% x= solucion devuelta
% e= condicion de error(e=0, correcto. e=1, intervalo inicial incorrecto)
% tol= cota de |x'-x| (x'=solucion aproximada, x=solucion verdadera)
function [x,e,tol,k]=bipart(F,a,b,n)
FA=feval(F,a);FB=feval(F,b);x=(a+b)/2;FX=feval(F,x);e=0;
if FA*FB>0,e=1,return,end
if FA==0,x=a,return,end
if FB==0,x=b,return,end
% Iteraciones
for k=1:n
FX=feval(F,x);if abs(FX)<=1e-12, break, end
if FA*FX<0,
b=x;FB=feval(F,b);
else
a=x;FA=feval(F,a);
end
x=(a+b)/2;
end
tol=(b-a)/2;
realmin
ans =
2.2251e-308
realmin==0
ans =
0
format long; [x,e,tol,k]=bipart('f2_1',1,2,10)
x =
1.87646484375000
e =
0
tol =
4.882812500000000e-004
k =
10
eps = 0.5e-7
% Comprobar d=7 decimales correctos
eps =
5.000000000000000e-008
f2_1(x-eps)
ans =
-4.803490404547972e-006
f2_1(x+eps)
ans =
-5.050198705447428e-006
% no tienes garantizados 7 decimales correctos
format long; [x,e,tol,k]=bipart('f2_1',1,2,30)
x =
1.87646284652874
e =
0
tol =
4.656612873077393e-010
k =
30
f2_1(x-eps)
ans =
1.238196380981549e-007
f2_1(x+eps)
ans =
-1.228886059578827e-007
% ahora si tienes garantizados 7 decimales correctos
2^40
ans =
1.099511627776000e+012
Pgina 2 de 20

Guin N1+N2 (Pablo Guerrero) 2010/2011


2^45
ans =
3.518437208883200e+013
2^46
ans =
7.036874417766400e+013
2^47
ans =
1.407374883553280e+014
log(10^14)/log(2)
ans =
46.50699332842308
14/log10(2)
ans =
46.50699332842308
[x,e,tol,k]=bipart('f2_1',1,2,47)
x =
1.87646284671746
e =
0
tol =
4.547473508864641e-013
k =
41
eps = 0.5e-14
eps =
5.000000000000000e-015
f2_1(x-eps)
ans =
-5.950795411990839e-014
f2_1(x+eps)
ans =
-8.437694987151190e-014
edit bipart
fschange('C:\Documents and Settings\matap.AULA\Mis documentos\bipart.m');
clear bipart
type bipart
% METODO DE BIPARTICION
% Function [x,e,tol]=bipart(F,a,b,n)
% F= nombre de la funcion a resolver
% a= extremo inferior del intervalo inicial
% b=
"
superior "
"
"
% n= numero de iteraciones
% x= solucion devuelta
% e= condicion de error(e=0, correcto. e=1, intervalo inicial incorrecto)
% tol= cota de |x'-x| (x'=solucion aproximada, x=solucion verdadera)
function [x,e,tol,k]=bipart(F,a,b,n)
FA=feval(F,a);FB=feval(F,b);x=(a+b)/2;FX=feval(F,x);e=0;
if FA*FB>0,e=1,return,end
if FA==0,x=a,return,end
if FB==0,x=b,return,end
% Iteraciones
for k=1:n
FX=feval(F,x);if abs(FX)<=1e-16, break, end
if FA*FX<0,
b=x;FB=feval(F,b);
else
a=x;FA=feval(F,a);
end
x=(a+b)/2;
end
tol=(b-a)/2;
Pgina 3 de 20

Guin N1+N2 (Pablo Guerrero) 2010/2011


[x,e,tol,k]=bipart('f2_1',1,2,47)
x =
1.87646284671743
e =
0
tol =
3.552713678800501e-015
k =
47
f2_1(x-eps)
ans =
1.953992523340276e-014
f2_1(x+eps)
ans =
-5.329070518200751e-015
edit ej1b_intento1
fschange('C:\Documents and Settings\matap.AULA\Mis documentos\ej1b_intento1.m');
clear ej1b_intento1
type ej1b_intento1
format long
% Primer intento
clear
x1=1;
for k=1:10
x1=(log(x1)+5)/3;
end
x1
pause
disp('A continuacin comprobamos los dgitos correctos')
eps=0.5e-6
feval('f2_1',x1+eps)*feval('f2_1',x1-eps)
ej1b_intento1
x1 =
1.87646280702095
A continuacin comprobamos los dgitos correctos
eps =
5.000000000000000e-007
ans =
-1.512032769899686e-012
% Se tienen 7 digitos significativos redondeados correctos
edit ej1b_intento2
fschange('C:\Documents and Settings\matap.AULA\Mis documentos\ej1b_intento2.m');
clear ej1b_intento2
type ej1b_intento2
format long
% Segundo intento
clear
x1=1;
for k=1:10
x1=exp(3*x1-5);
end
x1
pause
disp('A continuacin comprobamos los dgitos correctos')
eps=0.5e-9
feval('f2_1',x1+eps)*feval('f2_1',x1-eps)
disp('Tiene 7 dgitos correctos?: en caso contrario arreglar.'),
ej1b_intento2
x1 =
0.00687843098855
Pgina 4 de 20

Guin N1+N2 (Pablo Guerrero) 2010/2011


A continuacin comprobamos los dgitos correctos
eps =
5.000000000000000e-010
ans =
-5.068157941261730e-015
Tiene 7 dgitos correctos?: en caso contrario arreglar.
syms t real
f = 2*(1+t)+4*pi*sin(pi*t)
f =
2+2*t+4*pi*sin(pi*t)
diff(f)
ans =
2+4*pi^2*cos(pi*t)
type f3
function y=f3(x)
y=2*(1+x)+4*pi*sin(pi*x);
type df3
function dy=df3(x)
dy=2+4*pi^2*cos(pi*x);
type newton
% Metodo de Newton en una variable
function [x,e,k]=newton(F,DF,x0,n,TOL)
% F =funcion a resolver (F(x)=0)
% DF =derivada de F(x)
% x0 =punto inicial
% n =numero de iteraciones
% TOL=tolerancia (e=0, solo si |F(x)|<TOL, tras las n iteraciones)
% x =valor tras las n soluciones (solucion obtenida)
% e =condicion de error (e=0 si |F(x)|<TOL, e=1 en caso contrario,
%
e=2 si DF(x)=0 en algn paso, e=3 si se produce overflow.
x=x0;e=1
for k=1:n
Fx=feval(F,x);DFx=feval(DF,x);
if DFx==0,e=2;break,end
xant=x
x=x-Fx/DFx;
if xant-x<TOL;end
if isnan(x)|isinf(x),e=3,break,end
end
if abs(feval(F,x))<TOL,e=0,end
edit newton
fschange('C:\Documents and Settings\matap.AULA\Mis documentos\newton.m');
clear newton
type newton
% Metodo de Newton en una variable
function [x,e,k]=newton(F,DF,x0,n,TOL)
% F =funcion a resolver (F(x)=0)
% DF =derivada de F(x)
% x0 =punto inicial
% n =numero de iteraciones
% TOL=tolerancia (e=0, solo si |F(x)|<TOL, tras las n iteraciones)
% x =valor tras las n soluciones (solucion obtenida)
% e =condicion de error (e=0 si |F(x)|<TOL, e=1 en caso contrario,
%
e=2 si DF(x)=0 en algn paso, e=3 si se produce overflow.
x=x0;e=1;
for k=1:n
Fx=feval(F,x);DFx=feval(DF,x);
if DFx==0,e=2;break,end
Pgina 5 de 20

Guin N1+N2 (Pablo Guerrero) 2010/2011


xant=x;
x=x-Fx/DFx;
if abs(xant-x)<TOL, break; end
if isnan(x)|isinf(x),e=3,break,end
end
if abs(feval(F,x))<TOL,e=0,end
[x,e,k]=newton('f3','df3',1.25,100,0.5e-5)
e =
0
x =
1.10895621086418
e =
0
k =
4
fplot('f3',[-2 2]), grid
fplot('f3',[-10 10]), grid
% Un ejemplo de sistema de ENL
syms x y z real
f1 = 2*x^3-4*x-y-18
f1 =
2*x^3-4*x-y-18
f2 = -x+2*y^3-4*y-z-54
f2 =
-x+2*y^3-4*y-z-54
f3 = -y+2*z^3-4*z-133.2
f3 =
-y+2*z^3-4*z-666/5
F = [f1;f2;f3]
F =
[
2*x^3-4*x-y-18]
[ -x+2*y^3-4*y-z-54]
[ -y+2*z^3-4*z-666/5]
JF = jacobian(F)
JF =
[ 6*x^2-4,
-1,
0]
[
-1, 6*y^2-4,
-1]
[
0,
-1, 6*z^2-4]
type f5
function z=f5(u)
x=u(1);
y=u(2);
z=u(3);
z=[2*x.^3-4*x-y-18;
-x+2*y.^3-4*y-z-54;
-y+2*z.^3-4*z-133.2];
type jf5
function z=jf5(u)
x=u(1);
y=u(2);
z=u(3);
z=[6*x.^2-4 -1
-1
6*y.^2-4
0
-1

0;
-1;
6*z.^2-4];

type newton2
function [z,e]=newton2(F,J,x0,n)
% F = sistema a resolver
% J = jacobiano
% x0 = punto inicial
Pgina 6 de 20

Guin N1+N2 (Pablo Guerrero) 2010/2011


% n = numero de iteraciones
% z = solucion obtenida
% e = condicion de error
e=1;
x=x0;
for k=1:n,
S=feval(F,x);
A=feval(J,x);
incx=A\(-S);
x=x+incx;
% x=x-S*inv(A) %Sustituye a las 2 anteriores
end
if isnan(x)|isinf(x),e=1;else,e=0;end
z=x;
[x,e]=newton2('f5','jf5',[3;4;5],100)
x =
2.50249039110781
3.33352116372087
4.25002175953674
e =
0
format short
% El residual de un SENL es F(x^*)
f5(x)
ans =
1.0e-013 *
0
0
-0.5684
norm(ans)
ans =
5.6843e-014
edit newton2
fschange('C:\Documents and Settings\matap.AULA\Mis documentos\newton2.M');
type newton2
function [z,e,k]=newton2(F,J,x0,n)
% F = sistema a resolver
% J = jacobiano
% x0 = punto inicial
% n = numero de iteraciones
% z = solucion obtenida
% e = condicion de error
e=1;
x=x0;
for k=1:n
S=feval(F,x);
A=feval(J,x);
incx=A\(-S);
if norm(incx)<1e-6, break; end;
x=x+incx;
% x=x-S*inv(A) %Sustituye a las 2 anteriores
end
if isnan(x)|isinf(x),e=1;else,e=0;end
z=x;
[x,e,k]=newton2('f5','jf5',[3;4;5],100)
x =
2.5025
3.3335
4.2500
e =
0
Pgina 7 de 20

Guin N1+N2 (Pablo Guerrero) 2010/2011


k =
5
f5(x)
ans =
1.0e-009 *
0.3650
0.4818
0.1148
norm(ans)
ans =
6.1523e-010
% Segunda hora: Optimizacion
% Funciones de IR en IR
% E1
% f = x^2 - 5*sin(x) en [-pi,pi]
% fprima = 2*x - 5*cos(x)
% fsegunda = 2 + 5*sin(x)
type p3_1
fplot('x^2-5*sin(x)',[-pi, pi]), grid
disp('Se observa que el mnimo es interior prox a 1 y el/los mximos son extremos.')
% Para resolver g(x)=0
% Usamos Newton: x=x-g(x)/g'(x)
% Para calcular puntos crticos: f'(x)=0
% Por tanto Newton: x=x-f'(x)/f''(x)
% f'(x)=2x-5cos(x)%
% f''(x)=2+5*sin(x)%
dF=inline('2*x-5*cos(x)');
d2F=inline('2+5*sin(x)');
% AYUDA: Puedes usar la orden diff de matlab para calcular derivadas
x=1;
for k=1:20;
x=x-(dF(x))/(d2F(x));
end
[x,x^2-5*sin(x)]
[-pi,pi^2-5*sin(-pi)]
[pi,pi^2-5*sin(pi)]
fplot('x^2-5*sin(x)',[-pi, pi]), grid
df=inline('2*x-5*cos(x)')
df =
Inline function:
df(x) = 2*x-5*cos(x)
d2f=inline('2+5*sin(x)')
d2f =
Inline function:
d2f(x) = 2+5*sin(x)
format long; x=1
x =
1
for k=1:10, x = x - df(x)/d2f(x), end;
x =
1.11301295606989
x =
1.11051157231207
x =
1.11051050358131
x =
1.11051050358111
x =
1.11051050358111
x =
1.11051050358111
Pgina 8 de 20

Guin N1+N2 (Pablo Guerrero) 2010/2011


x =
1.11051050358111
x =
1.11051050358111
x =
1.11051050358111
x =
1.11051050358111
[x, x^2 - 5*sin(x)]
% [minimo, valor minimo]
ans =
1.11051050358111 -3.24639427269154
df(x)
ans =
-4.440892098500626e-016
d2f(x)
ans =
6.47962785125551
% ahora ya tengo garantizado que en x hay un minimo local estricto
% ... y por la forma de la funcion, es tambien minimo global
% Para los maximos globales RESTRINGIDOS se hace ...
x = -pi; [x, x^2 - 5*sin(x)]
% [maximo, valor maximo]
ans =
-3.14159265358979
9.86960440108936
x = pi; [x, x^2 - 5*sin(x)]
% [maximo, valor maximo]
ans =
3.14159265358979
9.86960440108936
% Luego maximos globales restringidos en -pi y en pi
% OJO: en los RESTRINGIDOS no tiene por que anularse la derivada!!!
df(-pi), df(pi)
ans =
-1.28318530717959
ans =
11.28318530717959
fplot(df,[-3.3 3.3]), grid on
% la grafica de la derivada
% En Matlab para resolver una ENL se usa el metodo de Brent (fzero)
fzero(df,3)
% o bien fzero('2*x-5*cos(x)',3)
ans =
1.11051050358111
% E2
syms x real
f = 2*exp(-x)*sin(x)
f =
2*exp(-x)*sin(x)
diff(f)
ans =
-2*exp(-x)*sin(x)+2*exp(-x)*cos(x)
solve(ans)
ans =
1/4*pi
ezplot(f,[0 8]); grid
f = '2*exp(-x).*sin(x)'; fplot(f,[0 8]); grid
% Para minimizacion irrestringida en una variable Matlab tiene fmin
xmin = fmin(f,2,5)
Warning: FMIN is obsolete and has been replaced by FMINBND.
FMIN now calls FMINBND which uses the following syntax:
[X,FVAL,EXITFLAG,OUTPUT] = FMINBND(FUN,x1,x2,OPTIONS,P1,P2,...)
Use OPTIMSET to define optimization options, or type
'edit fmin' to view the code used here. FMIN will be
removed in the future; please use FMINBND with the new syntax.
> In C:\MATLAB6p1\toolbox\matlab\funfun\fmin.m at line 62
xmin =
3.92698936464428
emin = xmin - 5*pi/4
Pgina 9 de 20

Guin N1+N2 (Pablo Guerrero) 2010/2011


emin =
-1.452342966334896e-006
x = xmin; ymin = eval(f)
ymin =
-0.02786407019533
% ymin es el valor minimo, xmin es el minimo
g = '-2*exp(-x).*sin(x)'; fplot(g,[0 8]); grid
xmax = fmin(g,0,3)
Warning: FMIN is obsolete and has been replaced by FMINBND.
FMIN now calls FMINBND which uses the following syntax:
[X,FVAL,EXITFLAG,OUTPUT] = FMINBND(FUN,x1,x2,OPTIONS,P1,P2,...)
Use OPTIMSET to define optimization options, or type
'edit fmin' to view the code used here. FMIN will be
removed in the future; please use FMINBND with the new syntax.
> In C:\MATLAB6p1\toolbox\matlab\funfun\fmin.m at line 62
xmax =
0.78541194448879
emax = xmax - pi/4
emax =
1.378109134475558e-005
x = xmax; ymax = eval(f) % o bien ymax = -eval(g)
ymax =
0.64479388376721
% ymax es el valor maximo, xmax es el maximo ...
% ... siempre y cuando se verifiquen las condiciones ...
% ... suficientes de optimalidad de primer y segundo orden
% Funciones de IR^n en IR (i.e., optimizacion de campos escalares)
% E4
syms x1 x2 real
f = (x1-2)^4 + (x1-2*x2)^2
f =
(x1-2)^4+(x1-2*x2)^2
nablaf = jacobian(f)'
nablaf =
[ 4*(x1-2)^3+2*x1-4*x2]
[
-4*x1+8*x2]
nabla2f = jacobian(nablaf)'
nabla2f =
[ 12*(x1-2)^2+2,
-4]
[
-4,
8]
subs(nablaf,{x1,x2},{2,1})
ans =
0
0
subs(nabla2f,{x1,x2},{2,1})
ans =
[ 2, -4]
[ -4, 8]
double(ans)
ans =
2
-4
-4
8
eig(ans)
ans =
0
10
type f5p3
function z=f5p3(u)
x1=u(1); x2=u(2);
z=(x1-2).^4+(x1-2*x2).^2;
type df5p3
Pgina 10 de 20

Guin N1+N2 (Pablo Guerrero) 2010/2011


function dY=df5p3(u)
x1=u(1); x2=u(2);
dY=[4*(x1-2).^3+2*(x1-2*x2);
-4*(x1-2*x2) ];
type d2f5p3
function d2Y=d2f5p3(u)
x1=u(1); x2=u(2);
d2Y=[ 12*(x1-2).^2+2 -4;
-4 8];
type p3_5
% Localizamos el mximo de la funcin. Est
[x1,x2]=meshgrid(0:0.1:3,0:0.1:3);
contour(x1,x2,(x1-2).^4+(x1-2*x2).^2,0:40);
meshc(x1,x2,(x1-2).^4+(x1-2*x2).^2);
pause;

en [0,3]^T ?

% Utilizando fmins de MATLAB


xmin=fmins('f5p3',[3 3]'),
ymin=f5p3(xmin)
% Utilizando newton2.m
xf=newton2('df5p3','d2f5p3',[3 3]',100)
yf=f5p3(xf)
[xf,e,k]=newton2('df5p3','d2f5p3',[3;3],100)
xf =
2.00000231781944
1.00000115890972
e =
0
k =
33
yf = f5p3(xf)
% yf valor minimo?, xf minimo?
yf =
2.886146738239224e-023
df5p3(xf), norm(ans)
ans =
1.0e-016 *
0.49807964890282
0
ans =
4.980796489028181e-017
d2f5p3(xf), eig(ans)
ans =
2.00000000006447 -4.00000000000000
-4.00000000000000
8.00000000000000
ans =
0.00000000005157
10.00000000001289
% Pintar campos escalares
type p3_5
% Localizamos el mximo de la funcin. Est
[x1,x2]=meshgrid(0:0.1:3,0:0.1:3);
contour(x1,x2,(x1-2).^4+(x1-2*x2).^2,0:40);
meshc(x1,x2,(x1-2).^4+(x1-2*x2).^2);
pause;

en [0,3]^T ?

% Utilizando fmins de MATLAB


Pgina 11 de 20

Guin N1+N2 (Pablo Guerrero) 2010/2011


xmin=fmins('f5p3',[3 3]'),
ymin=f5p3(xmin)
% Utilizando newton2.m
xf=newton2('df5p3','d2f5p3',[3 3]',100)
yf=f5p3(xf)
[x1,x2]=meshgrid(0:0.1:3,0:0.1:3);
meshc(x1,x2,(x1-2).^4+(x1-2*x2).^2); % CON OPERADORES ELEMENTO A ELEMENTO
Warning: Unrecognized OpenGL version, defaulting to 1.0.
Warning: Unrecognized OpenGL version, defaulting to 1.0.
Warning: Unrecognized OpenGL version, defaulting to 1.0.
surf(x1,x2,(x1-2).^4+(x1-2*x2).^2);
% CON OPERADORES ELEMENTO A ELEMENTO
Warning: Unrecognized OpenGL version, defaulting to 1.0.
Warning: Unrecognized OpenGL version, defaulting to 1.0.
Warning: Unrecognized OpenGL version, defaulting to 1.0.
surfc(x1,x2,(x1-2).^4+(x1-2*x2).^2); % CON OPERADORES ELEMENTO A ELEMENTO
Warning: Unrecognized OpenGL version, defaulting to 1.0.
Warning: Unrecognized OpenGL version, defaulting to 1.0.
Warning: Unrecognized OpenGL version, defaulting to 1.0.
[c,h]=contour(x1,x2,(x1-2).^4+(x1-2*x2).^2,15);
% 15 curvas de nivel
[c,h]=contour(x1,x2,(x1-2).^4+(x1-2*x2).^2,[0 0]); % La curva de nivel 0
[c,h]=contour(x1,x2,(x1-2).^4+(x1-2*x2).^2,0:40); % Las curvas de 0 a 40
clabel(c,h,0:5:40)
% Para buscar minimos locales en varias variables existe fmins (metodo Nelder-Mead)
xmin=fmins('f5p3',[3;3]), ymin=f5p3(xmin)
Warning: FMINS is obsolete and has been replaced by FMINSEARCH.
FMINS now calls FMINSEARCH which uses the following syntax:
[X,FVAL,EXITFLAG,OUTPUT] = FMINSEARCH(FUN,X0,OPTIONS,P1,P2,...)
Use OPTIMSET to define optimization options, or type
'edit fmins' to view the code used here. FMINS will be
removed in the future; please use FMINSEARCH with the new syntax.
> In C:\MATLAB6p1\toolbox\matlab\funfun\fmins.m at line 66
xmin =
2.00011408977858
1.00005705701588
ymin =
7.576448641400849e-016
% E5 (con minimo, no con maximo)
syms x y real
f = (3-x+y)^4 + (4-y)^2 + x - y
f =
(3-x+y)^4+(4-y)^2+x-y
nablaf = jacobian(f)'
nablaf =
[
-4*(3-x+y)^3+1]
[ 4*(3-x+y)^3-9+2*y]
nabla2f = jacobian(nablaf)'
nabla2f =
[
12*(3-x+y)^2, -12*(3-x+y)^2]
[ -12*(3-x+y)^2, 12*(3-x+y)^2+2]
type f4p3
function z=f4p3(u)
x=u(1);y=u(2); A=4*(3-x+y)^3;
z=[-A+1;
A-2*(4-y)-1];
type jf4p3
function u=jf4p3(X)
x=X(1);y=X(2); A=12*(3-x+y)^2;
u=[A -A;
Pgina 12 de 20

Guin N1+N2 (Pablo Guerrero) 2010/2011


-A A+2];
[x,y]=meshgrid(-10:0.1:10,-10:0.1:10);
contour(x,y,(3-x+y)^4+(4-y)^2+x-y,150);
% Asi esta MAL !!!!!!
contour(x,y,(3-x+y).^4+(4-y).^2+x-y,150); % Asi esta BIEN !!!!!!
[x,y]=meshgrid(5:0.1:7,3:0.1:5);
contour(x,y,(3-x+y).^4+(4-y).^2+x-y,150); % Asi esta BIEN !!!!!!
[xf,e,k]=newton2('f4p3','jf4p3',[-7;-4],25)
xf =
6.37003947237539
4.00000000000000
e =
0
k =
10
hold on; plot(xf(1),xf(2),'o'); hold off;
f4p3(xf), norm(ans)
ans =
1.0e-007 *
-0.12749253652800
0.12749253652800
ans =
1.803016742592385e-008
jf4p3(xf), eig(ans)
ans =
4.76220319638096 -4.76220319638096
-4.76220319638096
6.76220319638096
ans =
0.89613915204071
10.62826724072120
H = jf4p3(xf); det(H(1:1,1:1)), det(H(1:2,1:2))
ans =
4.76220319638096
ans =
9.52440639276191
% luego efectivamente habia un minimo local estricto en xf
[xf,e,k]=newton2('f4p3','jf4p3',[-7;4],25)
xf =
6.37003946643627
4.00000000000000
e =
0
k =
12
H = jf4p3(xf), det(H(1:1,1:1)), det(H(1:2,1:2))
H =
4.76220328617476 -4.76220328617476
-4.76220328617476
6.76220328617476
ans =
4.76220328617476
ans =
9.52440657234952
% Tercera hora: Algebra Lineal Numerica
help lu
LU

LU factorization.
[L,U] = LU(X) stores an upper triangular matrix in U and a
"psychologically lower triangular matrix" (i.e. a product
of lower triangular and permutation matrices) in L, so
that X = L*U. X can be rectangular.
[L,U,P] = LU(X) returns lower triangular matrix L, upper
triangular matrix U, and permutation matrix P so that
P*X = L*U.
Pgina 13 de 20

Guin N1+N2 (Pablo Guerrero) 2010/2011


LU(X), with one output argument, returns the output from
LAPACK'S DGETRF or ZGETRF routine.
LU(X,THRESH) controls pivoting in sparse matrices, where
THRESH is a pivot threshold in [0,1]. Pivoting occurs
when the diagonal entry in a column has magnitude less than
THRESH times the magnitude of any sub-diagonal entry in that
column. THRESH = 0 forces diagonal pivoting. THRESH = 1 is
the default.
See also LUINC, QR, RREF.
type gausspar
function [x,e]=gausspar(A,B)
[m,n]=size(A);
[m1,n1]=size(B);
% Comprobacion errores
if m~=n, e=1;return,end
if m1~=m, e=1;return,end
C=[A B];
% Bucle pincipal
for k=1:m-1,
% Intercambio de filas
[i,ii]=max(abs(C(k:m,k)));ii=ii+k-1;
if ii~=k, d=C(k,:);C(k,:)=C(ii,:);C(ii,:)=d;end
% Triangularizacion
for l=k+1:m,
coef=C(l,k)/C(k,k);
C(l,:)=C(l,:)-coef*C(k,:);
end
end
x=sustreg(C(:,1:m),C(:,m+1:m+n1));
type sustreg
function [x,e]=sustreg(A,b)
[m,n]=size(A);[m1,n1]=size(b);
if m~=n, e=1;return,end
if n~=m1,e=1;return,end
for k=n:-1:1,
x(k,:)=b(k,:)/A(k,k);
for t=1:k-1,
b(t,:)=b(t,:)-A(t,k)*x(k,:);
end
end
type doolittle
function x=doolittle(A,b)
[L,U,P]=lu(A);
bb=P*b;
y=sustprog(L,bb);
x=sustreg(U,y);
type solqr
function x=solqr(A,b)
[m,n]=size(A);
[Q,R]=qr(A);
Pgina 14 de 20

Guin N1+N2 (Pablo Guerrero) 2010/2011


bb=Q'*b;
x=sustreg(R(1:n,1:n),bb(1:n,:));
% en vez de x=sustreg(R(1:n,1:n),bb(1:n,:));
% se puede hacer x=R(1:n,1:n)\bb(1:n);
% E6
dir
.
..
Archivos_MATLAB_Pract2.zip
Pizarra.pdf
Sesion03
TkitP02b.pdf
TkitP03.pdf
cholesky.m
d2f5p3.m
desktop.ini
df5p3.m
clear all
whos
sistema
whos
Name
A
b

doolittle.m
f4p3.m
f5p3.m
gauss.m
gaussjor.m
gausspar.m
gausstot.m
jf4p3.m
metpoten.m
newton2.M
p3_1.m

Size

Bytes

10x10
10x1

800
80

p3_4.m
p3_5.m
p3_6.m
practica_3.zip
sistema.m
sistema2.m
sistemasobre.m
solqr.m
sustprog.m
sustreg.m

Class
double array
double array

Grand total is 110 elements using 880 bytes


x = A\b; r = b - A*x;
% residual definido segun [Faires & Burden, 2003]
norm(r)
ans =
1.227599960444820e-014
% Residual pequeo indica cercania a la solucion?
% Si, siempre y cuando el sistema no sea muy mal condicionado
cond(A)
ans =
91.33843294546598
% E8 (sistemas sobredeterminados)
b = [1 3 5 -2]'
b =
1
3
5
-2
A1 = [1 1 1; 0 0 1; 1 -1 0; 1 0 1]
A1 =
1
1
1
0
0
1
1
-1
0
1
0
1
A2 = [1 2;1 2;1 2;1 2]
A2 =
1
2
1
2
1
2
1
2
A3 = [1 4 7 2; 2 5 8 5; 3 6 0 8]
A3 =
1
4
7
2
2
5
8
5
3
6
0
8
Pgina 15 de 20

Guin N1+N2 (Pablo Guerrero) 2010/2011


rank(A1), rank(A2), rank(A3)
ans =
3
ans =
1
ans =
3
A1'*A1, A2'*A2, A3*A3', A3'*A3
ans =
3
0
2
0
2
1
2
1
3
ans =
4
8
8
16
ans =
70
88
43
88
118
76
43
76
109
ans =
14
32
23
36
32
77
68
81
23
68
113
54
36
81
54
93
eig(A1'*A1), eig(A2'*A2), eig(A3*A3'), eig(A3'*A3)
ans =
0.60861761936910
2.22713444217069
5.16424793846021
ans =
0
20
ans =
1.0e+002 *
0.00675884844813
0.54517643519882
2.41806471635305
ans =
1.0e+002 *
-0.00000000000000
0.00675884844813
0.54517643519882
2.41806471635305
A1\b, norm(ans), pinv(A1)*b, norm(ans)
ans =
0.57142857142857
-2.57142857142857
1.14285714285714
ans =
2.87139303460597
ans =
0.57142857142857
-2.57142857142857
1.14285714285714
ans =
2.87139303460597
A2\b, norm(ans), pinv(A2)*b, norm(ans)
Warning: Rank deficient, rank = 1 tol =
3.5527e-015.
ans =
0
0.87500000000000
ans =
0.87500000000000
ans =
Pgina 16 de 20

Guin N1+N2 (Pablo Guerrero) 2010/2011


0.35000000000000
0.70000000000000
ans =
0.78262379212493
solqr(A1,b), norm(ans), solqr(A2,b), norm(ans)
ans =
0.57142857142857
-2.57142857142857
1.14285714285714
ans =
2.87139303460597
ans =
1.0e+015 *
-2.25179981368525
1.12589990684262
ans =
2.517588727560786e+015
% E12
clear all
whos
sistema2
A =
Columns 1 through 4
6.27000000000000
0.32000000000000
1.35000000000000
1.32000000000000
0.32000000000000
5.11000000000000
0.01000000000000 -1.33000000000000
1.35000000000000
0.01000000000000
7.77000000000000
1.11000000000000
1.32000000000000 -1.33000000000000
1.11000000000000
4.00000000000000
2.10000000000000
1.10000000000000
2.21000000000000
0.05000000000000
Column 5
2.10000000000000
1.10000000000000
2.21000000000000
0.05000000000000
6.50000000000000
b =
2.76000000000000
2.23000000000000
-1.23000000000000
3.78000000000000
7.10000000000000
whos
Name
Size
Bytes Class
A
b

5x5
5x1

200
40

double array
double array

Grand total is 30 elements using 240 bytes


[V,D]=eig(A)
V =
Columns 1 through 4
0.35655213400190 -0.35938344805588
0.71352189189924
-0.40804491347753 -0.55077205800361 -0.13822563167003
0.14464790921075 -0.25365422213147 -0.63381920720811
-0.81472269770598 -0.05426625872723
0.26036320986760
-0.14722035364534
0.70725411709269
0.04758567065268
Column 5
0.48434770423215
0.09121964495284
0.64088358100998
0.17874401841561
0.56071836892703
D =
Columns 1 through 4
Pgina 17 de 20

0.00281499338042
0.70902901198165
-0.31980926522185
-0.48326356559803
0.40180629166842

Guin N1+N2 (Pablo Guerrero) 2010/2011


2.56816716088315
0
0
0
0
3.77984100470621
0
0
0
0
5.63052587643107
0
0
0
0
6.63663734490201
0
0
0
0
Column 5
0
0
0
0
11.03482861307755
D(5,5)
ans =
11.03482861307755
V(:,5), norm(ans), norm(A*V-V*D)
ans =
0.48434770423215
0.09121964495284
0.64088358100998
0.17874401841561
0.56071836892703
ans =
1
ans =
4.909227278057077e-015
% E13: El sistema sobredeterminado es Ma=y, con y=sen(x), x vector columna
x = (0:0.1:1)'; y = sin(x)
y =
0
0.0998
0.1987
0.2955
0.3894
0.4794
0.5646
0.6442
0.7174
0.7833
0.8415
M = fliplr(vander(x)); M(:,4:end) = []
% EJERCICIO: ir incrementando el 4
M =
1.0000
0
0
1.0000
0.1000
0.0100
1.0000
0.2000
0.0400
1.0000
0.3000
0.0900
1.0000
0.4000
0.1600
1.0000
0.5000
0.2500
1.0000
0.6000
0.3600
1.0000
0.7000
0.4900
1.0000
0.8000
0.6400
1.0000
0.9000
0.8100
1.0000
1.0000
1.0000
format long
aDI = M\y, norm(aDI)
aDI =
-0.00531589475039
1.08657753288357
-0.23475859938224
ans =
1.11166118655292
aPS = pinv(M)*y, norm(aPS)
aPS =
-0.00531589475039
1.08657753288357
Pgina 18 de 20

Guin N1+N2 (Pablo Guerrero) 2010/2011


-0.23475859938224
ans =
1.11166118655292
aQR = solqr(M,y), norm(aQR)
aQR =
-0.00531589475039
1.08657753288357
-0.23475859938224
ans =
1.11166118655292
[Q,R] = qr(M), c = Q'*y, aQR = R(1:3,1:3)\c(1:3) % Lo mismo que solqr y sobredqr
Q =
Columns 1 through 4
-0.30151134457776 -0.47673129462280
0.51209155649919 -0.07597291962053
-0.30151134457776 -0.38138503569824
0.20483662259968 -0.02391753073257
-0.30151134457776 -0.28603877677368 -0.03413943709995 -0.34738516752142
-0.30151134457776 -0.19069251784912 -0.20483662259968
0.88911449839737
-0.30151134457776 -0.09534625892456 -0.30725493389951 -0.13750870067530
-0.30151134457776 -0.00000000000000 -0.34139437099946 -0.14484959252064
-0.30151134457776
0.09534625892456 -0.30725493389951 -0.13290817713865
-0.30151134457776
0.19069251784912 -0.20483662259968 -0.10168445452934
-0.30151134457776
0.28603877677368 -0.03413943709995 -0.05117842469271
-0.30151134457776
0.38138503569824
0.20483662259968
0.01860991237125
-0.30151134457776
0.47673129462280
0.51209155649919
0.10768055666254
Columns 5 through 8
0.00619444923634
0.03924553795239
0.02318034652763 -0.04200112503796
0.11203216294592
0.22125543881471
0.30375229687379
0.35952273712317
-0.40814801840302 -0.41413092921796 -0.36533389996626 -0.26175693064790
-0.11156515281398 -0.10531002234856 -0.09212011020638 -0.07199541638743
0.84513585581569 -0.15850830489152 -0.14844118279693 -0.12466277790054
-0.17325573578496
0.81482309189485 -0.18061310948121 -0.15956433991313
-0.16673992761594 -0.18531583198946
0.81136410974079 -0.17670010242520
-0.13531671967724 -0.15892507654444 -0.17250952513094
0.82392993456326
-0.07898611196887 -0.10600464177010 -0.13223401409640 -0.15767422894776
0.00225189550917 -0.02655452766644 -0.06780935715559 -0.12151259295826
0.10839730275689
0.07942526576654
0.02076444569150 -0.06758515746824
Columns 9 through 11
-0.15629887674437 -0.31971290859160 -0.53224322057964
0.38856675956284
0.39088436419280
0.36647555101307
-0.10340002126289
0.10973682818876
0.37765361770707
-0.04493594089171 -0.01094168371922
0.02998735513003
-0.08717309020235 -0.03597211970236
0.02894013359943
-0.12203059940092 -0.06801188794458
0.00249179445590
-0.14950846848742 -0.10706098844587 -0.04935766230055
-0.16960669746184 -0.15311942120624 -0.12660823666994
0.81767471367581 -0.20618718622568 -0.22925992865224
-0.18766423507447
0.73373571649579 -0.35731273824748
-0.18562354371268 -0.33335071304181
0.48923333454436
R =
-3.31662479035540 -1.65831239517770 -1.16081867662439
0
1.04880884817015
1.04880884817015
0
0
0.29291637031754
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
c =
-1.51174199612928
0.89339523449505
-0.06876463683188
Pgina 19 de 20

Guin N1+N2 (Pablo Guerrero) 2010/2011


-0.00372222290838
-0.00182939994747
0.00058386072006
0.00261823694124
0.00342226927260
0.00220086848152
-0.00177674018507
-0.00916971534084
aQR =
-0.00531589475039
1.08657753288357
-0.23475859938224
[Q,R] = qr(M,0), c =
Q =
-0.30151134457776
-0.30151134457776
-0.30151134457776
-0.30151134457776
-0.30151134457776
-0.30151134457776
-0.30151134457776
-0.30151134457776
-0.30151134457776
-0.30151134457776
-0.30151134457776
R =
-3.31662479035540
0
0
c =
-1.51174199612928
0.89339523449505
-0.06876463683188
aQR =
-0.00531589475039
1.08657753288357
-0.23475859938224
ans =
1.11166118655292
aEN = (M'*M)\(M'*y),
aEN =
-0.00531589475039
1.08657753288358
-0.23475859938225
ans =
1.11166118655294
cond(M)
%
ans =
19.48728345301832
diary off
quit

Q'*y, aQR = R(1:3,1:3)\c(1:3), norm(aQR)


-0.47673129462280
-0.38138503569824
-0.28603877677368
-0.19069251784912
-0.09534625892456
-0.00000000000000
0.09534625892456
0.19069251784912
0.28603877677368
0.38138503569824
0.47673129462280

0.51209155649919
0.20483662259968
-0.03413943709995
-0.20483662259968
-0.30725493389951
-0.34139437099946
-0.30725493389951
-0.20483662259968
-0.03413943709995
0.20483662259968
0.51209155649919

-1.65831239517770
1.04880884817015
0

-1.16081867662439
1.04880884817015
0.29291637031754

norm(aEN)

|| M ||_2

por

|| pinv(M) ||_2

Pgina 20 de 20

% Mismo que solqr?

Guin N3+N4 (Pablo Guerrero) 2010/2011


cd('c:\Documents and Settings\matap.AULA\Mis Documentos')
diary Sesion04
format compact
% Primera hora: interpolacion y aproximacion
% Puntos {x_0,x_1,...,x_n} => grado polinomio interpolante es n
% E1 (n = 5)
format long; x = [0 3 -5 6 8 1]; y = [-5 -2 -10 0 -1 -3]; p = polyfit(x,y,5)
p =
Columns 1 through 4
-0.00242535242535
0.02778332778333 -0.01189366189366 -0.71659451659452
Columns 5 through 6
2.70313020313021 -5.00000000000000
xs = linspace(min(x),max(x)); ys = polyval(p,xs);
plot(xs,ys); hold on; plot(x,y,'o'); grid, hold off;
polyval(p,0.5), polyval(p,8)
ans =
-3.82740956959707
ans =
-1.00000000000001
% E2
type p4_2
x=0:0.1:5;
n=6;
g=1./sqrt((2-x).^2+x.^2);
ag=polyfit(x,g,n);
y=polyval(ag,x);
plot(x,y,'y-',x,g,'g:');
x=(0:0.1:5)'; n=6; g=1./sqrt((2-x).^2+x.^2);
M=ones(size(x)); for k = 1:6, M(:,k+1) = x.*M(:,k); end; size(M)
ans =
51
7
% Todas las columnas de M son linealmente independientes, pero...
rank(M), cond(M)
ans =
7
ans =
3.857219720341935e+005
[Q,R]=qr(fliplr(M),0); ag=R\(Q'*g)
ag =
0.00209482202256
-0.03155583865000
0.16998039754128
-0.35770836109786
0.09690388133430
0.32549193600065
0.48981286150449
polyfit(x,g,n)
ans =
Columns 1 through 4
0.00209482202256 -0.03155583865000
0.16998039754128 -0.35770836109786
Columns 5 through 7
0.09690388133430
0.32549193600065
0.48981286150449
[ag polyfit(x,g,n)']
ans =
0.00209482202256
0.00209482202256
-0.03155583865000 -0.03155583865000
0.16998039754128
0.16998039754128
-0.35770836109786 -0.35770836109786
0.09690388133430
0.09690388133430
0.32549193600065
0.32549193600065
0.48981286150449
0.48981286150449
% Son los mismos, pero no es casualidad porque ...
Pgina 1 de 14

Guin N3+N4 (Pablo Guerrero) 2010/2011


type polyfit
function [p,S,mu] = polyfit(x,y,n)
%POLYFIT Fit polynomial to data.
%
POLYFIT(X,Y,N) finds the coefficients of a polynomial P(X) of
%
degree N that fits the data, P(X(I))~=Y(I), in a least-squares sense.
%
%
[P,S] = POLYFIT(X,Y,N) returns the polynomial coefficients P and a
%
structure S for use with POLYVAL to obtain error estimates on
%
predictions. If the errors in the data, Y, are independent normal
%
with constant variance, POLYVAL will produce error bounds which
%
contain at least 50% of the predictions.
%
%
The structure S contains the Cholesky factor of the Vandermonde
%
matrix (R), the degrees of freedom (df), and the norm of the
%
residuals (normr) as fields.
%
%
[P,S,MU] = POLYFIT(X,Y,N) finds the coefficients of a polynomial
%
in XHAT = (X-MU(1))/MU(2) where MU(1) = mean(X) and MU(2) = std(X).
%
This centering and scaling transformation improves the numerical
%
properties of both the polynomial and the fitting algorithm.
%
%
Warning messages result if N is >= length(X), if X has repeated, or
%
nearly repeated, points, or if X might need centering and scaling.
%
%
See also POLY, POLYVAL, ROOTS.
%
%
%
%
%
%
%
%
%
%
%
%
%
%
%
%

Copyright 1984-2001 The MathWorks, Inc.


$Revision: 5.15 $ $Date: 2001/04/15 11:59:13 $
The regression problem is formulated in matrix format as:
y = V*p

or

3
y = [x

2
x

1] [p3
p2
p1
p0]

where the vector p contains the coefficients to be found.


7th order polynomial, matrix V would be:
V = [x.^7 x.^6 x.^5 x.^4 x.^3 x.^2 x ones(size(x))];

if ~isequal(size(x),size(y))
error('X and Y vectors must be the same size.')
end
x = x(:);
y = y(:);
if nargout > 2
mu = [mean(x); std(x)];
x = (x - mu(1))/mu(2);
end
% Construct Vandermonde matrix.
V(:,n+1) = ones(length(x),1);
for j = n:-1:1
V(:,j) = x.*V(:,j+1);
end
% Solve least squares problem, and save the Cholesky factor.
Pgina 2 de 14

For a

Guin N3+N4 (Pablo Guerrero) 2010/2011


[Q,R] = qr(V,0);
ws = warning('off');
p = R\(Q'*y);
% Same as p = V\y;
warning(ws);
if size(R,2) > size(R,1)
warning('Polynomial is not unique; degree >= number of data points.')
elseif condest(R) > 1.0e10
if nargout > 2
warning(sprintf( ...
['Polynomial is badly conditioned. Remove repeated data points.']))
else
warning(sprintf( ...
['Polynomial is badly conditioned. Remove repeated data points\n' ...
'
or try centering and scaling as described in HELP
POLYFIT.']))
end
end
r = y - V*p;
p = p.';
% Polynomial coefficients are row vectors by convention.
% S is a structure containing three elements: the Cholesky factor of the
% Vandermonde matrix, the degrees of freedom and the norm of the residuals.
S.R = R;
S.df = length(y) - (n+1);
S.normr = norm(r);
% Tambien se puede resolver Ma=g y hacer flipud(a), o bien hat{M}hat{a} = g con DI
[ag flipud(M\g) fliplr(M)\g]
ans =
0.00209482202256
0.00209482202256
0.00209482202256
-0.03155583865000 -0.03155583865000 -0.03155583865000
0.16998039754128
0.16998039754128
0.16998039754128
-0.35770836109786 -0.35770836109786 -0.35770836109786
0.09690388133430
0.09690388133430
0.09690388133430
0.32549193600065
0.32549193600065
0.32549193600065
0.48981286150449
0.48981286150449
0.48981286150449
% Error: diferencia entre g y phi, es decir, || g - fliplr(M)*ag ||_2
%
Luego norm(g - phi), que equivale a norm(g - hat{M}hat{a})
error = norm(g-fliplr(M)*ag)
error =
0.05195107629169
y = polyval(ag,x);
% Pero y coincide con hat{M}hat{a}, i.e., y es la
plot(x,y,'b-',x,g,'r:')
% aproximacion phi (azul), g es la funcion original (rojo)
% E3 (n = 10)
type p4_3
x=0:0.1:1;
y=[-.447 1.978 3.28 6.16 7.08 7.34 7.66 9.56 9.48 9.3 11.2];
fi2=polyfit(x,y,2)
xi=linspace(0,1,100);
zi=polyval(fi2,xi);
% Marcamos con x los puntos y en verde fi2
plot(x,y,'x',xi,zi,'g');
pause;
pe10=polyfit(x,y,10),
hold on;
yi=polyval(pe10,xi);
% En verde pe10
plot(xi,yi,'b');
hold off
format short
x=0:0.1:1;
Pgina 3 de 14

Guin N3+N4 (Pablo Guerrero) 2010/2011


y=[-.447 1.978 3.28 6.16 7.08 7.34 7.66 9.56 9.48 9.3 11.2];
fi=polyfit(x,y,2)
fi =
-9.8108
20.1293
-0.0317
% Marcamos con o los puntos de la nube y en rojo y discontinuo la phi
xi=linspace(0,1,100); zi=polyval(fi,xi); plot(x,y,'o',xi,zi,'r:')
pe10=polyfit(x,y,10)
pe10 =
1.0e+006 *
Columns 1 through 8
-0.4644
2.2965
-4.8773
5.8233
-4.2948
2.0211
-0.6032
Columns 9 through 11
-0.0106
0.0004
-0.0000
yi = polyval(pe10,xi); hold on; plot(xi,yi,'b'); hold off;
% polinomio interpolador en azul
% Se observa el fenomeno del "polynomial wiggle"
% E9 (ya explicado al final de N1+N2)
% El sistema es Ma=y, con y=sen(x), x vector columna
x = (0:0.1:1)';
M=ones(size(x)); for k = 1:2, M(:,k+1) = x.*M(:,k); end; size(M)
ans =
11
3
M = fliplr(vander(x)); M(:,4:end) = []; y = sin(x);
format long; [flipud(M\y) polyfit(x,y,2)'], format short;
ans =
-0.23475859938224 -0.23475859938224
1.08657753288357
1.08657753288357
-0.00531589475039 -0.00531589475039
% Se obtienen los mismos resultados
% Segunda hora: integracion y derivacion numerica
% E15
type humps
function [out1,out2] = humps(x)
%HUMPS A function used by QUADDEMO, ZERODEMO and FPLOTDEMO.
%
Y = HUMPS(X) is a function with strong maxima near x = .3
%
and x = .9.
%
%
[X,Y] = HUMPS(X) also returns X. With no input arguments,
%
HUMPS uses X = 0:.05:1.
%
%
Example:
%
plot(humps)
%
%
See QUADDEMO, ZERODEMO and FPLOTDEMO.
%
%

Copyright 1984-2001 The MathWorks, Inc.


$Revision: 5.7 $ $Date: 2001/04/15 12:03:04 $

if nargin==0, x = 0:.05:1; end


y = 1 ./ ((x-.3).^2 + .01) + 1 ./ ((x-.9).^2 + .04) - 6;
if nargout==2,
out1 = x; out2 = y;
else
out1 = y;
end

fplot('humps',[-1 2]); grid on, format long


% repasando ENL ....
raizp = fzero('humps',1.25), humps(raizp)
% Metodo de Brent
raizp =
Pgina 4 de 14

0.1090

Guin N3+N4 (Pablo Guerrero) 2010/2011


1.29954968258482
ans =
0
raizn = fzero('humps',-0.25), humps(raizn)
% Metodo de Brent
raizn =
-0.13161801809961
ans =
0
% Primitivas Matlab para integracion numerica:
% quad => Simpson adaptativo (NC cerrada 3 puntos (n=2) como formula de base)
% quad8 => Tambien adaptativo (NC cerrada 8 puntos (n=7) como formula de base)
% quadl => Lobatto adaptativo (Seudogaussina (fijos ambos extremos) como base)
% Todas son tecnicas adaptativas pero todas ellas basadas en formulas CERRADAS
quad('humps',-1,2)
ans =
26.34496050120123
quad8('humps',-1,2)
Warning: QUAD8 is obsolete. QUADL is its recommended replacement.
> In C:\MATLAB6p1\toolbox\matlab\funfun\quad8.m at line 35
ans =
26.34496024631924
quadl('humps',-1,2)
ans =
26.34496047137897
% trapz => Regla de los trapecios compuesta (Matlab)
x = -1:0.20:2; y = humps(x); trapz(x,y)
% h=0.20
ans =
23.67372265612058
x = -1:0.05:2; y = humps(x); trapz(x,y)
% h=0.05 (aproxima mejor y estable)
ans =
26.34455536552756
% E17
type f4_4
function y=f4_3(t)
% OJO: Slo con /t (en vez de ./t),
y=log(sin(t/4))+3*sin(4*t)./t; % aunque no provoca error, est mal
edit f4_4
fschange('c:\Documents and Settings\matap.AULA\Mis Documentos\f4_4.m');
clear f4_4
type f4_4
function y=f4_4(t)
% OJO: Slo con /t (en vez de ./t),
y=log(sin(t/4))+3*sin(4*t)./t; % aunque no provoca error, est mal
!copy f4_4.m f4_17.m
1 archivos copiados.
edit f4_17
fschange('c:\Documents and Settings\matap.AULA\Mis Documentos\f4_17.m');
clear f4_17
type f4_17
function y=f4_17(t)
% OJO: Slo con /t (en vez de ./t),
y=log(sin(t/4))+3*sin(4*t)./t; % aunque no provoca error, est mal
quad8('f4_17',0,4*pi)
Warning: Log of zero.
> In c:\Documents and Settings\matap.AULA\Mis Documentos\f4_17.m at line 2
In C:\MATLAB6p1\toolbox\matlab\funfun\quad8.m at line 57
Warning: Divide by zero.
> In c:\Documents and Settings\matap.AULA\Mis Documentos\f4_17.m at line 2
In C:\MATLAB6p1\toolbox\matlab\funfun\quad8.m at line 57
ans =
NaN
Pgina 5 de 14

Guin N3+N4 (Pablo Guerrero) 2010/2011


2*(2*pi)*f4_17(2*pi)
% Regla del punto medio simple
ans =
-5.878304635907296e-015
h=pi/16; x = h:h:4*pi; Ipm = h*sum(f4_17(x-h/2)), format short
Ipm =
-3.92305429827538
% Esta era la regla del punto medio compuesta (basada en formula abierta)
% E4
type p4_4
% Apartado a: Evaluacin de f
h=pi/16;
x=h:h:2*pi;
dosene=length(x);
n=dosene/2;
% Una evaluacin directa mediante quad8 presenta problemas tanto si se usa
%
for k=1:dosene, f(k)=quad8('g',0,x(k)); end;
% como si se usa
%
for k=1:dosene, f(k)=quad8('g',0.01,x(k)); end;
% Usaremos en su lugar una frmula abierta de integracin numrica,
% p.e. la del punto medio compuesta con nodos espaciados con h/2:
for k=1:dosene,
f(k)=h*sum(f4_4(x(1:k)-h/2));
end;
pause
% Apartado b: x_0=0, f_0=0 (tambin podra hacerse f_0=f_{2n})
x=0:h:2*pi-h; f=[0 f(1:dosene-1)];
c=fft(f);
a=zeros(1,dosene); a(1)=c(1)/dosene; a(dosene)=c(1+n)/dosene;
for k=1:n-1
a(2*k) = (c(1+k)+c(1+dosene-k))/dosene;
a(2*k+1)=i*(c(1+k)-c(1+dosene-k))/dosene;
end;
plot(x,f,'+-'); hold on;
x=0:0.01:2*pi-h;
phi=a(1)+a(dosene)*cos(n*x);
for k=1:n-1
phi=phi+a(2*k)*cos(k*x)+a(2*k+1)*sin(k*x);
end;
plot(x,phi,':'); hold off;

pause
% Apartado c: Estimacin (bastante mala) del mximo de f
[fmaxest,indice]=max(phi); xmaxest=x(indice);
xmax=fzero('f4_4',0.5);
% Apartado a: Evaluacin de f
h=pi/16;
x=h:h:2*pi;
dosene=length(x);
n=dosene/2;
Pgina 6 de 14

Guin N3+N4 (Pablo Guerrero) 2010/2011


% Una evaluacin directa mediante quad8 presenta problemas tanto si se usa
%
for k=1:dosene, f(k)=quad8('g',0,x(k)); end;
% como si se usa
%
for k=1:dosene, f(k)=quad8('g',0.01,x(k)); end;
% Usaremos en su lugar una frmula abierta de integracin numrica,
% p.e. la del punto medio compuesta con nodos espaciados con h/2:
for k=1:dosene,
f(k)=h*sum(f4_4(x(1:k)-h/2));
end;
size(f)
ans =
1
32
% Estimando f(0)...
type f4_4
function y=f4_4(t)
% OJO: Slo con /t (en vez de ./t),
y=log(sin(t/4))+3*sin(4*t)./t; % aunque no provoca error, est mal
syms x t real
limit( int( log(sin(t/4))+3*sin(4*t)/t ,0,x) ,x,0,'right')
ans =
0
% Apartado b: x_0=0, f_0=0 (tambin podra hacerse f_0=f_{2n})
x=0:h:2*pi-h; f=[0 f(1:dosene-1)];
c=fft(f);
a=zeros(1,dosene); a(1)=c(1)/dosene; a(dosene)=c(1+n)/dosene;
for k=1:n-1
a(2*k) = (c(1+k)+c(1+dosene-k))/dosene;
a(2*k+1)=i*(c(1+k)-c(1+dosene-k))/dosene;
end;
plot(x,f,'+-'); hold on;
x=0:0.01:2*pi-h;
phi=a(1)+a(dosene)*cos(n*x);
for k=1:n-1
phi=phi+a(2*k)*cos(k*x)+a(2*k+1)*sin(k*x);
end;
plot(x,phi,':'); hold off;
[fmaxest,indice]=max(phi), xmaxest=x(indice)
fmaxest =
3.71694660945382
indice =
69
xmaxest =
0.68000000000000
% valor maximo es fmaxest, maximo (abscisa) es xmaxest
% fmaxest NO es f4_4(xmaxest), sino int(f4_4,0,xmaxest)
xmax = fzero('f4_4',0.5) % otra estimacion de xmaxest
xmax =
0.68165380842987
% E12: Derivacion numerica
format long
type deriv
function y=deriv(F,x0,h)
y=(feval(F,x0+h)-feval(F,x0-h))/(2*h);
Pgina 7 de 14

Guin N3+N4 (Pablo Guerrero) 2010/2011


deriv('cos',pi/2,1e-3)
ans =
-0.99999983333323
% Veamos que es peligroso bajar el h por debajo del h optimo
deriv('cos',pi/2,1e-10)
ans =
-1.00000008274037
deriv('cos',pi/2,1e-13)
ans =
-0.99920072216264
deriv('cos',pi/2,1e-16)
ans =
0
type f4_12
function y=f4_12(x)
y=(3.27*x.^3.*sqrt(2+sin(x)).*(0.23+x.^4))./(3.24+sin(0.23+x));
% f'(x0)=(f(x0-2h)-8f(x0-h)+8f(x0+h)-f(x0+2h))/(12h) + h^4f^5)(chi)/30
% segun pone en [Guerrero,03], pagina 87a
!copy deriv.m deriv4.m
1 archivos copiados.
edit deriv4.m
fschange('c:\Documents and Settings\matap.AULA\Mis Documentos\deriv4.m');
clear deriv4
type deriv4
function y=deriv4(F,x0,h)
y=(feval(F,x0-2*h)-8*feval(F,x0-h)+8*feval(F,x0+h)-feval(F,x0+2*h))/(12*h);
deriv('cos',pi/2,1e-3)
ans =
-0.99999983333323
deriv4('cos',pi/2,1e-3)
ans =
-0.99999999999982
% Aqui tambien es peligroso bajar el h por debajo del h optimo
deriv4('cos',pi/2,1e-10)
ans =
-1.00000008274037
deriv4('cos',pi/2,1e-13)
ans =
-0.99883064782110
deriv4('cos',pi/2,1e-16)
ans =
0.37007434154172
% Integracion numerica con NC cerradas
type ncotes5simple
function y=ncotes5simple(F,a,b)
h=(b-a)/4;
y=( 7*(feval(F,a) + feval(F,b)) ...
+32*(feval(F,a+h)+feval(F,a+3*h)) ...
+12*feval(F,a+2*h) ) /90*(b-a);
% ncotes5simple es NC cerrada (con n=4), conocida como formula de
% Boole, y ncotes5compuesta es su aplicacion en forma compuesta.
type ncotes5compuesta
function y=ncotes5compuesta(F,a,b,n)
h=(b-a)/n;
y=0;
for k=1:n
y=y+ncotes5simple(F,a+(k-1)*h,a+k*h);
Pgina 8 de 14

Guin N3+N4 (Pablo Guerrero) 2010/2011


end
% El total N de subinvervalos en los que divides [a,b] es np,
% siendo p el cuarto argumento a ncotes5compuesta (i.e., el
% numero p de aplicaciones de la formula simple)
% E13
type f4_13
function y=f4_13(x)
y=(2+sin(pi*x))./(2+x+x.^2);
ncotes5simple('f4_13',2,5)
ans =
0.44874556854318
ncotes5compuesta('f4_13',2,5,10)
% 10 aplicaciones, 40 subintervalos
ans =
0.42659227004952
% E16 (trapecios compuesta)
f4_16 = inline('1/sqrt((2-x^2)^2+x^2)')
f4_16 =
Inline function:
f4_16(x) = 1/sqrt((2-x^2)^2+x^2)
fplot(f4_16,[0 4]);
fplot('f4_16',[0 4]);
a = 0; b = 4; h = 0.02; N = (b - a)/h
N =
200
% 201 nodos en en intervalo [a,b]; cada n = 1 subintervalo aplico trapecios simple
fs = f4_16(a:h:b);
% Asi NO, pues no hemos usado op elem a elem al definir f
??? Error using ==> inlineeval
Error in inline expression ==> 1/sqrt((2-x^2)^2+x^2)
??? Error using ==> ^
Matrix must be square.
Error in ==> C:\MATLAB6p1\toolbox\matlab\funfun\@inline\subsref.m
On line 25 ==>
INLINE_OUT_ = inlineeval(INLINE_INPUTS_, INLINE_OBJ_.inputExpr,
INLINE_OBJ_.expr);
f4_16 = inline('1./sqrt((2-x.^2).^2+x.^2)')
f4_16 =
Inline function:
f4_16(x) = 1./sqrt((2-x.^2).^2+x.^2)
fplot(f4_16,[0 4]);
fs = f4_16(a:h:b);
% Asi SI, pues ya hemos usado op elem a elem al definir f
format long
I = h/2*(fs(1)+2*sum(fs(2:end-1))+fs(end))
I =
1.49102190935772
I = h/2*(fs(1)+2*sum(fs(2:N))+fs(N+1))
% tambien vale
I =
1.49102190935772
trapz(a:h:b,fs)
ans =
1.49102190935772
edit
% EJERCICIO: Sabiendo que |E(f)|<=h^2(b-a)/12*max_{a<=chi<=b}|f''(chi)|,
% estima dicha cota y comprueba si se tienen o no 4 decimales correctos
% Tercera hora: PVI para EDOs
%
y'(x)=f(x,y(x))=sen(xy(x)),
0=a<=x<=b=5,
y(0)=y(a)=alfa=3
dsolve('Dy=sin(t*y)','y(0)=3')
Warning: Explicit solution could not be found.
> In C:\MATLAB6p1\toolbox\symbolic\dsolve.m at line 326
ans =
[ empty sym ]
Pgina 9 de 14

Guin N3+N4 (Pablo Guerrero) 2010/2011


% y(x_i) approx w_i
% [x,w] = ode45(f,[a b],alfa) es una tecnica adaptativa (tamao paso h variable)
% [x,w] = ode23(f,[a b],alfa) es una tecnica adaptativa (tamao paso h variable)
% [x,w] = euler1(f,a,b,alfa,n) es Taylor de orden 1 (tamao paso fijo h = (b-a)/n)
% [x,w] = rk4(f,a,b,alfa,n)
es RK clasic orden 4 (tamao paso fijo h = (b-a)/n)
% En los dos ultimos casos, los nodos son {x_0,...,x_n} (i.e., n+1 puntos malla)
[xs,ws] = ode45(inline('sin(x*y)','x','y'),[0 5],3);
size(xs), size(ws)
ans =
45
1
ans =
45
1
plot(xs,ws(:,1))
find(xs==4)
% para ver si ha pasado por el 4
ans =
[]
[xs,ws] = ode45(inline('sin(x*y)','x','y'),[0 4 5],3);
size(xs), size(ws)
ans =
3
1
ans =
3
1
plot(xs,ws(:,1))
[xs,ws] = ode45(inline('sin(x*y)','x','y'),0:0.1:5,3); % simula h=0.1 fijo con ode45
size(xs), size(ws)
ans =
51
1
ans =
51
1
% en este caso, n = 50
plot(xs,ws(:,1))
% Esquema para un sistema de EDOs de primer orden
% E3a
edit f5_3a
fschange('c:\Documents and Settings\matap.AULA\Mis Documentos\f5_3a.m');
clear f5_3a
type f5_3a
function du=f5_3a(t,u)
du=zeros(2,1);
du(1)=3*u(1)+2*u(2)-(2*t^2+1)*exp(2*t);
du(2)=4*u(1)+u(2)-(t^2+2*t-4)*exp(2*t);
[ts,ws] = ode45('f5_3a',[0 1],[1;1]);
size(ts), size(ws)
ans =
45
1
ans =
45
2
plot(ts,ws(:,1))
% para pintar las aproximaciones a u_1(t)
plot(ts,ws(:,2))
% para pintar las aproximaciones a u_2(t)
% Entrada/salida formateada: fprintf (esta vectorizado en Matlab) para tabla valores
fprintf('%6.4f %13.8f %13.8f\n',[ts';ws(:,1)';ws(:,2)'])
0.0000
1.00000000
1.00000000
0.0056
1.02276813
1.05072504
0.0112
1.04643309
1.10244230
0.0167
1.07101987
1.15517872
0.0223
1.09655421
1.20896200
0.0473
1.22326737
1.46346470
0.0723
1.37209788
1.74229811
0.0973
1.54594440
2.04855020
0.1223
1.74810076
2.38571218
0.1473
1.98228725
2.75771022
0.1723
2.25266699
3.16892259
Pgina 10 de 14

Guin N3+N4 (Pablo Guerrero) 2010/2011


0.1973
2.56397856
3.62431312
0.2223
2.92160595
4.12950159
0.2473
3.33162976
4.69081552
0.2723
3.80085470
5.31531858
0.2973
4.33702651
6.01102866
0.3223
4.94894643
6.78703287
0.3473
5.64655543
7.65357248
0.3723
6.44098013
8.62209008
0.3973
7.34488816
9.70558638
0.4223
8.37267553
10.91880830
0.4473
9.54060519
12.27838838
0.4723
10.86688406
13.80292353
0.4973
12.37224547
15.51355920
0.5223
14.08025615
17.43429731
0.5473
16.01754432
19.59222557
0.5723
18.21392902
22.01764887
0.5973
20.70337522
24.74504670
0.6223
23.52449733
27.81357792
0.6473
26.72093500
31.26745807
0.6723
30.34156976
35.15617866
0.6973
34.44209262
39.53607787
0.7223
39.08583036
44.47116840
0.7473
44.34436509
50.03375891
0.7723
50.29789644
56.30481978
0.7973
57.03781621
63.37656169
0.8223
64.66806546
71.35379473
0.8473
73.30615591
80.35495224
0.8723
83.08377464
90.51270018
0.8973
94.15101531
101.97817330
0.9223
106.67860829
114.92320801
0.9417
117.53885628
126.12169350
0.9612
129.49600313
138.42995459
0.9806
142.66080714
151.95935924
1.0000
157.15569447
166.83297305
% E3b
edit f5_3b
fschange('C:\Documents and Settings\matap.AULA\Mis documentos\f5_3b.m');
clear f5_3b
type f5_3b
function du=f5_3b(t,u)
du=zeros(2,1);
du(1)=u(2);
du(2)=exp(2*t)*sin(t)-2*u(1)+2*u(2);
[ts,ws] = ode45('f5_3b',[0 1],[-0.4;-0.6]);
size(ts), size(ws)
ans =
41
1
ans =
41
2
fprintf('%6.4f %13.8f %13.8f\n',[ts';ws(:,1)';ws(:,2)'])
0.0000
-0.40000000
-0.60000000
0.0250
-0.41512120
-0.60954227
0.0500
-0.43046877
-0.61808541
0.0750
-0.44601607
-0.62549619
0.1000
-0.46173297
-0.63163105
0.1250
-0.47758566
-0.63633573
0.1500
-0.49353644
-0.63944449
0.1750
-0.50954316
-0.64077917
0.2000
-0.52555905
-0.64014867
0.2250
-0.54153246
-0.63734848
0.2500
-0.55740654
-0.63215977
0.2750
-0.57311865
-0.62434825
Pgina 11 de 14

Guin N3+N4 (Pablo Guerrero) 2010/2011


0.3000
-0.58860004
-0.61366361
0.3250
-0.60377560
-0.59983891
0.3500
-0.61856342
-0.58258950
0.3750
-0.63287408
-0.56161171
0.4000
-0.64661028
-0.53658221
0.4250
-0.65966649
-0.50715726
0.4500
-0.67192843
-0.47297145
0.4750
-0.68327224
-0.43363622
0.5000
-0.69356395
-0.38873908
0.5250
-0.70265911
-0.33784277
0.5500
-0.71040218
-0.28048379
0.5750
-0.71662546
-0.21617070
0.6000
-0.72114850
-0.14438325
0.6250
-0.72377764
-0.06457147
0.6500
-0.72430530
0.02384612
0.6750
-0.72250863
0.12148436
0.7000
-0.71814891
0.22899238
0.7250
-0.71097092
0.34705465
0.7500
-0.70070214
0.47639307
0.7750
-0.68705112
0.61776888
0.8000
-0.66970679
0.77198376
0.8250
-0.64833775
0.93988093
0.8500
-0.62259125
1.12234755
0.8750
-0.59209138
1.32031670
0.9000
-0.55643817
1.53476851
0.9250
-0.51520684
1.76673146
0.9500
-0.46794658
2.01728488
0.9750
-0.41417846
2.28756109
1.0000
-0.35339441
2.57874647
figure(1); plot(ts,ws(:,1)), grid
% para pintar las aproximaciones a y(t)
figure(2); plot(ts,ws(:,2)), grid
% para pintar las aproximaciones a y'(t)
fprintf('%6.4f %13.8f\n',[ts';ws(:,1)']) % con solo y (i.e., u1)
0.0000
-0.40000000
0.0250
-0.41512120
0.0500
-0.43046877
0.0750
-0.44601607
0.1000
-0.46173297
0.1250
-0.47758566
0.1500
-0.49353644
0.1750
-0.50954316
0.2000
-0.52555905
0.2250
-0.54153246
0.2500
-0.55740654
0.2750
-0.57311865
0.3000
-0.58860004
0.3250
-0.60377560
0.3500
-0.61856342
0.3750
-0.63287408
0.4000
-0.64661028
0.4250
-0.65966649
0.4500
-0.67192843
0.4750
-0.68327224
0.5000
-0.69356395
0.5250
-0.70265911
0.5500
-0.71040218
0.5750
-0.71662546
0.6000
-0.72114850
0.6250
-0.72377764
0.6500
-0.72430530
0.6750
-0.72250863
0.7000
-0.71814891
0.7250
-0.71097092
0.7500
-0.70070214
0.7750
-0.68705112
Pgina 12 de 14

Guin N3+N4 (Pablo Guerrero) 2010/2011


0.8000
-0.66970679
0.8250
-0.64833775
0.8500
-0.62259125
0.8750
-0.59209138
0.9000
-0.55643817
0.9250
-0.51520684
0.9500
-0.46794658
0.9750
-0.41417846
1.0000
-0.35339441
% E2
edit f5_2
edit
fschange('C:\Documents and Settings\matap.AULA\Mis documentos\f5_2.m');
clear f5_2
type f5_2
function du=f5_2(t,u)
du=zeros(3,1);
du(1)=-6*u(1)-3*u(2)+14*u(3);
du(2)= 4*u(1)+3*u(2)- 8*u(3);
du(3)=-2*u(1)- u(2)+ 5*u(3)+sin(t);
[ts,ws] = euler1('f5_2',0,10,[1;-1;0],1e4); % pues n = (b-a)/h = (10-0)/(1e-3)= 1e4
size(ts), size(ws)
ans =
10001
1
ans =
10001
3
plot(ts,ws) % para pintar x(t), y(t) y z(t) en una misma grafica
type euler1
function [x,y]=euler1(F,x0,xf,y0,n)
% function [x,y]=euler1(F,x0,xf,y0,n)
% Metodo de Euler para el problema de valores iniciales en EDO
% F nombre del fichero con la funcion a integrar.
% x0 punto inicial.
% xf punto final.
% n numero de subintervalos.
% y0 vector columna con los valores iniciales.
% x vector con los puntos intermedios donde se evalua.
% y matriz con los valores obtenidos en los puntos intermedios (x).
h=(xf-x0)/n; x=x0:h:xf;
y=y0;
for k=1:n,y(:,k+1)=y(:,k)+h*(feval(F,x(k),y(:,k)));end
y=y';x=x';
type rk4
function [x,y]=rk4(func,x0,xf,y0,n)
% Esta rutina implementa el metodo de Runge-Kutta usual de orden 4.
%function [x,y]=rk4(func,x0,xf,y0,n)
% Los parametros de llamada son:
% x0= escalar con el valor inicial de la x
% xf= escalar con el valor final de la x
% n = numero de saltos en donde se evalua y (equivale n=(xf-x0)/h donde
%
h es el tamao de paso.
% y0= vector columna con los valores iniciales.
h=(xf-x0)/n;
x=x0:h:xf;y=y0;
for k=1:n,
k1=feval(func,x(k),y(:,k));
k2=feval(func,x(k)+h/2,y(:,k)+h/2*k1);
k3=feval(func,x(k)+h/2,y(:,k)+h/2*k2);
k4=feval(func,x(k)+h,y(:,k)+h*k3);
y(:,k+1)=y(:,k)+(k1+k4+2*(k2+k3))*h/6;
Pgina 13 de 14

Guin N3+N4 (Pablo Guerrero) 2010/2011


end
x=x';y=y';
[ts,ws] = rk4('f5_2',0,10,[1;-1;0],1e3); % pues n = (b-a)/h = (10-0)/(1e-2)= 1e3
size(ts), size(ws)
ans =
1001
1
ans =
1001
3
plot(ts,ws) % para pintar x(t), y(t) y z(t) en una misma grafica
ws(end,1)
% aproximacion para x(10)
ans =
3.234434568269429e+008
ws(end,2)
% aproximacion para y(10)
ans =
-2.587547645911311e+008
ws(end,3)
% aproximacion para z(10)
ans =
1.293773829871109e+008
ws(5,1)
% aproximacion para x(5) (NO, asi no)
ans =
0.88091852130840
find(ts==5)
ans =
501
ws(501,1)
% aproximacion para x(5) (SI, asi si)
ans =
1.468938412081753e+004
ws(501,2)
% aproximacion para y(5) (SI, asi si)
ans =
-1.174997436541425e+004
ws(501,3)
% aproximacion para z(5) (SI, asi si)
ans =
5.875324813745320e+003
% E1 (con 3 us) : n = (b - a)/h = (2 - 1)/(1e-3) = 1e3 = 1000
% E4 (con 3 us) : n = (b - a)/h = (3 - 1)/0.05 = 2/0.05 = 200/5 = 40
% E5 (con 3 us) : n = (b - a)/h = (2 - 1)/0.05 = 1/0.05 = 100/5 = 20
% y(2) se aproxima con ws(end,1)
% y''(1.95) se aproxima con ws(end-1,3)
% E6 (con 4 us) : h = (b - a)/n = (pi - 0)/n = pi/10 => n = 10
% y'''(pi) se aproxima con ws(end,4)
% y^(iv)(pi) se aproxima con ...
% ... 1/6*(-4*ws(end,1)-20*ws(end,2)-25*ws(end,3)-5*ws(end,4))
diary off
quit

Pgina 14 de 14

You might also like