matlab tuto

25
ETSI de Topografía, Geodesia y Cartografía U. D. de Matemáticas de la ETSITGC 1 Laboratorio de Matemáticas (Pequeño 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 instrucción tecleada precedida del símbolo >>. El signo % permite añadir comentarios y aparecerán en verde. La ventana de trabajo es la que tiene el título de COMMAND WINDOW Los cálculos que se asignan a una variable en concreto devuelve ans (del inglés answer) que significa respuesta. Si se añade un punto y coma (;) al final de la instrucción, no muestra ninguna respuesta. Se pueden utilizar las funciones matemáticas habituales. Al pulsar flecha hacia arriba del cursor ^ aparecen las instrucciones anteriores. % Función exponencial evaluada en 1, es decir, el número e >> exp(1) ans = 2.7183 % pi es una variable con valor predeterminado 3.14159... >> pi ans = 3.1416 Por defecto devuelve 4 decimales, aunque no afecta a la precisión de los cálculos se puede cambiar la presentación en pantalla. >> format long >> pi ans = 3.141592653589793 %Para volver al formato estándar >> format >> x=pi/3 x = 1.0472 >> y=sin(x) y = 0.8660 Para conocer las variables que se han usado hasta el momento: >> who Your variables are: ans x y

Upload: sergio-nunez

Post on 07-Feb-2016

256 views

Category:

Documents


1 download

DESCRIPTION

Tutorial de Uso de Matlab

TRANSCRIPT

Page 1: Matlab Tuto

ETSI de Topografía, Geodesia y Cartografía

U. D. de Matemáticas de la ETSITGC 1

Laboratorio de Matemáticas (Pequeño 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 instrucción tecleada precedida del símbolo >>. El signo % permite añadir comentarios y aparecerán en verde.

La ventana de trabajo es la que tiene el título de COMMAND WINDOW Los cálculos que se asignan a una variable en concreto devuelve ans (del inglés

answer) que significa respuesta. Si se añade un punto y coma (;) al final de la instrucción, no muestra ninguna

respuesta. Se pueden utilizar las funciones matemáticas habituales. Al pulsar flecha hacia arriba del cursor ^ aparecen las instrucciones anteriores.

% Función exponencial evaluada en 1, es decir, el número e >> exp(1) ans = 2.7183 % pi es una variable con valor predeterminado 3.14159... >> pi ans = 3.1416

Por defecto devuelve 4 decimales, aunque no afecta a la precisión de los cálculos se puede cambiar la presentación en pantalla.

>> format long >> pi ans = 3.141592653589793 %Para volver al formato estándar >> format >> x=pi/3 x = 1.0472 >> y=sin(x) y = 0.8660

Para conocer las variables que se han usado hasta el momento: >> who Your variables are: ans x y

Page 2: Matlab Tuto

ETSI de Topografía, Geodesia y Cartografía

U. D. de Matemáticas de la ETSITGC 2

Controles de flujo para programación

Al proceso de toma de decisiones se le llama control del flujo

>>for En cada iteración asigna valores y ejecuta órdenes

>>if Actúa si todos los elementos de la expresión son verdaderos

>>while Actúa si todos los elementos de la expresión son verdaderos o ceros

>>break Termina la ejecución de órdenes: for, while

>>end Fin del bucle

>>x==1 ¿Es x = 1?

>>x~=2 ¿Es x distinto de 2?

Page 3: Matlab Tuto

ETSI de Topografía, Geodesia y Cartografía

U. D. de Matemáticas de la ETSITGC 3

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 =

Page 4: Matlab Tuto

ETSI de Topografía, Geodesia y Cartografía

U. D. de Matemáticas de la ETSITGC 4

0.5000 0.2500 0.2500 0.5000 -0.7500 0.2500 0.5000 -0.2500 -0.2500

Matriz diagonal cuya diagonal es el vector v. >> diag(v) ans = 1 0 0 0 2 0 0 0 3

Se puede escribir una matriz diagonal con los elementos de la diagonal de otra matriz

>> diag(diag(M)) ans = 1 0 0 0 5 0 0 0 9

Matriz tridiagonal 5x5 con 0 en la diagonal principal y 1 en la sub y superdiagonal >> diag(ones(1,4),1)+diag(ones(1,4),-1) ans = 0 1 0 0 0 1 0 1 0 0 0 1 0 1 0 0 0 1 0 1 0 0 0 1 0

Matriz dispersa: matriz de un gran tamaño con la mayor parte de sus elementos cero. Se indica primeramente la columna y a continuación la fila con los elementos distintos de cero

>>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]) B = (1,1) 4 (2,1) 1 (1,2) 1 (2,2) 4 (3,2) 1 (2,3) 1 (3,3) 4 (4,3) 1 (3,4) 1 (4,4) 4 (5,4) 1 (4,5) 1 (5,5) 4 (6,5) 1 (5,6) 1 (6,6) 4

