Diferenciación Numérica en Matlab

10
Universidad Nacional de Ingeniería P.A.-2008-1 Post-grado Ingeniería Mecánica Diferenciación Numérica en Matlab Matlab puede ser usado para aproximar el proceso de integración. Comencemos con el vector >> t=0:0.1:10; >> x1=cos(2*t); >> y=diff(x1)./diff(t); 1) Encontrar que hace la función "diff()"(">> help diff" or ">> doc diff"), y explique porque la variable y sería la aproximación a la derivada de x1. Trate de dibujar el vector y vs el vector t (">> plot(t,y)" ). No funcionaria porque el vector y es de diferente longitud que el vector t. Para analizar el tamaño, puede tipear ">> size(y)" y ">> size(t)" o podría usar ">> length(y)" y ">> length(t)", desde que estos son vectores de una dimensión. Para resolver el tamaño incompatible, hacer que el vector y tenga un elemento más, luego graficar ambas funciones. >> y(length(y)+1)=y(length(y)); >> plot(t,x1,t,y); >> legend('cos(2*t)','derivative'); 2) Es la función y que ud. esperaba? Justifique? Porque normalmente no se usa la diferenciación numérica. Añadamos un ruido al coseno y vuelva a graficar. Este ruido puede ser medidas experimentales. Note que la señal no luce tan mal, pero, la derivada es una mala aproximación. x=cos(2*t)+0.1*randn(size(t)); >> y=diff(x)./diff(t); >> y(length(y)+1)=y(length(y)); >> plot(t,x,t,y); >> legend('cos(2*t)+noise','derivada'); Métodos Numéricos 1

description

códigos para diferenciar en Matlab

Transcript of Diferenciación Numérica en Matlab

Page 1: Diferenciación Numérica en Matlab

Universidad Nacional de Ingeniería P.A.-2008-1Post-grado Ingeniería Mecánica

Diferenciación Numérica en Matlab

Matlab puede ser usado para aproximar el proceso de integración.  Comencemos con el vector

>> t=0:0.1:10;>> x1=cos(2*t);>> y=diff(x1)./diff(t);

1) Encontrar que hace la función "diff()"(">> help  diff" or ">> doc diff"), y explique porque la variable y sería la aproximación a la derivada de x1.

Trate de dibujar el vector y vs el vector t (">> plot(t,y)" ).  No funcionaria porque el vector y es de diferente longitud que el vector t. Para analizar el tamaño, puede tipear ">> size(y)" y ">> size(t)" o podría usar  ">> length(y)" y ">> length(t)", desde que estos son vectores de una dimensión. Para resolver el tamaño incompatible, hacer que el vector y tenga un elemento más, luego graficar ambas funciones.

>> y(length(y)+1)=y(length(y));>> plot(t,x1,t,y);>> legend('cos(2*t)','derivative');

2) Es la función y que ud. esperaba?  Justifique?

Porque normalmente no se usa la diferenciación numérica.

Añadamos un ruido al coseno y vuelva a graficar.  Este ruido puede ser medidas experimentales. Note que la señal no luce tan mal, pero, la derivada es una mala aproximación.

x=cos(2*t)+0.1*randn(size(t));>> y=diff(x)./diff(t);>> y(length(y)+1)=y(length(y));>> plot(t,x,t,y);>> legend('cos(2*t)+noise','derivada');>> title('Diferenciación con ruido')

3) Explique que es lo que hace la primera línea.

Métodos Numéricos 1

Page 2: Diferenciación Numérica en Matlab

Universidad Nacional de Ingeniería P.A.-2008-1Post-grado Ingeniería Mecánica

Fórmulas de 03 puntos

respectivamente, obtenemos las tres siguientes fórmulas (llamadas de "tres puntos")

Fórmula de los 05 puntos

Fórmula para la segunda derivada

Con las mismas hipótesis, se puede deducir una fórmula de tres puntos para la segunda derivada

EJ

  

  0.00   1.00

Métodos Numéricos 2

Page 3: Diferenciación Numérica en Matlab

Universidad Nacional de Ingeniería P.A.-2008-1Post-grado Ingeniería Mecánica

  0.01   1.010050167  0.02   1.02020134  0.03   1.030454534  0.04   1.040810774  0.05   1.051271096  0.06   1.061836547  0.07   1.072508181  0.08   1.083287068  0.09   1.094174284

Estimar y

SOLUCIÓN.  Para estimar se puede usar la fórmula de cinco puntos mientras que para estimar podemos usar una fórmula de tres puntos, para ser exactos, la

fórmula apropiada es la fórmula para .

Estimación de con la fórmula de cinco puntos.

Seleccionamos cinco puntos de tal manera que,

 

   

0.00  1

0.01  1.010050167

0.02  1.02020134

0.03  1.030454534

0.04  1.040810774

0.05  1.051271096

0.06  1.061836547

0.07  1.072508181

0.08  1.083287068

0.09  1.094174284

Ahora aplicamos la fórmula, como

como se esperaba ya que

Métodos Numéricos 3

Page 4: Diferenciación Numérica en Matlab

Universidad Nacional de Ingeniería P.A.-2008-1Post-grado Ingeniería Mecánica

Estimación de con la fórmula de tres puntos para estimar .

Seleccionamos tres puntos de tal manera que,

   

0.00    1.00

0.01    1.010050167

