Professional Documents
Culture Documents
wxmx 1 / 21
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
➔ kill(all)$ load(draw)$L:1$k:1$f(x):=x$
0 errors, 0 warnings
➔ 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Ù
➔ 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) −
Ù
➔ 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
➔ wxplot2d(makelist(u(x,i·0.025,20),i,0,12),[x,0,1],[y,0,1.2]);
(%t23)
(%o23)
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)
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)
➔ 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
➔ 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)
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
➔ kill(all)$ load(draw)$L:1$k:1$f(x):=x$
0 errors, 0 warnings
➔ 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
➔ 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
(%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)
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
➔ kill(all)$ load(draw)$L:1$k:1$f(x):=x$
0 errors, 0 warnings
➔ 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
➔ 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
(%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)
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
CASO PARTICULAR:
k=1, L=1, h=1, f(x)=x
➔ 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)
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 ⎟⎠
➔ 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
➔ 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
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 Ù
➔ /·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
➔ 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
Ù
➔ first(ecu2d);
Z 1
3 /2 ⎛ d ⎞ − %i x z
2 %i z ⎜ ⎟ dx
⎜⎝ d x u( x , t ) ⎟⎠ %e
−1
(%o18) p
Ù
➔ 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
Ù
➔ ecu6d:(apply1(ecu5d,regla2));
(ecu6d) − 4 z 2 U( z , t )
➔ edotransf:ecu3i=ecu6d;
d
(edotransf) U( z , t ) = − 4 z 2 U( z , t )
dt
➔ 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
➔ 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
➔ 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
➔ 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
➔ 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)
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
➔ 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
➔ 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
➔ 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
➔ solectransf:subst(%k1=0,solectransf);
p
(solectransf) U( x , s ) = %k2 %e − s x
➔ 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
➔ 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
➔ ccs3(s):=ccs2(0,s);
(%o23) ccs3( s ) := ccs2( 0 , s )
➔ ccs3(s)=0;
1
(%o24) U( 0 , s ) − =0
s
➔ solve(ccs3(s),U(0,s));
1
(%o25) [ U( 0 , s ) = ]
s
➔ solve(U2(0,s)=1/s,c2(s));
(%o26) []
➔ 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 )
➔ 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]);
➔ 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);
➔ 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);
➔ defrule(regla2, u(x,0),1);
➔ eck3(x,s):=apply1(eck2(x,s),regla2);
➔ eck3(x,s);
➔ 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);
➔ 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;
➔ 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);
➔ ilt(U3(x,s),s,t);
➔ 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.
➔ kill(all)$load(draw)$
➔ ec1:'diff(y,x,2)+lambda·y=0;
➔ sol1:ode2(ec1,y,x);
➔ sol1:subst(x·sqrt(−lambda),%i·x·sqrt(lambda),sol1);
➔ define(y1(x),rhs(sol1));
➔ cc1:y1(0)=0;
cc2:y1(l)=0;
solve([cc1,cc2],[%k1,%k2]);
➔ m1: matrix(
[1,1],
[%e^(l·sqrt(−lambda)),%e^(−l·sqrt(−lambda))]
);
Pr6CA.wxmx 19 / 21
➔ determinant(m1);
➔ sol2:ode2(ec1,y,x);
➔ define(y2(x),rhs(sol2));
➔ cc1b:y2(0)=0;
cc2b:y2(l)=0;
solve([cc1b,cc2b],[%k1,%k2]);
➔ m2: matrix(
[1,0],
[l,1]
);
➔ determinant(m2);
➔ sol3:ode2(ec1,y,x);
➔ define(y3(x),rhs(sol3));
➔ cc1c:y3(0)=0;
cc2c:y3(l)=0;
solve([cc1c,cc2c],[%k1,%k2]);
➔ m3: matrix(
[0,1],
[sin(l·sqrt(lambda)),cos(l·sqrt(lambda))]
);
➔ d3:determinant(m3);
➔ solve(d3=0,lambda);
➔ lambd(n, l):=(n·%pi/l)^2;
➔ y(n,x,l):=sin(sqrt(lambd(n,l))·x);
➔ y(n,x,l);
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);
➔ kill(u);
➔ load(draw)$
➔ u(x,t,l,n,c):=y(x,l,n,c)·T(t,l,n,c);
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));
➔ expr1:first(lhs(expr));
expr2:second(lhs(expr));
➔ ecu:expr1=expr2;
➔ ecu1:expr1=fun1(l,n,c);
ecu2:expr2=fun1(l,n,c);
➔ 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);
➔ 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);
➔ ratsimp(apply1(ec3k1(k,t),regla1));
➔ radcan(%);
➔ factor(%);
➔ expand(%);
➔ ev(%, nouns);
➔ c;
➔ U4;