Page 5: Matlab Tuto

ETSI de Topografía, Geodesia y Cartografía

U. D. de Matemáticas de la ETSITGC 5

% Para trabajar con la matriz completa, se usa full (llena) >> 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

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 % Evaluación del polinomio x3+2x2+3x+4 en x=-1

Obtener las raíces del polinomio >> roots(p) ans = -1.6506 -0.1747 + 1.5469i -0.1747 - 1.5469i

Page 6: Matlab Tuto

ETSI de Topografía, Geodesia y Cartografía

U. D. de Matemáticas de la ETSITGC 6

Gráficas de funciones

Representación gráfica de una función en un rango determinado >>fplot('x^2*sin(1/x)',[-0.05, 0.05]) % Dibuja la función x2sin(1/x) en el intervalo cerrado [-0.05, 0.05].

Representación gráfica de una función sin determinar el domino

>>ezplot('x^2')

Representación gráfica de una curva en paramétricas

>>ezplot('t-sin(t)','1-cos(t)',[0 8*pi])

Representación gráfica de una función en implícitas >> ezplot('x^2 - y^2 - 1')

-0.05 -0.04 -0.03 -0.02 -0.01 0 0.01 0.02 0.03 0.04 0.05-2.5

-2

-1.5

-1

-0.5

0

0.5

1

1.5

2

2.5x 10

-3

-6 -4 -2 0 2 4 6

0

5

10

15

20

25

30

35

40

x

x2

0 5 10 15 20 25

-8

-6

-4

-2

0

2

4

6

8

10

x

y

x = t-sin(t), y = 1-cos(t)

Page 7: Matlab Tuto

ETSI de Topografía, Geodesia y Cartografía

U. D. de Matemáticas de la ETSITGC 7

Dibujar superficies.

>>ezsurf(' x^2 - y^2 - 1',[-1 1 -1 1])

Gráficas. >> x=linspace(-3,3,500); >>y=exp(-x.^2); >>plot(x,y) >>plot(x,y,'*') >> plot(x,y,'--') >> plot(x,y,'r')

Mantiene en la ventana gráfica los dibujos anteriores. >> hold on Borrar las gráficas anteriores. >> hold off Función definida a trozos >> x=linspace(-2,3,3000); >>y=(x.^2).*(x<0)+1.*((0<=x)&(x<1))+(-x+2).*(1<=x); >> plot(x,y,’.’).

2x si x<0

f x 1 si 0 x<1

2 x si 1 x

-6 -4 -2 0 2 4 6

-6

-4

-2

0

2

4

6

x

y

x2 - y2 - 1 = 0

-1-0.5

00.5

1

-1

-0.5

0

0.5

1

-2

-1.5

-1

-0.5

0

x

x2 - y2 - 1

y

Page 8: Matlab Tuto

ETSI de Topografía, Geodesia y Cartografía

U. D. de Matemáticas de la ETSITGC 8

SISTEMAS DE ECUACIONES LINEALES

