You are on page 1of 21

Pr6CA.

wxmx 1 / 21

Ecuaciones en derivadas parciales


1 Ec. calor (Solucionada)

1.1 CC Dirichlet (Tª fijada)

Definición de la EDP
u_t(x,t)= k · u_xx(x,t) , 0<x<L, t>0
u(0,t)= u(L,t)=0, t>0 (condiciones de contorno)
u(x,0)=f(x) (condición inicial)
La solución de esta ecuación obtenida por separación de variables, es:
u(x,t)= Sum b_n·sin(n·pi·x/L)·exp[-k·(n·pi/L)^2·t]
donde el sumatorio va de 1 a infinito y los coeficientes b_n vienen
dados por:
b_n=2/L·int[f(x)·sin(n·pi·x/L)dx], n=1,2,...
donde la integral se extiende de 0 a L.

CASO PARTICULAR:
k=1, L=1, f(x)=x

Definición de los parámetros de la EDo y las condiciones de contorno e iniciales

➔ kill(all)$ load(draw)$L:1$k:1$f(x):=x$
0 errors, 0 warnings

Coeficientes de la serie de potencias

➔ b(n):=2/L·integrate(f(y)·sin(n·%pi·y/L), y, 0, L);
Z L
2 ⎛nÙy ⎞
(%o5) b( n ) := f ( y ) sin⎜⎜ ⎟d y
⎟⎠
L ⎝ L
0

➔ ratsimp(b(n));
2 sin( Ù n ) − 2 Ù n cos( Ù n )
(%o6)
Ù2 n2

➔ makelist(b(n),n,1,10);
2 1 2 1 2 1 2 1 2 1
(%o7) [ ,− , ,− , ,− , ,− , ,− ]
Ù Ù 3Ù 2Ù 5Ù 3Ù 7Ù 4Ù 9Ù 5Ù

La solución viene dada por:

➔ u(x,t,N):=sum(b(n)·sin(n·%pi·x/L)·exp(−k·(n·%pi/L)^2·t), n, 1, N), simpsum;


N
X ⎛nÙx ⎞ ⎛ Ù 2 ⎞
(%o8) u( x , t , N ) := b( n ) sin⎜⎜ ⎟ exp⎜⎜ ( − k ) ⎛⎜ n ⎞⎟ t ⎟⎟
⎟⎠
n= 1
⎝ L ⎜⎝ ⎝⎜ L ⎟⎠ ⎟⎠

➔ u(x,t,m);
m 2 2
X ( − 1 ) n %e − Ù n t sin( Ù n x )
2
n
n= 1
(%o10) −
Ù

➔ ratsimp(u(x,t,r));
r 2 2
X ( − 1 ) n %e − Ù n t sin( Ù n x )
2
n
n= 1
(%o11) −
Ù

1.1.1 Representación espacial

Si queremos representar gráficamente la solución, tenemos varias opciones,


teniendo en cuenta que sumaremos sólo un número finito de elementos de la serie.

Representación aproximada de la solución en t=0 con 100 términos (N=100).


Pr6CA.wxmx 2 / 21

➔ wxplot2d(u(x,0,100),[x,0,L]);

(%t9)

(%o9)

Representación aproximada de la solución con 20 términos para distintos valores del tiempo, t=0:0.025:0.3, manteniendo la misma escala
Pr6CA.wxmx 3 / 21

➔ makelist(wxplot2d(u(x,i·0.025,20),[x,0,L],[y,0,1.2],[title,concat("t=",i·0.025)]),i,0,12)$

(%t10)

(%t11)

(%t12)

(%t13)
Pr6CA.wxmx 4 / 21

Idem, pero en la misma gráfica

➔ wxplot2d(makelist(u(x,i·0.025,20),i,0,12),[x,0,1],[y,0,1.2]);

(%t23)

(%o23)

1.1.2 Representación temporal

Representación aproximada de la solución con 20 términos para distintos valores del espacio, x=0.1:0.1:0.9, manteniendo la misma escala y gráfica.

➔ wxplot2d(makelist(u(0.1·i,t,20),i,1,9),[t,0,0.3],[y,0,1.2]);

(%t24)

(%o24)

1.1.3 Representación espacio temporal

Representación aproximada de la solución con 20 términos para distintos valores del espacio y el tiempo.

➔ wxplot3d(u(x,t,20),[x,0,1],[t,0,0.3]);

(%t25)

(%o25)

Si se quiere la opción de girar, rotar. etc la figura, se debe usar plot3d.

➔ plot3d(u(x,t,20),[x,0,1],[t,0,0.3]);
(%o26) [ C:/Users/cesarm/AppData/Local/Temp/maxout12764.gnuplot ]
Pr6CA.wxmx 5 / 21

1.1.4 Animación temporal

Representación de la evolución de la solución aproximada con 20 términos.


Se utilizan las instrucciones "with_slider" (asociada a "plot2d") o con "with_slider_draw" (asociada a "draw2d"). En los ejemplos, "n" es un parámetro que
toma valores de una lista que creamos al efecto con la sentencia "makelistSe usa la instrucción with_slider

➔ with_slider(n,makelist(log(i),i,1,50),u(x,n·0.025,20),[x,0,1],[y,0,1.2]);

(%t32)

(%o32)

➔ with_slider_draw(n,makelist(log(i),i,1,50),yrange=[0,1.2],explicit(u(x,n·0.025,20),x,0,1));

(%t33)

(%o33)

1.2 CC Neumann (q fijado)

Definición de la EDP
u_t(x,t)= k · u_xx(x,t) , 0<x<L, t>0
u_x(0,t)= u_x(L,t)=0, t>0 (condiciones de contorno)
u(x,0)=f(x) (condición inicial)
La solución de esta ecuación obtenida por separación de variables, es:
u(x,t)= c_0/2+Sum c_n·cos(n·pi·x/L)·exp[-k·(n·pi/L)^2·t]
donde el sumatorio va de 1 a infinito y los coeficientes c_n vienen
dados por:
c_n=2/L·int[f(x)·cos(n·pi·x/L)dx], n=1,2,...
donde la integral se extiende de 0 a L.

