Professional Documents
Culture Documents
Laboratorio de Matemticas
(Pequeo manual de MatLab)
En lo que sigue, se supone que el usuario teclea lo que aparece en color azul. En color
negro aparecer la respuesta de MATLAB a la instruccin tecleada precedida del smbolo
>>. El signo % permite aadir comentarios y aparecern en verde.
U. D. de Matemticas de la ETSITGC
>>for
En cada iteracin asigna valores y ejecuta rdenes
>>if
>>while
Acta si todos los elementos de la expresin son verdaderos o ceros
>>break
Termina la ejecucin de rdenes: for, while
>>end
Fin del bucle
>>x==1
Es x = 1?
>>x~=2
Es x distinto de 2?
U. D. de Matemticas de la ETSITGC
Vectores y Matrices
Para definir un vector, basta introducir sus coordenadas entre corchetes:
>> v=[1 2 3]
v=
1 2 3
Para trasponer se usa (debajo de ?)
>> v'
ans =
1
2
3
Las matrices se escriben como los vectores, pero separando las filas mediante un
punto y coma.
>>M=[1 2 3;4 5 6;7 8 9]
M=
1 2 3
4 5 6
7 8 9
Matriz formada por la parte triangular inferior de M.
>> tril(M)
ans =
1 0 0
4 5 0
7 8 9
Matriz formada por la parte triangular superior de M.
>> triu(M)
ans =
1 2 3
0 5 6
0 0 9
Determinante de la matriz cuadrada.
>> det(M)
ans =
0
Matriz identidad.
>> eye(3)
ans =
1 0 0
0 1 0
0 0 1
Matriz inversa.
>> M=[1 0 1;1 -1 0;1 1 -2];
>> inv(M)
ans =
U. D. de Matemticas de la ETSITGC
ans =
1 0
0 5
0 0
0
0
9
Polinomios
Se escriben los coeficientes de un polinomio de mayor a menor grado.
>> p=[1 2 3 4]
p=
1 2 3 4
% Polinomio x3+2x2+3x+4
Se obtiene el valor del polinomio para un valor de x
>> polyval(p,-1)
ans =
2
% Evaluacin del polinomio x3+2x2+3x+4 en x=-1
Obtener las races del polinomio
>> roots(p)
ans =
-1.6506
-0.1747 + 1.5469i
-0.1747 - 1.5469i
U. D. de Matemticas de la ETSITGC
Grficas de funciones
Representacin grfica de una funcin en un rango determinado
>>fplot('x^2*sin(1/x)',[-0.05, 0.05])
% Dibuja la funcin x2sin(1/x) en el intervalo cerrado [-0.05, 0.05].
-3
2.5
x 10
2
1.5
1
0.5
0
-0.5
-1
-1.5
-2
-2.5
-0.05
-0.04
-0.03
-0.02
-0.01
0.01
0.02
0.03
0.04
0.05
-4
-2
0
x
2
0
-2
-4
-6
-8
0
10
15
20
25
-2
-4
-6
-6
-4
-2
0
x
Dibujar superficies.
>>ezsurf(' x^2 - y^2 - 1',[-1 1 -1 1])
x2 - y2 - 1
-0.5
-1
-1.5
-2
1
0.5
1
0.5
-0.5
y
-0.5
-1
-1
Grficas.
>> x=linspace(-3,3,500);
>>y=exp(-x.^2);
>>plot(x,y)
>>plot(x,y,'*')
>> plot(x,y,'--')
U. D. de Matemticas de la ETSITGC
>> plot(x,y,'r')
x 2
f x 1
2 x
si x<0
si 0 x<1
si 1 x
U. D. de Matemticas de la ETSITGC
ALGORITMO DE CROUT:
Para programar con MatLab hay que escribir un fichero con las instrucciones
necesarias. Para ello abrimos el editor con los siguientes pasos:
File>>>New>>>M-File, o bien, New Script
Ya podemos escribir las instrucciones:
function[x,l,u]=crout(a,b,c,z);
n=length(a);
l(1)=a(1);
y(1)=z(1)/l(1);
for i=2:n
u(i-1)=b(i-1)/l(i-1);
l(i)=a(i-1)-c(i-1)*u(i-1);
y(i)=(z(i)-c(i-1)*y(i-1))/l(i);
end
x(n)=y(n);
for i=n-1:-1:1
x(i)=y(i)-u(i)*x(i+1)
end
Una vez guardado el archivo con el nombre de la funcin, escribimos las condiciones para
la iteracin.
>>B=sparse([1,1,2,2,2,3,3,3,4,4,4,5,5,5,6,6],[1,2,1,2,3,2,3,4,3,4,5,4,5,6,5,6],[4,1,1,4,1,1,4,
1,1,4,1,1,4,1,1,4]); A=full(B)
A=
4 1 0 0 0 0
1 4 1 0 0 0
0 1 4 1 0 0
0 0 1 4 1 0
0 0 0 1 4 1
0 0 0 0 1 4
>> b=[96;174;30;396;12;90];x=A\b;
>> a=[4,4,4,4,4,4],b=[1,1,1,1,1],c=[1,1,1,1,1],z=[96;174;30;396;12;90], crout(a,b,c,z)
ans =
35.6125
46.4500
23.8124
111.6998
26.9866
15.7533
U. D. de Matemticas de la ETSITGC
10
MTODO DE JACOBI:
Para programar con MatLab hay que escribir un fichero con las instrucciones
necesarias. Para ello abrimos el editor con los siguientes pasos:
File>>>New>>>M-File, o bien, New Script
Ya podemos escribir las instrucciones:
function[x,incr,iter]=jacobi(A,b,x0,tol,maxiter)
%inicializacin
M = diag(diag(A));
N = M-A;
iter = 1;
incr = tol+1
%iteraciones
while incr > tol & iter < maxiter
x = M\(N*x0+b);
incr = norm(x-x0, inf);
x0 = x;
iter = iter+1;
end
if incr > tol
disp('No converge con las iteraciones dadas')
end
% fun(x): funcin a iterar
% x0: estimacin inicial para el proceso de iteracin
% tol: tolerancia en error absoluto para la raz
% incr: variacin entre las races con la norma infinita
% maxiter: mximo nmero de iteraciones permitidas
Una vez guardado el archivo con el nombre de la funcin, escribimos las condiciones para
la iteracin.
>>A=[8,1,-2;1,18,-6;2,1,16], b=[8;-10;-2];
>> x0=[0;0;0];
tol=0.01;
maxiter=4;
jacobi(A,b,x0,tol,maxiter)
incr =1.0100
No converge con las iteraciones dadas
ans =
1.0278
-0.6850
-0.2140
>> x0=[0;0;0];
tol=0.01;
maxiter=5;
jacobi(A,b,x0,tol,maxiter)
incr =1.0100
ans =
1.0321
-0.6840
-0.2107
U. D. de Matemticas de la ETSITGC
11
MTODO DE GAUSSSEIDEL:
Para programar con MatLab hay que escribir un fichero con las instrucciones
necesarias. Para ello abrimos el editor con los siguientes pasos:
File>>>New>>>M-File, o bien, New Script
Ya podemos escribir las instrucciones:
function[x,incr,iter]=gausseidel(A,b,x0,tol,maxiter)
%inicializacin
M = tril(A);
N = M-A;
iter = 1;
incr = tol+1
%iteraciones
while incr > tol & iter < maxiter
x = M\(N*x0+b);
incr = norm(x-x0, inf);
x0 = x;
iter = iter+1;
end
if incr > tol
disp('No converge con las iteraciones dadas')
end
% fun(x): funcin a iterar
% x0: estimacin inicial para el proceso de iteracin
% tol: tolerancia en error absoluto para la raz
% incr: variacin entre las races con la norma infinita
% maxiter: mximo numero de iteraciones permitidas
Una vez guardado el archivo con el nombre de la funcin, escribimos las condiciones para
la iteracin.
>>B=sparse([1,1,2,2,2,3,3,3,4,4,4,5,5,5,6,6],[1,2,1,2,3,2,3,4,3,4,5,4,5,6,5,6],[4,1,1,4,1,1,4,
1,1,4,1,1,4,1,1,4]); A=full(B)
A=
4
1
0
0
0
0
1
4
1
0
0
0
0
1
4
1
0
0
0
0
1
4
1
0
0
0
0
1
4
1
0
0
0
0
1
4
>> b=[96;174;30;396;12;90];x=A\b;
>> x0=[0;0;0;0;0;0], tol=0.01, maxiter=50,
gausseidel(A,b,x0,tol,maxiter)
incr =1.0100
ans =
35.6130
46.4504
23.8122
111.6997
26.9866
15.7534
U. D. de Matemticas de la ETSITGC
12
MTODO DE SOBRERRELAJACIN:
Para programar con MatLab hay que escribir un fichero con las instrucciones
necesarias. Para ello abrimos el editor con los siguientes pasos:
File>>>New>>>M-File, o bien, New Script
Ya podemos escribir las instrucciones:
function[x,incr,iter]=sobrerrelajacion(A,b,x0,omega,tol,maxiter)
% inicializacin
D = diag(diag(A));
L = tril(A,-1);
M = L + D/omega;
N = M-A;
iter = 1;
incr = tol+1
% iteraciones
while incr > tol & iter < maxiter
x = M\(N*x0+b);
incr = norm(x-x0, inf);
x0 = x;
iter = iter+1;
end
if incr > tol
disp('No converge con las iteraciones dadas')
end
% fun(x): funcin a iterar
% x0: estimacin inicial para el proceso de iteracin
% omega: nmero elegido para ponderacin
% tol: tolerancia en error absoluto para la raz
% incr: variacin entre las races con la norma infinita
% maxiter: mximo nmero de iteraciones permitidas
Una vez guardado el archivo con el nombre de la funcin, escribimos las condiciones para
la iteracin.
>>B=sparse([1,1,2,2,2,3,3,3,4,4,4,5,5,5,6,6],[1,2,1,2,3,2,3,4,3,4,5,4,5,6,5,6],[4,1,1,4,1,1,4,
1,1,4,1,1,4,1,1,4]); A=full(B)
A=
4
1
0
0
0
0
1
4
1
0
0
0
0
1
4
1
0
0
0
0
1
4
1
0
0
0
0
1
4
1
0
0
0
0
1
4
U. D. de Matemticas de la ETSITGC
13
POLINOMIOS DE INTERPOLACIN
Polinomios oscilantes: Polinomio de Lagrange
xi
yi
25
34
72
115
92
71
65
100
80
60
40
20
-20
U. D. de Matemticas de la ETSITGC
14
f (x)
-17
f (x)
-15
U. D. de Matemticas de la ETSITGC
15
10
-5
-10
-15
-20
0.5
U. D. de Matemticas de la ETSITGC
1.5
2.5
16
Spline no nodo
>> spline (x, y)
% Genera un registro llamado polinomio segmentario que, entre otros campos,
consta de uno que contiene los coeficientes de todos los polinomios del spline en
una matriz de dimensiones n x 4, ps.coefs
Ejemplo:
0
1
2
3
4
5
6
7
xi
0
25 34 72 115 92 71 65
yi
>> x=[0:7]; y=[0 25 34 72 115 92 71 65]; pp=spline (x, y)
ans =
form: 'pp'
breaks: [0 1 2 3 4 5 6 7]
coefs: [7x4 double]
pieces: 7
order: 4
dim: 1
% La evaluacin del spline en puntos concretos se efecta con ppval, que es el
anlogo de polyval para polinomios
>>ppval (spline (x, y), xi).
>> ppval(spline(x,y),2.5)
ans =
48.8484
% Si slo interesan los valores que tome el spline en ciertos puntos xi, se utiliza
la misma funcin en la forma: yi = spline (x, y, xi).
>> spline(x,y,2.5)
ans =
48.8484
% La matriz que contiene los coeficientes del spline.
>> pp.coefs
ans =
9.5319 -36.5957 52.0638
0
9.5319 -8.0000 7.4681 25.0000
-2.6595 20.5957 20.0638 34.0000
-22.8939 12.6172 53.2767 72.0000
23.2352 -56.0646 9.8293 115.0000
-2.0470 13.6411 -32.5941 92.0000
-2.0470 7.5000 -11.4530 71.0000
% Dibujo:
>> xx=0:0.2:7;
zz=spline(x,y,xx);
plot(x,y,'*',xx,zz)
U. D. de Matemticas de la ETSITGC
17
100
80
60
40
20
Spline completo:
Se calcula con la misma funcin que se utiliza para el spline no nodo, aadiendo al vector
y dos valores, uno al principio y otro al final, que son los valores de la derivada primera
del spline en los puntos inicial y final, a=S(x0) y b=S(xn), respectivamente. Sintaxis:
spline (x, [a y b]).
Ejemplo:
Se consideran los valores de la funcin y = arc tg x en los nodos x = -3, -2, , 2, 3.
Interpolar estos puntos mediante un spline cbico cuya derivada primera en los extremos
coincida con la derivada primera de la funcin.
1
y' ( x )
y' ( 3) 0.1, y' (3) 0.1
1 x2
x1
x2
x3
x4
x5
x6
x0
-3
-2
-1
0
1
2
3
>> x=-3:3;
>> y=atan(x);
>> ps=spline(x,[0.1 y 0.1]);
Los coeficientes de cada pieza del spline estn dados en la siguiente matriz:
>> ps.coefs
ans =
-0.0011 0.0430 0.1000 -1.2490
0.0994 0.0397 0.1827 -1.1071
-0.1126 0.3378 0.5602 -0.7854
-0.1126 -0.0000 0.8980
0
0.0994 -0.3378 0.5602 0.7854
-0.0011 -0.0397 0.1827 1.1071
U. D. de Matemticas de la ETSITGC
18
>> xx=-3:0.1:3;
0.5
>> yy=ppval(ps,xx);
0
>> plot(x,y,'*',xx,atan(xx))
>> hold on
>> plot(x,y,'*',xx,yy,'--')
-0.5
-1
-1.5
-3
-2
-1
U. D. de Matemticas de la ETSITGC
19
0
0
0
0
0
0
0
20
21
22
14
12
10
10
15
20
25
30
35
40
88630835302628377/2251799813685248-...+5241523402050519/576460752303423488 (X-30)3
15
14
13
12
11
10
9
8
7
6
5
10
15
20
25
30
35
U. D. de Matemticas de la ETSITGC
23
Polinomio de Newton
clear;clc;
disp('mtodos numricos');
disp('interpolacin');
n=input('ingrese el grado del polinomio, n=');
fprintf('Se necesitan %.0f puntos\n',n+1);
disp('ingrese los puntos');
for i=1:n+1
fprintf('x%.0f=',i-1);
X(i)=input(' ');
fprintf('y%.0f=',i-1);
Y(i)=input(' ');
end
DD=zeros(n+1);
DD(:,1)=Y;
for k=2:n+1
for J=k:n+1
DD(J,k)=[DD(J,k-1)-DD(J-1,k-1)]/[X(J)-X(J-k+1)];
end
end
disp('La matriz de diferencias divididas es:');
disp(DD);
disp('El polinomio de Newton es');
syms x;
polnew=DD(1,1);
P=1;
for i=1:n
P=P*(x-X(i));
polnew=polnew+P*DD(i+1,i+1);
end
polnew=expand(polnew);
pretty(polnew);
x=input('ingrese el valor de x a interpolar,x=');
vi=eval(polnew);
fprintf('el valor interpolado es %.2f\n',vi);
hold on;
ezplot(polnew,[X(1) X(n+1)]);
plot(x,vi,'r+');
Ejemplo:
xi
yi
25
34
72
115
92
71
65
mtodos numricos
interpolacin
ingrese el grado del polinomio, n=7
U. D. de Matemticas de la ETSITGC
24
0
0
0
0
0
0
0
-0.1079
34
- ---- x7
315
100
80
60
40
20
0
0
U. D. de Matemticas de la ETSITGC
25