0.02    1.02020134

0.03    1.030454534

0.04    1.040810774

0.05    1.051271096

0.06    1.061836547

0.07  

  1.072508181

0.08  

  1.083287068

0.09  

  1.094174284

Ahora aplicamos la fórmula, como

Como se esperaba. Observe que la precisión no es tan buena como la obtenida con la fórmula de cinco puntos.

Integración Numérica en Matlab

Matlab puede también ser utilizado para aproximar el proceso de la integración, con más éxito. La figura abajo representa el proceso de aproximación de una integral.

Métodos Numéricos 4

Page 5: Diferenciación Numérica en Matlab

Universidad Nacional de Ingeniería P.A.-2008-1Post-grado Ingeniería Mecánica

 

Empecemos con el mismo vector anterior.

>> t=0:0.1:10;>> x1=cos(2*t);>> y=cumsum(x1.*diff(t));

Esto no funciona porque son vectores de diferente longitud por el uso de diff(),. Por lo que tendremos que hacer lo siguiente:

>> y=cumsum(x1(1:(length(x1)-1)).*diff(t));>> y(length(y)+1)=y(length(y));>> plot(t,x1,t,y)>> legend('cos(2*t)','integral')1) Explicar porqué la variable y será aproximadamente el valor de la integral de x1. Puede ser que desees referir a la imagen sobre su respuesta.

2) Es la función y lo que Ud. esperabat?  Justifique?

Integración en presencia de ruido.

Agreguemos un poco de “ruido al azar” al coseno y tracemos otra vez. Notar que no tenemos el mismo problema que tuvimos con la diferenciación. >> x=cos(2*t)+0.1*randn(size(t));>> y=cumsum(x(1:(length(x)-1))).*diff(t);>> y(length(y)+1)=y(length(y));>> plot(t,x1,t,y)>> legend('cos(2*t)+noise','integral');

Métodos Numéricos 5

Page 6: Diferenciación Numérica en Matlab

Universidad Nacional de Ingeniería P.A.-2008-1Post-grado Ingeniería Mecánica

>> title('Integration with a little noise')

4) Explicar porqué la diferenciación numérica es inferior a la integración en presencia de ruido. Para aclarar, considerar exactamente que es que lo hacen ambos procesos.

Symbolic Manipulations

Podemos también hacer un cálculo simple (diferenciación e integración).

>> syms t>> y=cos(2*t)>> diff(y,t)>> int(y,t) 

We won't be using the symbolic capabilities of MatLab in this course, but they can be quite convenient.  To find out more:

>> doc symbolic5. Este código encuentra los pesos de las fórmulas de integración que están basados en

los polinomios de interpolación:

function A=quadcoeff(x,a,b)% QUADCOEFF coeficientes para las formulas de integración % Uso: A=QUADCOEFF(X,A,B) % Aquí sum(A.*f(X)) aproxima la integral de f(x) en [A,B]N = length(x);V = ones(N,N);for k=2:N    V(k,:) = V(k-1,:).*x(:).';endp = (1:N)';

Métodos Numéricos 6

Page 7: Diferenciación Numérica en Matlab

Universidad Nacional de Ingeniería P.A.-2008-1Post-grado Ingeniería Mecánica

f = (b.^p-a.^p)./p;A = V\f;

a. Use el código para encontrar los coeficientes de la cuadratura

Respuesta: A1 = ____________ , A2 = _____________,

A3=________________.

b. Encontrar los pesos para integrar en [0,1] usando n+1 igualmente espaciado (incluyendo las fronteras) en [0,1]. Cuál es el valor de n que incluye pesos negativos??Respuesta: Pesos para n=2 son ________________________, pesos negativos aparece cuando n=_________

6. Este código calcula integrales por la regla compuesta trapezoidal:

function T = traprule(f,a,b,m)% TRAPRULE Integration using trapezoid rule% Usage: TRAPRULE(FNAME,A,B,M) % This returns the integral of F=FNAME(X)% from A to B using M intervals.x = linspace(a,b,m+1);T = feval(f,a)/2 + feval(f,b)/2;for i=1:m-1 T = T + feval(f,x(i+1));endT = (b-a)/m * T;

y este código calcula la integral usando la regla compuesta de simpson.

function S = simpsonrule(f,a,b,m)% SIMPSONRULE Integration using Simpson's rule% Usage: SIMPSONRULE(FNAME,A,B,M)% This returns the integral of F=FNAME(X)% from A to B using M intervals. M should be even.x = linspace(a,b,m+1);S = feval(f,a)/3 + feval(f,b)/3;for i = 2:2:m S = S + feval(f,x(i))*4/3;endfor i = 3:2:m-1 S = S + feval(f,x(i))*2/3;endS = (b-a)/m * S;

Use estos códigos para calcular usando la regla trapezoidal compuesta y la regla de Simpson compuesta. Verifique que el error es proporcional a h2 y h4, respectivamente, donde h es el ancho del sub-intervalo.  El valor de la integral es

Métodos Numéricos 7

Page 8: Diferenciación Numérica en Matlab

Universidad Nacional de Ingeniería P.A.-2008-1Post-grado Ingeniería Mecánica

aproximadamente 13.725105140577548326

Respuesta:

h=0.1 h=0.05

error trapezoidal ________ ________

Error de Simpson ________ ________

Métodos Numéricos 8