CASO PARTICULAR:
k=1, L=1, f(x)=x

Definición de los parámetros de la EDo y las condiciones de contorno e iniciales

➔ kill(all)$ load(draw)$L:1$k:1$f(x):=x$
0 errors, 0 warnings

Coeficientes de la serie de potencias

➔ c(n):=2/L·integrate(f(y)·cos(n·%pi·y/L), y, 0, L);
Z L
2 ⎛nÙy ⎞
(%o5) c( n ) := f ( y ) cos⎜⎜ ⎟d y
⎟⎠
L ⎝ L
0
Pr6CA.wxmx 6 / 21

➔ ratsimp(c(n));
2 Ù n sin( Ù n ) + 2 cos( Ù n ) − 2
(%o6)
Ù2 n2

➔ makelist(c(n),n,0,10);
4 4 4 4 4
(%o7) [1,− ,0,− ,0,− ,0,− ,0,− ,0]
Ù2 9 Ù2 25 Ù 2 49 Ù 2 81 Ù 2

La solución viene dada por:

➔ u(x,t,N):=c(0)/2+
sum(c(n)·cos(n·%pi·x/L)·exp(−k·(n·%pi/L)^2·t), n, 1, N), simpsum;
N
c( 0 ) X ⎛nÙx ⎞ ⎛ ⎞2 ⎞⎟
⎟ exp⎜⎜ ( − k ) ⎛⎜ n
Ù
(%o8) u( x , t , N ) := + c( n ) cos⎜⎜ ⎟⎠ ⎟ t⎟
2 ⎝ L ⎜⎝ ⎜⎝ L ⎟⎠ ⎟
n 1
= ⎠

➔ u(x,t,m);
⎛ m ⎞
⎜ X ⎛ ( −1)n ⎞ ⎟
(%o9) 2 ⎜⎜ ⎜ 1 ⎟ %e − Ù 2 n 2 t cos( Ù n x ) ⎟ + 1
⎜ − ⎟ ⎟
⎜ ⎜ 2 2 Ù2 n2 ⎟⎠ ⎟ 2
⎜⎝ n = 1 ⎝ Ù n ⎟⎠

➔ ratsimp(u(x,t,m));
⎛X m 2 2 ⎞
( ( − 1 ) n − 1 ) %e − Ù n t cos( Ù n x ) ⎟

4 ⎜⎜ ⎟+ Ù2

n 2
⎜⎝ n = 1 ⎟⎠
(%o10)
2 Ù2

Representación espacial

➔ wxplot2d(u(x,0,10),[x,−2,2]); /· Instante inicial ·/

(%t10)

(%o10)

➔ wxplot2d(makelist(u(x,i·0.025,20),i,0,10),[x,0,1],[y,0,1.2]);

(%t11)

(%o11)

Representación temporal
Pr6CA.wxmx 7 / 21

➔ wxplot2d(makelist(u(0.1·i,t,20),i,1,9),[t,0,0.3],[y,0,1.2]);

(%t12)

(%o12)

Animación temporal

➔ with_slider(n,makelist(log(i),i,1,20),u(x,n·0.02,20),[x,0,1],[y,0,1]);

(%t13)

(%o13)

1.3 CC mixtas (D/N)

Definición de la EDP
u_t(x,t)= k · u_xx(x,t) , 0<x<L, t>0
u(0,t)= u_x(L,t)=0, t>0 (condiciones de contorno)
u(x,0)=f(x) (condición inicial)
La solución de esta ecuación obtenida por separación de variables, es:
u(x,t)= Sum c_n·sin[(2·n-1)·pi·x/(2·L)]·exp[-k·((2·n-1)·pi/(2·L))^2·t]
donde el sumatorio va de 1 a infinito y los coeficientes c_n vienen
dados por:
c_n=2/L·int[f(x)·sin((2·n-1)·pi·x/(2·L))dx], n=1,2,...
donde la integral se extiende de 0 a L.

CASO PARTICULAR:
k=1, L=1, f(x)=x

Definición de los parámetros de la EDo y las condiciones de contorno e iniciales

➔ kill(all)$ load(draw)$L:1$k:1$f(x):=x$
0 errors, 0 warnings

Coeficientes de la serie de potencias

➔ c(n):=2/L·integrate(f(y)·sin((2·n−1)·%pi·y/(2·L)), y, 0, L);
Z L
2 ⎛ ( 2 n−1) Ù y ⎞
(%o5) c( n ) := f ( y ) sin⎜⎜ ⎟d y
⎟⎠
L ⎝ 2L
0

➔ ratsimp(c(n));
⎛ 2 Ù n−Ù ⎞ ⎛ 2 Ù n−Ù ⎞
8 sin⎜⎜ ⎟ + ( 4 Ù − 8 Ù n ) cos⎜ ⎟
⎝ 2 ⎠⎟ ⎜⎝ 2 ⎟⎠
(%o6)
4 Ù2 n2 − 4 Ù2 n + Ù2
Pr6CA.wxmx 8 / 21

➔ makelist(c(n),n,0,10);
8 8 8 8 8 8 8 8 8 8 8
(%o7) [− , ,− , ,− , ,− , ,− , ,− ]
Ù2 Ù2 9 Ù2 25 Ù 2 49 Ù 2 81 Ù 2 121 Ù 2 169 Ù 2 225 Ù 2 289 Ù 2 361 Ù 2

La solución viene dada por:

➔ u(x,t,nmax):=sum(c(n)·sin((2·n−1)·%pi·x/(2·L))·exp(−k·((2·n−1)·%pi/(2·L))^2·t),
n, 1, nmax), simpsum;
nmax
X ⎛ ( 2 n−1) Ù x ⎞ ⎛ 2 ⎞
(%o8) u( x , t , nmax ) := c( n ) sin⎜⎜ ⎟ exp⎜⎜ ( − k ) ⎛⎜ ( 2 n − 1 ) Ù ⎞⎟ t ⎟⎟
⎟⎠
n= 1
⎝ 2L ⎜⎝ ⎝⎜ 2L ⎟⎠ ⎟

➔ u(x,t,m);
Ù2 ( 2 n − 1 ) 2 t
⎛ ⎛ 2 Ù n−Ù ⎞ ⎛ 2 Ù n−Ù ⎞⎞ − ⎛ Ù ( 2 n−1) x ⎞
m ⎜⎜ 4 sin⎜⎜ ⎟ + ( 2 Ù − 4 Ù n ) cos⎜ ⎟⎟ %e sin⎜⎜ ⎟
4
X ⎝ ⎝ 2 ⎟⎠ ⎜⎝ 2 ⎟⎠⎟⎠ ⎝ 2 ⎟⎠
(%o9) 2
n= 1
4 Ù2 n2 − 4 Ù2 n + Ù2

➔ ratsimp(u(x,t,m));
Ù2 t
⎛ ⎛ 2 Ù n−Ù ⎞ ⎛ 2 Ù n−Ù ⎞⎞ − Ù2 n2 t + Ù2 n t − ⎛ ( 2 Ù n−Ù) x ⎞
m ⎜⎜ 4 sin⎜⎜ ⎟ + ( 2 Ù − 4 Ù n ) cos⎜ ⎟⎟ %e sin⎜⎜ ⎟
4

X ⎝ ⎝ 2 ⎠⎟ ⎜⎝ 2 ⎠⎟⎠ ⎝ 2 ⎠⎟
(%o10) 2
n= 1
4 Ù2 n2 − 4 Ù2 n + Ù2

Representación espacial

➔ wxplot2d(u(x,0,10),[x,−2,2]); /· Instante inicial ·/

(%t11)

(%o11)

➔ wxplot2d(makelist(u(x,i·0.025,20),i,0,10),[x,0,1],[y,0,1.2]);

(%t12)

(%o12)

Representación temporal
Pr6CA.wxmx 9 / 21

➔ wxplot2d(makelist(u(0.1·i,t,20),i,1,9),[t,0,0.3],[y,0,1.2]);

(%t13)

(%o13)

Animación temporal

➔ with_slider(n,makelist(log(i),i,1,20),u(x,n·0.02,20),[x,0,1],[y,0,1]);

(%t14)

(%o14)

1.4 CC Robin (convección)

Las condiciones de Robin definen la convección entre un sólido y un fluido, y están definidas por
-u_x(x,t)=h·(u(x,t)-U)
siendo U la temperatura del fluido.

1.4.1 Dirichlet/Robin

Un extremo a temperatura constante y el otro introducido en un medio a temperatura dada.


Definición de la EDP
u_t(x,t)= k · u_xx(x,t) , 0<x<L, t>0
u(0,t)= u_x(L,t)+h·u(L,t)=0, t>0 (condiciones de contorno)
u(x,0)=f(x) (condición inicial)
La solución de esta ecuación obtenida por separación de variables, es:
u(x,t)= Sum c_n·sin[lambda_n·x/L]·exp[-k·(lambda_n/L)^2·t]
donde el sumatorio va de 1 a infinito y los coeficientes c_n vienen
dados por:
c_n=int[f(x)·sin(lambda_n·x/L)dx]/int[sin^2(lambda_n·x/L)dx], n=1,2,...
donde la integral se extiende de 0 a L y lambda_n son las raíces positivas de
tg(lambda)=-lambda/(h·L).

CASO PARTICULAR:
k=1, L=1, h=1, f(x)=x

Definición de los parámetros de la EDo y las condiciones de contorno e iniciales

➔ kill(all)$ load(draw)$L:1$k:1$h:1$f(x):=x$
0 errors, 0 warnings

Los valores de lambda_n son los puntos de corte de las dos funciones
siguientes:
Pr6CA.wxmx 10 / 21

➔ wxplot2d([tan(x),−x],[x,0,5·%pi],[y,−20,20]);
plot2d: some values were clipped.

(%t6)

(%o6)

Su calculo se hace utilizando la instrucción "find_root", que encuentra una raiz de una ecuación en un intervalo que verifique las condiciones del teorema de
Bolzano. Dado que las asíntotas de tg(x) son pi/2·(1,3,5,7,...), los intervalos van aproximadamente de una síntota a otra. Nótese que las raíces cada vez se
acercan más a la asíntota.

➔ raiz(x,h,L):=tan(x·L)+(x/(h·L));
x
(%o62) raiz( x , h , L ) := tan( x L ) +
hL

➔ nlambda:5;xlim:makelist(%pi·(2·i−1)/2,i,1,nlambda+1);
(nlambda) 5
Ù 3Ù 5Ù 7Ù 9Ù 11 Ù
(xlim) [ , , , , , ]
2 2 2 2 2 2

➔ escala:1000$
xsup:floor(escala·xlim)/escala$
xinf:ceiling(escala·xlim)/escala$

➔ lambda:makelist(find_root(raiz(x,h,L)=0,x,xinf[i],xsup[i+1]),i,1,nlambda);
(lambda) [ 2.028757838110434 , 4.913180439434884 , 7.97866571241324 , 11.08553840649702 , 14.20743672519119 ]

➔ C:(integrate(f(x)·sin(a·x), x, 0, L))/(integrate((sin(a·x))^2,x,0,L));
4 ( sin( a ) − a cos( a ) )
(C) −
a ( sin( 2 a ) − 2 a )

➔ c:makelist(subst(a=lambda[n]/L,C),n,1,N−1);
(c) [ 0.7291747435133157 , − 0.1561635162000455 , 0.06139734659067106 , − 0.03215844991552332 , 0.01967069557474496 ]