Sistema compatible determinado por el método de Gauss. >> A=[1,18,-6;2,1,16;8,1,-2],b=[-10;-2;8],x=A\b A = 1 18 -6 2 1 16 8 1 -2 b = -10 -2 8 x = 1.0326 -0.6834 -0.2114 %Si A es una matriz n por n y b es un vector columna de dimensión n, o una

matriz con varias columnas, entonces X = A \ b es la solución a la ecuación A * X = b. El número de condición de una matriz A en la norma 2, k2(A)=||A||||A-1||, se calcula

también como el cociente entre el valor singular más grande y el más pequeño de A. >> cond(A) ans = 2.5217

Factorización LU >> [L,U]=lu(A) L = 0.1250 1.0000 0 0.2500 0.0420 1.0000 1.0000 0 0 U = 8.0000 1.0000 -2.0000 0 17.8750 -5.7500 0 0 16.7413 %Se cumple L*U=A

Si L no sale triangular superior hace falta permutar las ecuaciones >> [L,U, P]=lu(A) L = 0.1250 1.0000 0 0.2500 0.0420 1.0000 1.0000 0 0 U = 8.0000 1.0000 -2.0000 0 17.8750 -5.7500 0 0 16.7413P = P = 0 0 1

Page 9: Matlab Tuto

ETSI de Topografía, Geodesia y Cartografía

U. D. de Matemáticas de la ETSITGC 9

1 0 0 0 1 0 >> B=[8,1,-2;1,18,-6;2,1,16];b=[8;-10;-2]; >> [L,U,P]=lu(B) L = 1.0000 0 0 0.1250 1.0000 0 0.2500 0.0420 1.0000 U = 8.0000 1.0000 -2.0000 0 17.8750 -5.7500 0 0 16.7413 P = 1 0 0 0 1 0 0 0 1

Page 10: Matlab Tuto

ETSI de Topografía, Geodesia y Cartografía

U. D. de Matemáticas de la ETSITGC 10

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 función, escribimos las condiciones para la iteración. >>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

Page 11: Matlab Tuto

ETSI de Topografía, Geodesia y Cartografía

U. D. de Matemáticas de la ETSITGC 11

MÉTODO 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) %inicialización 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): función a iterar % x0: estimación inicial para el proceso de iteración % tol: tolerancia en error absoluto para la raíz % incr: variación entre las raíces con la norma infinita % maxiter: máximo número de iteraciones permitidas Una vez guardado el archivo con el nombre de la función, escribimos las condiciones para la iteración. >>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

Page 12: Matlab Tuto

ETSI de Topografía, Geodesia y Cartografía

U. D. de Matemáticas de la ETSITGC 12

MÉTODO DE GAUSS‐SEIDEL: 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) %inicialización 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): función a iterar % x0: estimación inicial para el proceso de iteración % tol: tolerancia en error absoluto para la raíz % incr: variación entre las raíces con la norma infinita % maxiter: máximo numero de iteraciones permitidas Una vez guardado el archivo con el nombre de la función, escribimos las condiciones para la iteración. >>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

Page 13: Matlab Tuto

ETSI de Topografía, Geodesia y Cartografía

U. D. de Matemáticas de la ETSITGC 13

MÉTODO DE SOBRERRELAJACIÓN: 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) % inicialización 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): función a iterar % x0: estimación inicial para el proceso de iteración % omega: número elegido para ponderación % tol: tolerancia en error absoluto para la raíz % incr: variación entre las raíces con la norma infinita % maxiter: máximo número de iteraciones permitidas Una vez guardado el archivo con el nombre de la función, escribimos las condiciones para la iteración. >>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], omega=1.2, tol=0.01, maxiter=50, sobrerrelajacion(A,b,x0,omega, tol,maxiter) incr =1.0100 ans = ‐35.6124 46.4497 23.8126 ‐111.6998 26.9866 15.7533

Page 14: Matlab Tuto

