Professional Documents
Culture Documents
El procedimiento de Simpson
El desplazamiento del mvil durante el intervalo de tiempo ti=ti-ti1 comprendido entre ti-1 y ti es aproximadamente el rea del rectngulo <vi>ti.
El desplazamiento total x-x0 entre el instante inicial t0, y el instante
final t=tn es, aproximadamente
xx0i=1n<vi>ti
ti
0
1
2
3
4
5
6
7
9
0
1
2
3
4
5
6
7
8
10
10
<vi>
27.5
39.5
49.5
57.5
63.5
67.5
69.5
67.5
63.5
<vi>ti
27.5
39.5
49.5
57.5
63.5
67.5
69.5
67.5
63.5
575.0
2.
3.
4.
5.
2.
3.
hyi+12h(yi+1yi)=12h(yi+1+yi)
+h2(yn2+yn1)+h2(yn1+yn)=h2(y1+2y2+2y3+2y4+...+2yn2+2yn1+yn)
Integrales simples
La funcin quad(function, a, b);devuelve el resultado aproximado de la
integral cuando se le pasa la funcin a integrar en el primer
parmetro function, los lmites a y b de la integral. Ejemplos:
010(t2+14t+21)dt=t33+7t2+21t100=17303=576.6667m
>> f=@(x) -x.^2+14*x+21;
>> q=quad(f,0,10)
q = 576.6667
Integrales dobles
>> integral_doble1
El valor de la integral es: 961.181
la funcin f(t,x),
el instante final tf
dxdt=cost
x(Euler)
x=sint
/6
0.866
0.523
0.5
/3
0.5
0.977
0.866
/2
1.239
2/3
-0.5
1.239
0.866
5/6
-0.866
0.977
0.5
0.523
Esta tabla nos ilustra el modo de aplicar el mtodo de Euler a una ecuacin
diferencial de primer orden. Para aplicar el mtodo de Euler precisamos de un
paso h pequeo, incluso as los errores se van acumulando y al cabo de cierto
tiempo la diferencia entre el valor exacto y el calculado es grande.
Escribimos en script euler_script en el que definiremos la funcin f(t,x), las
condiciones iniciales y llamaremos a la funcin euler. Finalmente,
representaremos grficamente la solucin exacta y la obtenida aplicando el
mtodo de Euler
tf=input('tiempo final, tf: ');
n=input('nmero de pasos, n: ');
f=@(t,x) cos(t);
%condiciones iniciales
t0=0;
x0=0;
[t,x]=euler(f,t0,tf,x0,n);
hold on
plot(t,x,'b')
y=sin(t);
plot(t,y,'r')
xlabel('t')
ylabel('x');
legend('aproximada','exacta')
title('dx/dt=cost')
hold off
Sea una ecuacin diferencial de primer orden, con la condicin inicial de que
en el instante t0 el valor inicial de xes x0
Se elige una anchura de paso h y se calculan cuatro nmeros k1, k2, k3, k4 de
acuerdo con el procedimiento esquematizado en la tabla adjunta. Segn el
procedimiento ordinario de Runge-Kutta, a partir del valor de x en el
instante t se determina el valor de x en el instante t+h mediante la frmula que
figura en la ltima fila de dicha tabla.
dxdt=f(t,x)
k1=hf(t,x)k2=hf(t+12h,x+12k1)k3=hf(t+12h,x+12k2)k4=hf(t+h,x+k3)
x(t+h)=x(t)+16(k1+2k2+2k3+k4)
la funcin f(t,x),
la condicin inicial de que en el instante t0el valor inicial
es x0,
el instante final tf
el nmero de pasos de integracin n comprendidos entre el
instante inical t0 y final tf.
k2=h*f(t(i)+h/2,x(i)+k1/2);
k3=h*f(t(i)+h/2,x(i)+k2/2);
k4=h*f(t(i)+h,x(i)+k3);
x(i+1)=x(i)+(k1+2*k2+2*k3+k4)/6;
end
end
Rdqdt=VqC0qdqCVq=1RC0tdtq=CV(1exp(tRC))
2.
El tiempo final, tf
el nmero de pasos, n.
3.
4.
5.
6.
el valor inicial de x es x0
el valor inicial de y es y0
dxdt=f(t,x,y)
dydt=g(t,x,y)
k1=hf(t,x,y)k2=hf(t+12h,x+12k1,y+1
l1=hg(t,x,y)l2=hg(t+12h,x+12k1,y+
l1,)k3=hf(t+12h,x+12k2,y+12l2)k4=hf
l1)l3=hg(t+12h,x+12k2,y+12l2)l4=hg
12
(t+h,x+k3,y+l3)
(t+h,x+k3,y+l3)
x(t+h)=x(t)+16(k1+2k2+2k3+k4)
y(t+h)=y(t)+16(l1+2l2+2l3+l4)
l1=h*g(t(i),x(i),y(i));
k2=h*f(t(i)+h/2,x(i)+k1/2,y(i)+l1/2);
l2=h*g(t(i)+h/2,x(i)+k1/2,y(i)+l1/2);
k3=h*f(t(i)+h/2,x(i)+k2/2,y(i)+l2/2);
l3=h*g(t(i)+h/2,x(i)+k2/2,y(i)+l2/2);
k4=h*f(t(i)+h,x(i)+k3,y(i)+l3);
l4=h*g(t(i)+h,x(i)+k3,y(i)+l3);
x(i+1)=x(i)+(k1+2*k2+2*k3+k4)/6;
y(i+1)=y(i)+(l1+2*l2+2*l3+l4)/6;
end
end
dxdt=v
dvdt=f(t,x,v)
k1=hvk2=h(v+12l1)k3=
l1=hf(t,x,v)l2=hf(t+12h,x+12k1,v+12l1)l3=hf(t+12
h(v+12l2)k4=h(v+l3)
h,x+12k2,v+12l2)l4=hf(t+h,x+k3,v+l3)
x(t+h)=x(t)
+16(k1+2k2+2k3+k4)
v(t+h)=v(t)+16(l1+2l2+2l3+l4)
la funcin f (t,x,v)
Nos devuelve los vectores de las posiciones x y las velocidades v para cada
instante que se guarda en el vector tcomprendido entre el instante inicial t0 y el
final tf.
function [t,x,v] =rk_2(f,t0,tf,x0,v0,n)
h=(tf-t0)/n;
t=t0:h:tf;
x=zeros(n+1,1); %reserva memoria para n+1 element(i)os del
vect(i)or x(i)
v=zeros(n+1,1);
x(1)=x0; v(1)=v0;
for i=1:n
k1=h*v(i);
l1=h*f(t(i),x(i),v(i));
k2=h*(v(i)+l1/2);
l2=h*f(t(i)+h/2,x(i)+k1/2,v(i)+l1/2);
k3=h*(v(i)+l2/2);
l3=h*f(t(i)+h/2,x(i)+k2/2,v(i)+l2/2);
k4=h*(v(i)+l3);
l4=h*f(t(i)+h,x(i)+k3,v(i)+l3);
x(i+1)=x(i)+(k1+2*k2+2*k3+k4)/6;
v(i+1)=v(i)+(l1+2*l2+2*l3+l4)/6;
end
end
+Bcos(t))v=dxdt=exp(t)(Asin(t)+Bcos(t))+exp(t)(Acos(t)
Bsin(t))
dxdt=vx
dvxdt=f(t,x,vx,y,vy)
k1=hvxk2=h(vx+12l1)
l1=hf(t,x,vx,y,vy)l2=hf(t+12h,x+12k1,vx+12l1,y+12q1,vy+12m1)l3=h
k3=h(vx+12l2)k4=h(vx
f(t+12h,x+12k2,vx+12l2,y+12q2,vy+12m2)l4=hf(t+h,x+k3,vx+l3,y+q3,
+l3)
vy+m3)
x(t+h)=x(t)
+16(k1+2k2+2k3+k4)
dydt=vy
vx(t+h)=vx(t)+16(l1+2l2+2l3+l4)
dvydt=g(t,x,vx,y,vy)
q1=hvyq2=h(vy+12m1
m1=hg(t,x,vx,y,vy)m2=hg(t+12h,x+12k1,vx+12l1,y+12q1,vy+12m1)
)q3=h(vy+12m2)q4=h
m3=hg(t+12h,x+12k2,vx+12l2,y+12q2,vy+12m2)m4=hg(t+h,x+k3,vx
(vy+m3)
+l3,y+q3,vy+m3)
y(t+h)=y(t)
+16(q1+2q2+2q3+q4)
vy(t+h)=vy(t)+16(m1+2m2+2m3+m4)
Nos devuelve los vectores posicin (x,y) y velocidad (vx,vy) para cada instante
que se guarda en el vector tcomprendido entre el instante inicial t0 y el final tf.
function [t,x,vx,y,vy]=rk_2_2(f,g,t0,tf,x0,vx0,y0,vy0,n)
h=(tf-t0)/n;
t=t0:h:tf;
x=zeros(n+1,1); %reserva memoria para n+1 element(i)os del
vect(i)or x(i)
y=zeros(n+1,1);
vx=zeros(n+1,1);
vy=zeros(n+1,1);
x(1)=x0; vx(1)=vx0;
y(1)=y0; vy(1)=vy0;
for i=1:n
k1=h*vx(i);
l1=h*f(t(i),x(i),vx(i),y(i),vy(i));
q1=h*vy(i);
m1=h*g(t(i),x(i),vx(i),y(i),vy(i));
k2=h*(vx(i)+l1/2);
l2=h*f(t(i)+h/2,x(i)+k1/2,vx(i)+l1/2,y(i)+q1/2,vy(i)+m1/2);
q2=h*(vy(i)+m1/2);
m2=h*g(t(i)+h/2,x(i)+k1/2,vx(i)+l1/2,y(i)+q1/2,vy(i)+m1/2);
k3=h*(vx(i)+l2/2);
l3=h*f(t(i)+h/2,x(i)+k2/2,vx(i)+l2/2,y(i)+q2/2,vy(i)+m2/2);
q3=h*(vy(i)+m2/2);
m3=h*g(t(i)+h/2,x(i)+k2/2,vx(i)+l2/2,y(i)+q2/2,vy(i)+m2/2);
k4=h*(vx(i)+l3);
l4=h*f(t(i)+h,x(i)+k3,vx(i)+l3,y(i)+q3,vy(i)+m3);
q4=h*(vy(i)+m3);
m4=h*g(t(i)+h,x(i)+k3,vx(i)+l3,y(i)+q3,vy(i)+m3);
x(i+1)=x(i)+(k1+2*k2+2*k3+k4)/6;
vx(i+1)=vx(i)+(l1+2*l2+2*l3+l4)/6;
y(i+1)=y(i)+(q1+2*q2+2*q3+q4)/6;
vy(i+1)=vy(i)+(m1+2*m2+2*m3+m4)/6;
end
end
Teniendo en cuenta que la fuerza que ejerce el Sol sobre un planeta viene
descrita por la ley de la Gravitacin Universal
F=GMmr2
Su sintaxis es la siguiente
[t,x]=ode45(odefun,tspan,x0, options, params)
ylabel('q');
title('carga del condensador')
title('dx/dt=-ax, dy/dt=ax-by')
plot(t,x)
xlabel('t')
ylabel('x,y');
title('dx/dt=-ax, dy/dt=ax-by')
dxdt=v
dvdt=f(t,x,v)
dxdt=vx
dvxdt=f(t,x,vx,y,vy)
dydt=vy
dvydt=g(t,x,vx,y,vy)
dydt=vydvydt=42y(x2+y2)3/2
Opciones de ode45
Velocidad Indice
x(2)
ie
0.0000
2.5000
-0.0000
2.4378
0.0000
2.7173
3.1662
1.1322
-0.0000
function [detect,stopin,direction]=opcion1_ode45(t,x)
detect=[x(1) x(2)]; %[posicin, velocidad]
stopin=[0 0];
direction=[0 0];
end
ylabel('x');
title('oscilador amortiguado')
hold off
2.
3.
4.
5.
6.
Interpolacin
En este captulo se estudia la interpolacin y la regresin.
La regresin es el ajuste de los datos experiementales a una funcin que
describe el modelo fsico particular. Por ejemplo, en un experiemento de
movimiento rectilneo uniforme, los datos experimentales (tiempo, posicin
del mvil) se ajustan a una lnea recta, ya que la ecuacin que describe el
movimiento rectilneo uniforme esx=x0+vt.
En la interpolacin la funcin pasa por todos los puntos.
Este pequeo programa muestra la diferencia
%datos experiementales
x=0.5:0.5:3;
y=[0.7,1.2,1.3,1.2,0.8,0.3];
hold on
plot(x,y,'ro','markersize',4,'markerfacecolor','r')
xx=linspace(0,3.1,100);
%regresin
p=polyfit(x,y,2); %polinomio de segundo grado
yy=polyval(p,xx);
plot(xx,yy,'b')
%interpolacin
yy=spline(x,y,xx);
plot(xx,yy,'r')
hold off
grid on
legend('datos','regresin','interpolacin')
xlabel('x')
ylabel('y');
title('Interpolacin, regresin')
Interpolacin lineal
La interpolacin lineal es muy sencilla. Disponemos de pares de datos
(xk,yk) k=1,2...n. Queremos conocer el valor de y para un valor cualesquiera
de x en el intervalo x1 a xn. Supongamos que x est en el intervalo (xk,xk+1) tal
como se muestra en la figura. Trazamos la recta que pasa por los puntos ( xk,yk)
y (xk+1,yk+1), cuya ecuacin es
y=(xxk)yk+1(xxk+1)yk(xk+1xk)
x=[0,pi/3,2*pi/3,pi]; %datos
y=sin(x);
xx=0:pi/90:pi; %funcin
yy=sin(xx);
x0=[pi/6,pi/2,5*pi/6]; %interpolacin lineal
A=vander(x);
p=A\y'; %coeficientes del polinomio
hold on
plot(xx,yy,'b') %datos y funcin
plot(x,y,'bo','markersize',4,'markerfacecolor','b')
yy=polyval(p,xx); %polinomio
plot(xx,yy,'r')
y0=polyval(p,x0); %valores interpolados
plot(x0,y0,'ro','markersize',6,'markerfacecolor','r')
hold off
xlabel('x');
ylabel('y')
title('Interpolacin con un polinomio de tercer gardo')
Interpolacin de Lagrange
Queremos encontrar los coeficientes de un polinomio de grado N
a1xN+a2xN-1+...+aNx+aN+1
que pase por todos los pares de datos (x1,y1), (x2,y2), ...(xN+1,yN+1). Los
coeficientes se pueden obtener resolviendo el sistema de ecuaciones:
a1xN1+a2xN11+aNx1+aN+1=y1a1xN2+a2xN12+aNx2+aN+1
=y2.....a1xNN+1+a2xN1N+1+aNxN+1+aN+1=yN+1
En forma matricial
xN1xN2...xNN+1xN11xN12...xN1N+1............x1x2...xN+111...1
a1a2...aN+1=y1y2...yN+1
0.0000
-5.2142
3.9256
-0.0003
0.0057
-0.0595
0.3782
-1.4951
3.6430
-1.1823
Como puede probarse fcilmente este polinomio pasa por todos los puntos
(xi,yi).
Podemos elaborar una funcin denominada lagrange_3 que devuelva el valor
interpolado yy de xx cuando se le pasa los vectores x e y que guardan las
abscisas y ordenadas (xi,yi) de los datos
function yy = lagrange_3(x,y,xx)
n = length(x);
for i=1:n
w(i)=prod(xx-x([1:i-1 i+1:n]))*y(i)/prod( x(i)-x([1:i-1 i+1:n]) )
;
end
yy=sum(w);
end
x=[0.97 1.12 2.92 3.00 3.33 3.97 6.10 8.39 8.56 9.44];
y=[2.58 0.43 0.06 5.74 7.44 8.07 6.37 2.51 1.44 0.52];
yy=lagrange_3(x,y,1.0)
=
10.0725
yy=lagrange_3(x,y,2.0)
= -203.7000
-10
-20
-16
0.0000
-0.0003
0.0057
-5.2142
3.9256
-1.1823
-0.0595
0.3782
-1.4951
3.6430
1.8338
Splines
Vamos a explicar mediante un ejemplo el procedimiento de interpolacin
denominado "splines", para generalizarlo despus a cualquier conjunto de
pares de datos.
Dado el conjunto de pares de datos (x1,y1), (x2,y2), (x3,y3), (x4,y4), (x5,y5) puntos
de color rojo en la fihgura. Definimos la funcin S(x)
S(x)=s1(x)x1x<x2s2(x)x2x<x3s3(x)
x3x<x4s4(x)x4x<x5si(x)=ai(xxi)3+bi(xxi)2+ci(xxi)+dii=1,2,3,4
2.
+b4(x5x4)2+c4(x5x4)+d4=y5
La funcin S(x) es continua en x2, x3, x4.
si1(xi)=si(xi)a1(x2x1)3+b1(x2x1)2+c1(x2x1)+d1=d2a2(x
3x2)3+b2(x3x2)2+c2(x3x2)+d2=d3a3(x4x3)3+b3(x4x3)2+c3(x4x3)
+d3=d4
3.
2b2(x3x2)+c2=c33a3(x4x3)2+2b3(x4x3)+c3=c4
4.
Denominamos m1, m2, m3, m4, m5 al valor de la derivada segunda de si(x) en
los puntos x1, x2, x3, x4, x5.
s''i(xi)=mi2b1=m12b2=m22b3=m32b4=m46a4(
x5x4)+2b4=m5
5.
Supongamos que el espaciado entre dos puntos consecutivos es constante h=xixi-1, i=2,3,4,5.
Vamos a expresar las incgnitas a1,a2,a3,a4, b1,b2,b3,b4, c1,c2,c3,c4, d1,d2,d3,d4, en
trminos de h, el valor de las ordenadas yi y el valor de la derivada segunda
de S(x), mi en cada punto xi, i=1,2,3,4,5.
De (4) y (5) expresamos a1,a2, a3, a4 en trminos de m1, m2, m3, m4, m5.
a1=m2m16ha2=m3m26ha3=m4m36ha4=m5m46h
Que nos permite despejar c1, c2, c3 en trminos de m1, m2, m3, m4, y1, y2, y3, y4
c1=y2y1hm2+2m16hc2=y3y2hm3+2m26hc3=y4y3hm4+2m36h
=6h2(y22y3+y4)m3+4m4+m5=6h2(y32y4+y5)
Caso general
En general, con n pares de datos tendremos el sistema
4100....01410...00141...00014.....................10000...4
m2m3m4m5...mn1=6h2y12y2+y3y22y3+y4y
32y4+y5y42y5+y6....yn22yn1+yn
Fijamos los valores de los extremos del vector de las incgnitas m: m1=0, mn1=0, a continuacin, obtenemos mediante el operador divisin por la izquierda
los valores de m2, m3, ...mn-2, finalmente, se calculan:
a1=m2m16ha2=m3m26ha3=m4m36h.... an1=mnmn16h
b1=m12b2=m22b3=m32.... bn1=mn12
c1=y2y1hm2+2m16hc2=y3y2hm3+2m26hc3=y4y3hm4+2m36h.....cn1=ynyn1hmn
+2mn16h
Codificacin
En primer lugar, vamos a entender como trabaja la funcin diag de MATLAB.
La funcin diag extrae vectores diagonales de la matriz A.
>> A=[1,2,3;4,5,6;7,8,9]
A =
1
2
3
4
5
6
7
8
9
>> diag(A) %diagonal principal
ans =
1
5
9
>> diag(A,1) %diagonal superior
ans =
2
6
>> diag(A,-1) %diagonal inferior
ans =
4
8
La funcin diag nos permite crear una matriz a partir de los vectores de sus
diagonales
A=diag(4*ones(3,1))+diag(ones(2,1),1)+diag(ones(2,1),-1)
A =
4
1
0
1
4
1
0
1
4
con los nueve puntos unidos mediante polinomios de tercer grado (en color
rojo) veremos que la curva interpolada y la exacta estn prximas.
Los puntos de color azul, son los nueve pares de datos, cada una de las curvas
de color rojo entre dos puntos azules consecutivos es un polinomio de tercer
grado que pasa por dichos puntos y cumple las condiciones de continuidad de
su derivada primera y segunda.
Comparacin
Funcin spline de MATLAB
Utilizamos la funcin spline de MATLAB, pero es posible que las condiciones
en los extremos que en el ejemplo anterior se han establecido en m1=0, mn-1=0,
sean ahora diferentes.
x=-4:4;
y=sin(x)./(1+x.^2);
%dibuja los puntos
hold on
plot(x,y,'o','markersize',4,'markeredgecolor','b','markerfacecolor','b')
xx=linspace(-4,4,300);
yy=spline(x,y,xx); %interpolacin
plot(xx,yy, 'r')
yy=sin(xx)./(1+xx.^2);
plot(xx,yy,'g') %funcin
hold off
grid on
xlabel('x')
ylabel('y')
title('Interpolacin por splines de MATLAB')
Interplacin de Lagrange
Ahora interpolamos mediante un polinomio de grado n-1 que pasa por los
nueve puntos (xi,yi) del ejemplo anterior
x=-4:4;
y=sin(x)./(1+x.^2);
%dibuja los puntos
hold on
plot(x,y,'o','markersize',4,'markeredgecolor','b','markerfacecolor','b')
n=length(x);
p=polyfit(x,y,n-1); %polinomio que pasa por los puntos
%p=lagrange_p(x,y); %se obtiene el mismo resultado
xx=linspace(-4,4,300); %superposicin de la curva
yy=polyval(p,xx);
plot(xx,yy, 'r')
yy=sin(xx)./(1+xx.^2);
plot(xx,yy,'g')
hold off
grid on
xlabel('x')
ylabel('y')
title('Interpolacin por Lagrange')
Aproximacin de funciones
p=polyfit(xx,yy,n);
x1=linspace(0,b,100);
y1=polyval(p,x1); %aproximacin mediante el polinomio p
y2=f(x1);
%funcin
hold on
plot(x1,y1,'b')
plot(x1,y2,'r')
plot(xx(xx>=0),yy(xx>=0),'ro','markersize',2,'markerfacecolor','r')
hold off
xlabel('x')
ylabel('y')
title('Interpolacin de una funcin')