➔ u(x,t,N):=sum(c[n]·sin(lambda[n]·x/L)·exp(−k·(lambda[n]/L)^2·t),
n, 1, N), simpsum;
N
X ⎛ 2 ⎞
⎛ lambdan x ⎞
(%o81) u( x , t , N ) := cn sin⎜⎜ ⎟ exp⎜⎜ ( − k ) ⎛⎜ lambdan ⎞⎟ t ⎟⎟
⎟⎠
n= 1
⎝ L ⎜⎝ ⎝⎜ L
⎟⎠ ⎟

➔ u(x,t,5);
(%o82) 0.01967069557474496 %e − 201.8512583003113 t sin( 14.20743672519119 x ) − 0.03215844991552332 %e − 122.8891617619205 t
sin( 11.08553840649702 x ) + 0.06139734659067106 %e − 63.65910655043869 t sin( 7.97866571241324 x ) − 0.1561635162000455 %e − 24.13934203044556 t
sin( 4.913180439434884 x ) + 0.7291747435133157 %e − 4.115858365694522 t sin( 2.028757838110434 x )
Pr6CA.wxmx 11 / 21

➔ wxplot2d(u(x,0.1,4),[x,0,1]);

(%t83)

(%o83)

➔ with_slider(n,makelist(log(i),i,1,10),u(x,n·0.02,4),[x,0,1],[y,0,1]);

(%t84)

(%o84)

2 Ec. calor (Resolución)

2.1 Barra infinita CC Dirichlet/Neumann(T.Fourier)

Definición de la EDP
u_t(x,t)= alfa^2 · u_xx(x,t) , t>0
u(x,0)=f(x) (condición inicial)
donde se supone que se cumple:
u(x,t), u_x(x,t) -> 0 cuando abs(x) -> inf, t>0

CASO PARTICULAR:
alfa=2

➔ kill(all)$ load(draw)$alfa:2$f(x):=x$
0 errors, 0 warnings

➔ alfa2:alfa·alfa$

➔ edo:diff(u(x,t),t,1)=alfa2·'diff(u(x,t),x,2);
d ⎛ d2 ⎞
(edo) u( x , t ) = 4 ⎜⎜ u( x , t ) ⎟⎟
dt ⎜⎝ d x 2 ⎟⎠

Se define el cálculo de la transformada de Fourier ...

➔ fouriertrasform(fun,x,z):=1/sqrt(2·%pi)·'integrate(fun·exp(−%i·z·x),x,minf,inf);
Z 1
1
(%o6) fouriertrasform( fun , x , z ) := p fun exp( ( − %i ) z x ) d x
2Ù −1

... y se aplica a la edo

➔ ecu1:fouriertrasform(lhs(edo),x,z)=fouriertrasform(rhs(edo),x,z);
Z 1
Z 1
⎛ d ⎞ − %i x z / ⎛ d2 ⎞ − %i x z
⎜ ⎟ dx 23 2 ⎜ ⎟ dx
⎜⎝ d t u( x , t ) ⎟⎠ %e ⎜⎝ d x 2 u( x , t ) ⎟⎠ %e
−1 −1
(ecu1) p p = p
2 Ù Ù
Pr6CA.wxmx 12 / 21

Se va a trabajar con ambos miembros por separado

En el primer miembro, se define una regla que intercambia el orden de la integral en x con la derivada en t, y se aplica