ETSI de Topografía, Geodesia y Cartografía

U. D. de Matemáticas de la ETSITGC 14

POLINOMIOS DE INTERPOLACIÓN Polinomios oscilantes: Polinomio de Lagrange

Polinomio de interpolación de grado n >>polyfit(x,y,n) Corresponde al polinomio 1

1 2 1( ) .... n n

n np x p x p x p x p

Ejemplo:

ix 0 1 2 3 4 5 6 7

iy 0 25 34 72 115 92 71 65

>> x=[0:7]; y=[0 25 34 72 115 92 71 65]; polyfit(x,y,7) ans = -0.1079 2.4944 -22.1222 93.9861 -195.3722 181.5194 -35.3976 -0.0000

En este caso 7 6 5 4 3 2( ) 0.1079 2.4944 22.1222 93.9861x 195.3722x +1 81.5194 35.3976 p x x x x x x

Evaluar en un punto particular x0 >> polyval(ans,x0) >> polyval(ans,2.5) ans = 47.3867 Para representar los puntos y el polinomio >> p=polyfit(x,y,7); >> hold on % Mantiene los ejes igual y se añade la gráfica >> xx=0:0:7; yy=polyval(p,xx); plot(x,y,'*',xx,yy) % Dibujo:

0 1 2 3 4 5 6 7

-20

0

20

40

60

80

100

120

Page 15: Matlab Tuto

ETSI de Topografía, Geodesia y Cartografía

U. D. de Matemáticas de la ETSITGC 15

Polinomios oscilantes: Polinomio de Hermite Polinomio de interpolación de grado n 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 hp = hermite (x, y, yp) n = length (x); z = zeros (1, 2*n); f = zeros (1, 2*n); z(1:2:2*n-1) = x; z(2:2:2*n) = x; f(1) = y(1); f(3:2:2*n-1) = (y(2:n) - y(1:n-1) ) ./ ( x(2:n) - x(1:n-1)); f(2:2:2*n) = yp; for i = 3:2*n f(i:2*n) = (f(i:2*n) - f(i-1:2*n-1) ) ./ ( z(i:2*n) - z(1:2*n-i+1)); end; hp = zeros (1, 2*n); p = [1]; for i = 1:2*n hp = hp + f(i) * [zeros(1,2*n-i) p]; p = conv (p, [1 -z(i)]); end; % x: abscisas de los puntos a interpolar % y: ordenadas de los puntos a interpolar % yp: derivadas de los puntos a interpolar % hp: coeficientes del polinomio de Hermite % conv: convolución de dos vectores. Algebraicamente, la convolución es la misma operación que la multiplicación de los polinomios cuyos coeficientes son los elementos de los dos vectores. w=con(u,v) w(1) = u(1)*v(1) w(2) = u(1)*v(2)+u(2)*v(1) w(3) = u(1)*v(3)+u(2)*v(2)+u(3)*v(1) ... w(n) = u(1)*v(n)+u(2)*v(n-1)+ ... +u(n)*v(1) Si m es la longitud de u y n la longitud de v, entonces m+n-1 es la longitud de w. Una vez guardado el archivo con el nombre de la función, escribimos los datos:

Ejemplo:

x 0 1 3

f (x) 1 5 -17

f ’(x) 3 5 -15

Page 16: Matlab Tuto

ETSI de Topografía, Geodesia y Cartografía

U. D. de Matemáticas de la ETSITGC 16

>> x=[0 1 3]; y=[1 5 -17]; yp=[3 5 -15]; hp=hermite(x,y,yp) hp = 1 -6 9 -3 3 1

En este caso 5 4 3 2( ) 6 9x 3x +3 1 p x x x x

Para representar los puntos y el polinomio >> xx=[0:0.1:3]; yy=polyval(hp,xx); plot(x,y,'*',xx,yy')

0 0.5 1 1.5 2 2.5 3-20

-15

-10

-5

0

5

10

Page 17: Matlab Tuto

ETSI de Topografía, Geodesia y Cartografía

U. D. de Matemáticas de la ETSITGC 17

INTERPOLACIÓN POLINÓMICA SEGMENTARIA: SPLINES CÚBICOS

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:

ix 0 1 2 3 4 5 6 7

iy 0 25 34 72 115 92 71 65

>> 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 evaluación del spline en puntos concretos se efectúa con ppval, que es el análogo de polyval para polinomios >>ppval (spline (x, y), xi). >> ppval(spline(x,y),2.5) ans = 48.8484 % Si sólo interesan los valores que tome el spline en ciertos puntos xi, se utiliza la misma función 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)

Page 18: Matlab Tuto

ETSI de Topografía, Geodesia y Cartografía

U. D. de Matemáticas de la ETSITGC 18

Spline “completo”:

Se calcula con la misma función que se utiliza para el spline “no nodo”, añadiendo 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 función y = arc tg x en los nodos x = -3, -2, …, 2, 3.

Interpolar estos puntos mediante un spline cúbico cuya derivada primera en los extremos

coincida con la derivada primera de la función.

0.1(3)y' ,1.0)3('yx1