➔ defrule(regla1, integrate(exp(−%i·z·x)·'diff(u(x,t),t),x,minf,inf),
'diff(integrate(exp(−%i·z·x)·u(x,t),x, minf, inf),t));
Z 1
Z 1
⎛ d ⎞ − %i x z d x → d
(%o8) regla1 : ⎜ ⎟
⎜⎝ d t u( x , t ) ⎟⎠ %e u( x , t ) %e − %i x z d x
dt
−1 −1

➔ ecu2i:apply1(lhs(ecu1),regla1);
Z 1
d
u( x , t ) %e − %i x z d x
dt
−1
(ecu2i) p p
2 Ù

A continuación se define una regla que relaciona u (x,t) con U(z,t), que es su transformada de Fourier, y se aplica

➔ defrule(regla2, integrate(u(x,t)·exp(−%i·z·x),x,minf,inf),sqrt(2·%pi)·U(z,t));
Z 1
p p
(%o10) regla2 : u( x , t ) %e − %i x z d x → 2 Ù U( z , t )
−1

➔ ecu3i:apply1(ecu2i,regla2);
d p p
( 2 Ù U( z , t ) )
dt
(ecu3i) p p
2 Ù

Lamentablemente, maxima no es capaz de simplificar la expresion

➔ /·combine(ecu2i);·/
/·expand(ecu2i);·/
/·factor(ecu2i);·/
/·multthru(ecu2i);·/
/·radcan(ecu2i);·/
/·ratsimp(ecu2i);·/
/·xthru(ecu2i);·/;

➔ ecu3i:'diff(U(z,t),t,1);
d
(ecu3i) U( z , t )
dt

En el segundo miembro, definimos la integración por partes, y la aplicamos

➔ intpartes(x,u,dv,a,b):=
(v:integrate(dv,x),
limit(u,x,b)·limit(v,x,b)−limit(u,x,a)·limit(v,x,a)
−integrate(v·diff(u,x,1),x, a, b));
⎛ Z Z b ⎞
⎜ ⎟
⎜ ⎛ d ⎞ ⎟
(%o13) intpartes( x , u , dv , a , b ) := ⎜⎜ v : dv d x , limit( u , x , b ) limit( v , x , b ) − limit( u , x , a ) limit( v , x , a ) − v ⎜⎜ u⎟d x ⎟
⎜ a
⎝ d x ⎠⎟ ⎟

⎜⎝ ⎟⎠

➔ ecu2d:intpartes(x,sqrt(8/%pi)·exp(−%i·z·x),'diff(u(x,t),x,2),minf,inf);
Z 1
3 /2 ⎛ d ⎞ − %i x z
2 %i z ⎜ ⎟ dx
⎜⎝ d x u( x , t ) ⎟⎠ %e
−1 ⎛ d ⎞ ⎛ d ⎞
(ecu2d) p − ind ⎜⎜ lim d x u( x , t ) ⎟⎟ + ind ⎜⎜ lim d x u( x , t ) ⎟⎟
Ù ⎜⎝ x → − 1 ⎟⎠ ⎜⎝ x → 1 ⎟⎠

.. pero por las hipótesis del problema, debemos anular los límites.
Podemos definir dos nuevas reglas y aplicarlas

➔ defrule(regla3,limit('diff(u(x,t),x),x,minf),0);
defrule(regla4,limit('diff(u(x,t),x),x,inf),0);
⎛ d ⎞
(%o15) regla3 : limit⎜⎜ u( x , t ) , x , − 1 ⎟⎟ → 0
⎝dx ⎠
⎛ d ⎞
(%o16) regla4 : limit⎜⎜ u( x , t ) , x , 1 ⎟⎟ → 0
⎝dx ⎠

➔ ecu3d:apply1(ecu2d,regla3,regla4);
Z 1
/ ⎛ d ⎞ − %i x z
2 3 2 %i z ⎜ ⎟
⎜ d x u( x , t ) ⎟⎠ %e dx
−1 ⎝
(ecu3d) p
Ù

o simplemente quedarnos con el primer término


Pr6CA.wxmx 13 / 21

➔ first(ecu2d);
Z 1
3 /2 ⎛ d ⎞ − %i x z
2 %i z ⎜ ⎟ dx
⎜⎝ d x u( x , t ) ⎟⎠ %e
−1
(%o18) p
Ù

Se vuelve a repetir el proceso, integrando por partes y anulando el límite

➔ ecu4d:%i·z·intpartes(x,sqrt(8/%pi)·exp(−%i·z·x),'diff(u(x,t),x),minf,inf);
Z
⎛ 1 ⎞
⎜ 3 /2 ⎟
⎜2 %i z u( x , t ) %e − %i x z d x ⎟
(ecu4d) %i ⎜⎜
z −1 ⎛ lim u( x , t ) ⎞

⎛ lim u( x , t ) ⎞⎟⎟
⎜ p ⎜
− ind ⎜ ⎟ + ⎜
ind ⎜ ⎟
⎜⎝ ⎟ ⎟ ⎟
Ù ⎝x → − 1 ⎠ ⎝x → 1 ⎠⎠

➔ defrule(regla5,limit(u(x,t),x,minf),0);
defrule(regla6,limit(u(x,t),x,inf),0);
(%o20) regla5 : limit( u( x , t ) , x , − 1 ) → 0
(%o21) regla6 : limit( u( x , t ) , x , 1 ) → 0

➔ ecu5d:apply1(ecu4d,regla5,regla6);
Z 1
/
2 3 2 z2 u( x , t ) %e − %i x z d x
−1
(ecu5d) − p
Ù

Usando de nuevo la regla2, para relacionar con la transformada de Fourier

➔ ecu6d:(apply1(ecu5d,regla2));
(ecu6d) − 4 z 2 U( z , t )

La edo inicial, al aplicar la transformada de Fourier, se ha convertido en:

➔ edotransf:ecu3i=ecu6d;
d
(edotransf) U( z , t ) = − 4 z 2 U( z , t )
dt

Resolviendo analiticamente la EDO

➔ sedotransf:ode2(lhs(edotransf)−rhs(edotransf),U(z,t),t);
2
(sedotransf) U( z , t ) = %c %e − 4 t z

La constante se obtiene imponiendo la condición inicial U(z,0), para lo que se debe calcular la transformada de Fourier de la condición inicial
u(x,0)=f(x).
Se toma como f(x) la siguiente función

➔ f(x):=exp(−x^2);
(%o28) f ( x ) := exp( − x 2 )

➔ F:fouriertrasform(f(x),x,z),nouns;
z2

4
%e
(F) p
2

y finalmente imponemos la condición inicial

➔ sol:ic1(sedotransf,t=0,U(z,0)=F);
2
(sol) U( z , t ) = %e − 4 t z U( z , 0 )

➔ define(U(z,t),subst(U(z,0)=F,rhs(sol)));
z2
− 4 t z2 −
4
%e
(%o48) U( z , t ) := p
2

Se calcula la transformada inversa de Fourier para obtener la solución


del problema...

➔ sol:1/sqrt(2·%pi)·integrate(U(z,t)·exp(%i·z·x),z,minf, inf);
Is 16 t + 1 positive, negative or zero? positive;
Is x positive, negative or zero? positive;
x2

16 t + 1
%e
(sol) p
16 t + 1

➔ s(x,t):=''sol;
x2

16 t + 1
%e
(%o63) s( x , t ) := p
16 t + 1
Pr6CA.wxmx 14 / 21

Comprobemos que s(x,t) satisface la ecuación del calor, así como


la condición inicial:

➔ ratsimp(diff(s(x,t),t,1)−alfa2·diff(s(x,t),x,2));
(%o69) 0

➔ limit(s(x,t),t,0);
2
(%o70) %e − x

Además, es obvio que cumple: u(x,t), u_x(x,t) -> 0 cuando abs(x) -> inf, t>0

➔ assume(t>=0);
(%o77) [ redundant ]

➔ limit(s(x,t),x,inf);
(%o78) 0

➔ limit(s(x,t),x,minf);
(%o79) 0

➔ limit(diff(s(x,t),x),x,inf);
(%o80) 0

➔ limit(diff(s(x,t),x),x,minf);
(%o81) 0

Y, finalmente, hacemos su representación gráfica:

➔ wxplot2d(s(x,1),[x,−3,3]);

(%t82)

(%o82)

➔ with_slider(n,makelist(i,i,0,40),s(x,n·0.02),[x,−10,10],[y,0,1]);

(%t83)

(%o83)

2.2 Barra semiinfinita CC Dirichlet/Neumann (T.Laplace)

Definición de la EDP
u_t(x,t)= alfa^2 · u_xx(x,t) , 0<x<inf, t>0
u(x,0)=f(x) (condición inicial)
donde se supone que se cumple:
u(x,t), u_x(x,t) -> 0 cuando x -> inf, t>0
Pr6CA.wxmx 15 / 21

CASO PARTICULAR:
alfa=1

➔ kill(all)$ load(draw)$alfa:1$f(x):=x$
0 errors, 0 warnings

➔ alfa2:alfa·alfa$

➔ edp:diff(u(x,t),t,1)−alfa2·'diff(u(x,t),x,2);
d d2
(edp) u( x , t ) − u( x , t )
dt d x2

Se aplica a la edp la transformada de Laplace

➔ eck1(x,s):=laplace(edp,t,s);
(%o6) eck1( x , s ) := laplace( edp , t , s )

➔ eck1(x,s);
d2
(%o7) − laplace( u( x , t ) , t , s ) + s laplace( u( x , t ) , t , s ) − u( x , 0 )
d x2

Se define una regla que relaciona u (x,t) con U(x,s), que es su transformada de Laplace, y se aplica

➔ defrule(regla1, laplace(u(x,t),t,s),U(x,s));
(%o8) regla1 : laplace( u( x , t ) , t , s ) → U( x , s )

➔ eck2(x,s):=apply1(eck1(x,s),regla1);
(%o9) eck2( x , s ) := apply1( eck1( x , s ) , regla1 )

➔ eck2(x,s);
d2
(%o10) − U( x , s ) + s U( x , s ) − u( x , 0 )
d x2

Se define otra regla con la condición inicial, y se aplica

➔ defrule(regla2, u(x,0),0);
(%o11) regla2 : u( x , 0 ) → 0

➔ eck3(x,s):=apply1(eck2(x,s),regla2);
(%o12) eck3( x , s ) := apply1( eck2( x , s ) , regla2 )

➔ eck3(x,s);
d2
(%o13) s U( x , s ) − U( x , s )
d x2

Resolviendo analiticamente la EDP

➔ assume(s>0);
(%o15) [s>0]

➔ solectransf:ode2(eck3(x,s),U(x,s),x);
p p
s x + %k2 %e − s x
(solectransf) U( x , s ) = %k1 %e

Puesto que U(x,s)->0 cuando x -> infinito, => %k1=0

➔ solectransf:subst(%k1=0,solectransf);
p
(solectransf) U( x , s ) = %k2 %e − s x

Para determinar la %k2(s) se debe usar la condición de contorno.


Ello exige el cálculo de la la transformada de Laplace de la condición de contorno, para lo que se precisa U(0,s),
que a su vez exige definir primero U(x,s).

➔ ccprev(x,t):=u(x,t)−1;
(%o18) ccprev( x , t ) := u( x , t ) − 1

➔ ccs(x,s):=laplace(ccprev(x,t),t,s);
(%o19) ccs( x , s ) := laplace( ccprev( x , t ) , t , s )

➔ ccs(x,s);
1
(%o20) laplace( u( x , t ) , t , s ) −
s

Se aplica de nuevo la regla1, para que aparezca U(x,s). Si no


hubiésemos hecho aparecer u(x,t) no podríamos aplicarla.
Pr6CA.wxmx 16 / 21

➔ ccs2(x,s):=apply1(ccs(x,s),regla1);
(%o21) ccs2( x , s ) := apply1( ccs( x , s ) , regla1 )

➔ ccs2(x,s);
1
(%o22) U( x , s ) −
s

Ahora ya podemos hacer x=0:

➔ ccs3(s):=ccs2(0,s);
(%o23) ccs3( s ) := ccs2( 0 , s )

de modo que la transformada de la condición de contorno es:

➔ ccs3(s)=0;
1
(%o24) U( 0 , s ) − =0
s

que resolvemos en U(0,s)

➔ solve(ccs3(s),U(0,s));
1
(%o25) [ U( 0 , s ) = ]
s

y ahora aplicamos hacemos que U2(x,s) verifique esta condición:

➔ solve(U2(0,s)=1/s,c2(s));
(%o26) []

con lo cual logramos determinar c2(s), que definimos en una regla:

➔ defrule(regla3,c2(s),1/s);
1
(%o27) regla3 : c2( s ) →
s

➔ U2(x,s);
(%o28) U2( x , s )

➔ U3(x,s):=apply1(U2(x,s),regla3);
(%o29) U3( x , s ) := apply1( U2( x , s ) , regla3 )

➔ U3(x,s);
(%o30) U2( x , s )

de modo que para calcular la solución de nuestro problema sólo


tenemos que hallar la transformada inversa de U3(x,s)

➔ ilt(U3(x,s),s,t);
(%o31) ilt( U2( x , s ) , s , t )

pero no podíamos esperar mucho más, puesto que el comando ilt sólo
calcula transformadas inversas de cocientes de polinomios. No tenemos
más solución que acudir a las tablas. No obstante, esta expresión de
U3(x,s) aparece en cualquier tabla de transformadas mínimamente completa.
Y su valor es:
Laplace(erfc(a/(2·sqrt(t))))= exp(-a·sqrt(s))/s
de modo que en nuestro caso:
u(x,t)=erfc(x/(2·sqrt(t)))

➔ u(x,t):=erfc(x/(2·sqrt(t)));

➔ u(x,t);

➔ plot2d(u(x,0.01),[x,0,10]);

y ya podemos intentar representar gráficamente la solución:

➔ with_slider(n,makelist(i,i,1,40),u(x,n),[x,0,30],[y,0,1]);

➔ f(s):=(s^2−3·s+1)/((s−1)^3);

➔ ilt(f(s),s,t);

2.3 Barra semiinfinita CC Dirichlet/Robin (T.Laplace)


Pr6CA.wxmx 17 / 21

Definimos la ecuación en derivadas parciales que, en


este caso es:
u_t(x,t)= alfa^2 · u_xx(x,t) , 0<x<inf, t>0
u_x(0,t)-u(0,t)=0 t>0 (condición de contorno)
u(x,0)=u0 0<x<inf (condición inicial)
donde vamos a suponer que se cumple:
u(x,t) acotada cuando x -> inf, t>0

Definimos, entonces, en primer lugar, la ecuación diferencial:

➔ kill(all);

➔ load(draw)$

➔ ec1(x,t):='diff(u(x,t),t,1)−alfa2·'diff(u(x,t),x,2);

➔ alfa2:1;

➔ ec1(x,t);

➔ eck1(x,s):=laplace(ec1(x,t),t,s);

➔ eck1(x,s);

➔ defrule(regla1, laplace(u(x,t),t,s),U(x,s));

➔ eck2(x,s):=apply1(eck1(x,s),regla1);

➔ eck2(x,s);

Imponemos la condición inicial

➔ defrule(regla2, u(x,0),1);

➔ eck3(x,s):=apply1(eck2(x,s),regla2);

➔ eck3(x,s);

A continuación resolvemos la ecuación diferencial eck3(x,s)=0

➔ eck3(x,s);

➔ solectransf:ode2(eck3(x,s),U(x,s),x);

Ahora debemos imponer que U(x,s) esté acotada cuando x -> infinito,
de modo que %k1 debe ser nula y, además, vamos a cambiar %k2 por una
función de s,

➔ U2(x,s):=c2(s)·exp(−sqrt(s)·x)+1/s;

➔ U2(x,s);

Para calcular c2(s) utilizamos la condición de contorno.

A continuación, transformamos también la condición de contorno, que


definimos previamente:

➔ ccprev(x,t):='diff(u(x,t),x,1)−u(x,t);

➔ ccprev(x,t);

➔ ccs(x,s):=laplace(ccprev(x,t),t,s);

➔ ccs(x,s);

➔ ccs2(x,s):=apply1(ccs(x,s),regla1);

➔ ccs2(x,s);

➔ ccs3(s):=limit(ccs2(x,s),x,0);

➔ ccs3(s);

➔ ccs3(s)=0;

Entonces ahora aplicamos esta condición de contorno a U2(x,s).

➔ fun(x,s):=diff(U2(x,s),x,1)−U2(x,s);
Pr6CA.wxmx 18 / 21

➔ fun(x,s);

➔ ec:limit(fun(x,s),x,0);

➔ soluc:solve(ec,c2(s));

➔ second(first(soluc));

➔ defrule(regla3, c2(s),second(first(soluc)));

➔ U2(x,s);

➔ U3(x,s):=apply1(U2(x,s),regla3);

➔ U3(x,s);

de modo que para calcular la solución de nuestro problema sólo


tenemos que hallar la transformada inversa de U3(x,s)

➔ ilt(U3(x,s),s,t);

pero parece que no es capaz de calcular la transformada inversa


del término entre paréntesis

Pero podemos ver la solución en tablas de transformadas de Laplace:

➔ uu(x,t):=1+erfc(sqrt(t)+x/(2·sqrt(t)))−erfc(x/(2·sqrt(t)));

➔ plot2d(uu(x,100),[x,0,10],[y,0,1.2]);

➔ with_slider(n,makelist(i,i,1,40),uu(x,n),[x,0,30],[y,0,1]);

3 Problema de contorno
Resolvamos el problema de contorno:
y''(x)+ lambda·y(x) = 0 , 0<=x<=l
y(0)=y(l)=0
Está claro que una solución es la trivial. No obstante, se trata de
encontrar los valores del parámetro lambda tales que el problema de
contorno anterior tenga soluciones no triviales.

En primer lugar, definimos la ecuación diferencial:

➔ kill(all)$load(draw)$

➔ ec1:'diff(y,x,2)+lambda·y=0;

y calculamos su solución general, que tendremos que hacer según


sea el signo del parámetro lambda. En primer lugar, para lambda<0

➔ sol1:ode2(ec1,y,x);

que podremos transformar en una solución real

➔ sol1:subst(x·sqrt(−lambda),%i·x·sqrt(lambda),sol1);

y ahora podremos sustituir las condiciones de contorno

➔ bc2(sol1, x=0, y=0, x=l, y=0);

y vemos que no nos da más solución que la trivial. Podemos comprobar


haciendo la sustitución directamente que no existe más que esa solución.

➔ define(y1(x),rhs(sol1));

➔ cc1:y1(0)=0;
cc2:y1(l)=0;
solve([cc1,cc2],[%k1,%k2]);

y se observa que no hay más solución que la trivial, como también


se podría comprobar calculando el determinante de la matriz del
sistema:

➔ m1: matrix(
[1,1],
[%e^(l·sqrt(−lambda)),%e^(−l·sqrt(−lambda))]
);
Pr6CA.wxmx 19 / 21

➔ determinant(m1);

que es no nulo salvo si l ó lambda son nulos, de modo que la


solución es única.

Repetimos el mismo proceso para lambda=0

➔ sol2:ode2(ec1,y,x);

y volvemos a imponer las condiciones de contorno

➔ bc2(sol2, x=0, y=0, x=l, y=0);

y veamos que realmente es la única solución

➔ define(y2(x),rhs(sol2));

➔ cc1b:y2(0)=0;
cc2b:y2(l)=0;
solve([cc1b,cc2b],[%k1,%k2]);

Vemos ahora cuánto vale el determinante del sistema

➔ m2: matrix(
[1,0],
[l,1]
);

➔ determinant(m2);

también no nulo, luego solución únicamente trivial.

Y, finalmente, consideramos el caso lambda>0

➔ sol3:ode2(ec1,y,x);

e imponemos, finalmente, las condiciones de contorno en este caso

➔ bc2(sol3, x=0, y=0, x=l, y=0);

y veamos si aquí hay otras soluciones distintas de la trivial

➔ define(y3(x),rhs(sol3));

➔ cc1c:y3(0)=0;
cc2c:y3(l)=0;
solve([cc1c,cc2c],[%k1,%k2]);

Calculamos ahora el determinante:

➔ m3: matrix(
[0,1],
[sin(l·sqrt(lambda)),cos(l·sqrt(lambda))]
);

➔ d3:determinant(m3);

Si queremos que haya otras soluciones distintas de la trivial,


debemos imponer que este determinante se anule, y sacar de ahí los
posibles valores de lambda que satisfacen esta condición. Imponemos,
por tanto que este determinante sea nulo:

➔ solve(d3=0,lambda);

y el programa nos dice que se pudieron haber perdido soluciones.


Si pretendemos obtener soluciones distintas de la trivial, no tenemos
más opción, en este programa, que hacerlo numéricamente e indicando
el intervalo en donde queremos calcular la raíz. No obstante, sabemos
que si:
l·sqrt(lambda)=n·pi
entonces el seno se anula, de modo que definimos los valores de
lambda que hacen que hacen que haya solución no trivial. Son

➔ lambd(n, l):=(n·%pi/l)^2;

y, en este caso, los valores de las constantes compatibles con las


condiciones de contorno son k2=0, k1 cualquiera, de modo que las soluciones
son:
y(x)=k1·sin(sqrt(lambd)·x)
que definimos a continuación:
Pr6CA.wxmx 20 / 21

➔ y(n,x,l):=sin(sqrt(lambd(n,l))·x);

➔ y(n,x,l);

Ahora resolvemos la ecuación:


T'(t)+c^2·lambd(n,l)·T(t)=0
buscando una solución no trivial.

Definimos la ecuación:

➔ ec2:'diff(T,t,1)+c^2·lambd(n,l)·T=0;

y a continuación la resolvemos:

➔ sol4:ode2(ec2,T,t);

➔ rhs(sol4);

RESOLUCIÓN DE LA ECUACIÓN DEL CALOR UNIDIMENSIONAL, CON


CONDICIONES DE CONTORNO HOMOGENEAS

Resolver el siguiente problema:


u'_t(x,t)=c^2·u''_xx(x,t) 0<x<l, t>0
u(0,t)=u(l,t)=0 (c.contorno)
u(x,0)=f(x) (c. inicial)
por separación de variables

Buscamos una solución del tipo:

➔ kill(u);

➔ load(draw)$

➔ u(x,t,l,n,c):=y(x,l,n,c)·T(t,l,n,c);

Nos explicaremos más adelante por qué hacemos que u dependa


también de una variable n

y la sustituimos en la ecuación:

➔ diff(u(x,t,l,n,c),t,1)−c^2·diff(u(x,t,l,n,c),x,2)=0;

➔ expr:expand(%o161/c^2/u(x,t,l,n,c));

y ahora separamos en expresiones distintas los dos sumandos


que aparecen en la ecuación anterior

➔ expr1:first(lhs(expr));
expr2:second(lhs(expr));

y la ecuación se podrá escribir como:

➔ ecu:expr1=expr2;

Como el miembro de la izquierda no depende de x y el de la


derecha no depende de t y son iguales, ambos dependerán únicamente
de l,n,c, de modo que definimos dos ecuaciones que son:

➔ ecu1:expr1=fun1(l,n,c);
ecu2:expr2=fun1(l,n,c);

y nuestra ecuación en derivadas parciales se ha reducido a la resolución


de dos ecuaciones diferenciales ordinarias, las dadas por ecu1, que es una
ec. de primer orden para una función incógnita T(t,l,n,c) que sólo depende
de t, y ecu2, que es una ec. de segundo orden para la función incógnita
y(x,l,n,c) que sólo depende de x. La dependencia de T e y con respecto a l,
n,c hace referencia a que aparecen esas constantes en la ecuación de partida.
Se trata, entonces, de resolver dichas ecuaciones, pero deberán ir acompañadas
de ciertas condiciones. Por el momento no hemos utilizado las condiciones de
contorno que aparecían en la ecuación del calor.

Imponemos las condiciones de contorno sobre u, para ver en qué se reflejan


cara a T e y:

➔ u(0,t,l,n,c)=0;
u(l,t,l,n,c)=0;
Pr6CA.wxmx 21 / 21

que, si no queremos que T sea una función nula para todo t, se deberá
verificar que:
y(0,l,n,c)=y(l,l,n,c)=0
que son las condiciones de contorno que deberán acompañar a la ecuación
ecu2.
Tenemos, pues, un problema de contorno para y(x,l,n,c) que ya hemos
resuelto anteriormente, ya que nótese que si fun1(l,n,c)=-lambda, el
problema es el resuelto antes. La solución obtenida era:

➔ y2(x,l,n,c):=y(n,x,l);

➔ y2(x,l,n,c);

El problema que tenemos para T(t,l,n,c) también lo habíamos resuelto


anteriormente, justo después del problema de contorno

➔ define(T2(t,l,n,c),rhs(sol4));

de modo que la solución de nuestra EDP, una vez impuestas las condiciones
de contorno, pero antes de imponer la condición inicial, será:

➔ u(x,t,l,n,c):=y2(x,l,n,c)·T2(t,l,n,c);

➔ u(x,t,l,n,c);

Finalmente, sólo hemos de satisfacer la condición inicial,


u(x,0)=f(x)

➔ ratsimp(apply1(ec3k1(k,t),regla1));

➔ radcan(%);

➔ factor(%);

➔ expand(%);

➔ ev(%, nouns);

➔ c;

➔ U4;

You might also like