1)x('y

2

x0 x1 x2 x3 x4 x5 x6 -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 están 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

0 1 2 3 4 5 6 70

20

40

60

80

100

120

Page 19: Matlab Tuto

ETSI de Topografía, Geodesia y Cartografía

U. D. de Matemáticas de la ETSITGC 19

Dibujamos la función (trazo continuo rojo) y el polinomio segmentario (trazo discontinuo verde): >> xx=-3:0.1:3;

>> yy=ppval(ps,xx);

>> plot(x,y,'*',xx,atan(xx))

>> hold on

>> plot(x,y,'*',xx,yy,'--')

Spline cúbico natural o con frontera libre:

x=input('Ingrese Los valores de x [x0 ...xf] : '); y=input('Ingrese Los valores de y [y0 ...yf] : '); if length(y)~=length(x)

disp ('x e y no son de la misma longitud'); end

n = length(x)-1; h = x(2:n+1)-x(1:n); a=y; for i=1:n l(i)=(a(i+1)-a(i))/h(i); end l(n+1)=0; % revisar si es necesario for i=2:n

m(i)=3*(l(i)-l(i-1)); end % introducir condiciones de frontera m(1)=0; %condición inicio de frontera m(n+1)=0; %condición fin de frontera % Armando matriz A A(1,1) = 1; for i=2:n

A(i,i-1:i+1) = [h(i-1) 2*(h(i-1)+h(i)) h(i)]; end A(n+1,n+1) = 1; c=(A\m')'; for i=1:n b(i)=l(i)-h(i)*(2*c(i)+c(i+1))/3; end

-3 -2 -1 0 1 2 3-1.5

-1

-0.5

0

0.5

1

1.5

Page 20: Matlab Tuto

ETSI de Topografía, Geodesia y Cartografía

U. D. de Matemáticas de la ETSITGC 20

for i=1: n d(i)=(c(i+1)-c(i))/(3*h(i));

end X=sym('X'); for i=1:n s(i)=a(i)+b(i)*(X-x(i))+c(i)*(X-x(i))^2+d(i)*(X-x(i))^3; end % gráfica figure(1) grid on plot(x,y,'o','MarkerSize',10,'MarkerEdgeColor','b','MarkerFaceColor','b') for i=1:n figure(2) grid on xx=x(i):1/100:x(i+1); ezplot(s(i),xx) hold on end axis([min(x) max(x) min(y) max(y)]) % diff(int(s(1))) % Mostrar datos x,y,A,h,l,m,a,b,c,d % Para mostrar las ecuaciones interpoladoras for i=1:n

disp('-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-__-_-_-_-_-_-') disp('entre xi y xf:'), x(i),x(i+1)

pretty((expand((vpa(s(i),5))))) % decimales significativos end Ejemplo: >> x=[2 2.7 3.8 6 8 10 13 16 18 21 25 30 36]; y=[5 7.8 9 10 10.2 10.3 10.4 14.5 15 15.4 15.5 14 5]; x = 2.0000 2.7000 3.8000 6.0000 8.0000 10.0000 13.0000 16.0000 18.0000 21.0000 25.0000 30.0000 36.0000 y = 5.0000 7.8000 9.0000 10.0000 10.2000 10.3000 10.4000 14.5000 15.0000 15.4000 15.5000 14.0000 5.0000 A = 1.0000 0 0 0 0 0 0 0 0 0 0 0 0 0.7000 3.6000 1.1000 0 0 0 0 0 0 0 0 0 0 0 1.1000 6.6000 2.2000 0 0 0 0 0 0 0 0 0 0 0 2.2000 8.4000 2.0000 0 0 0 0 0 0 0 0 0 0 0 2.0000 8.0000 2.0000 0 0 0 0 0 0 0 0 0 0 0 2.0000 10.0000 3.0000 0 0 0 0 0 0 0 0 0 0 0 3.0000 12.0000 3.0000 0 0 0 0 0

Page 21: Matlab Tuto

ETSI de Topografía, Geodesia y Cartografía

U. D. de Matemáticas de la ETSITGC 21

0 0 0 0 0 0 3.0000 10.0000 2.0000 0 0 0 0 0 0 0 0 0 0 0 2.0000 10.0000 3.0000 0 0 0 0 0 0 0 0 0 0 0 3.0000 14.0000 4.0000 0 0 0 0 0 0 0 0 0 0 0 4.0000 18.0000 5.0000 0 0 0 0 0 0 0 0 0 0 0 5.0000 22.0000 6.0000 0 0 0 0 0 0 0 0 0 0 0 0 1.0000 h = 0.7000 1.1000 2.2000 2.0000 2.0000 3.0000 3.0000 2.0000 3.0000 4.0000 5.0000 6.0000 l = 4.0000 1.0909 0.4545 0.1000 0.0500 0.0333 1.3667 0.2500 0.1333 0.0250 -0.3000 -1.5000 0 m = 0 -8.7273 -1.9091 -1.0636 -0.1500 -0.0500 4.0000 -3.3500 -0.3500 -0.3250 -0.9750 -3.6000 0 a = 5.0000 7.8000 9.0000 10.0000 10.2000 10.3000 10.4000 14.5000 15.0000 15.4000 15.5000 14.0000 5.0000 b = 4.5791 2.8418 0.3193 0.3096 0.0672 -0.1282 0.8655 0.8662 0.0190 0.1309 -0.0277 -0.8453 c = 0 -2.4819 0.1888 -0.1932 0.0720 -0.1697 0.5009 -0.5007 0.0771 -0.0398 0.0001 -0.1637 0 d = -1.1819 0.8093 -0.0579 0.0442 -0.0403 0.0745 -0.1113 0.0963 -0.0130 0.0033 -0.0109 0.0091 -_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_¬_-_-_-_-_-_- entre xi y xf: ans = 2 ans = 2.7000 5.2970 - 9.6037 X - 1.1819 X3 + 7.0914 X2 -_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_¬_-_-_-_-_-_- entre xi y xf: ans = 2.7000 ans = 3.8000 -33.895469730000000 + 33.94366970000 X2 - 9.0373110 X3 + 0.80931 X -_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_¬_-_-_-_-_-_- entre xi y xf: ans = 3.8000 ans = 6

Page 22: Matlab Tuto

ETSI de Topografía, Geodesia y Cartografía

U. D. de Matemáticas de la ETSITGC 22

13.688863360000000000 - 3.62292160000000 X2 + 0.8486320000 X3 - 0.057880 X -_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_¬_-_-_-_-_-_- entre xi y xf: ans = 6 ans = 8 -8.359696 + 7.401318 X - 0.988738 X2 + 0.044196 X3 -_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_¬_-_-_-_-_-_- entre xi y xf: ans = 8 ans = 10 34.888592 - 8.816765 X + 1.038521 X2 - 0.040273 X3 -_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_¬_-_-_-_-_-_- entre xi y xf: ans = 10 ans = 13 -79.896000 + 25.618450 X - 2.405000 X2 + 0.074511 X3 -_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_¬_-_-_-_-_-_- entre xi y xf: ans = 13 ans = 16 328.30798 - 68.58244 X + 4.84123 X2 - 0.11129 X3 -_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_¬_-_-_-_-_-_- entre xi y xf: ans = 16 ans = 18 -521.952108 + 90.841314 X - 5.122754 X2 + 0.096293 X3 -_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_¬_-_-_-_-_-_- entre xi y xf: ans = 18 ans = 21 115.340056 - 15.373988 X + 0.778096 X2 - 0.012982 X3 -_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_¬_-_-_-_-_-_- entre xi y xf: ans =

Page 23: Matlab Tuto

ETSI de Topografía, Geodesia y Cartografía

U. D. de Matemáticas de la ETSITGC 23

21 ans = 25 -35.6780720 + 6.2000590 X - 0.2492420 X2 + 0.0033250 X3 -_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_¬_-_-_-_-_-_- entre xi y xf: ans = 25 ans = 30 186.90038750 - 20.50933800 X + 0.81913342 X2 - 0.010920 X3 -_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_¬_-_-_-_-_-_- entre xi y xf: ans = 30 ans = 36

-353.4432000 + 33.5248900 X - 0.9820040 X2 + 0.0090926 X3

0 5 10 15 20 25 30 35 404

6

8

10

12

14

16

5 10 15 20 25 30 355

6

7

8

9

10

11

12

13

14

15

X

88630835302628377/2251799813685248-...+5241523402050519/576460752303423488 (X-30)3

Page 24: Matlab Tuto

ETSI de Topografía, Geodesia y Cartografía

U. D. de Matemáticas de la ETSITGC 24

Polinomio de Newton clear;clc; disp('métodos numéricos'); disp('interpolación'); 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:

ix 0 1 2 3 4 5 6 7

iy 0 25 34 72 115 92 71 65

métodos numéricos interpolación ingrese el grado del polinomio, n=7

Page 25: Matlab Tuto

ETSI de Topografía, Geodesia y Cartografía

U. D. de Matemáticas de la ETSITGC 25

Se necesitan 8 puntos ingrese los puntos x0= 0 y0= 0 x1= 1 y1= 25 x2= 2 y2= 34 x3= 3 y3= 72 x4= 4 y4= 115 x5= 5 y5= 92 x6= 6 y6= 71 x7= 7 y7= 65 La matriz de diferencias divididas es: 0 0 0 0 0 0 0 0 25.0000 25.0000 0 0 0 0 0 0 34.0000 9.0000 -8.0000 0 0 0 0 0 72.0000 38.0000 14.5000 7.5000 0 0 0 0 115.0000 43.0000 2.5000 -4.0000 -2.8750 0 0 0 92.0000 -23.0000 -33.0000 -11.8333 -1.9583 0.1833 0 0 71.0000 -21.0000 1.0000 11.3333 5.7917 1.5500 0.2278 0 65.0000 - 6.0000 7.5000 2.1667 -2.2917 -1.6167 -0.5278 -0.1079 El polinomio de Newton es 14867 35167 65347 6767 1991 449 34 - -------- x - -------- x3 + -------- x2 + ------ x4 - ------ x5 + ----- x6 - ---- x7 420 180 360 72 90 180 315 ingrese el valor de x a interpolar, x=2.5 el valor interpolado es 47.39

0 1 2 3 4 5 6 7

0

20

40

60

80

100

120

x

-14867/420 x-35167/180 x3+65347/360 x2+...-34/315 x7