Application Center - Maplesoft

App Preview:

Fourier Approximate Solutions to PDE Boundary Value Problems

You can switch back to the summary page by clicking here.

Learn about Maple
Download Application


 

ApproxSol_PDE_BVP.mws

Fourier Approximate Solutions to PDE Boundary Value Problems

by Aleksas Domarkas

Vilnius University, Faculty of Mathematics and Informatics,

Naugarduko 24, Vilnius, Lithuania

aleksas@ieva.mif.vu.lt

In this session we find  approximate solutions to boundary value problems for heat  and wave equations using Fourier method. We solve problems from    Numerical Solutions to PDE Boundary Value Problems in Maple 8.

Example 1

Problem

>    restart; Order:=30:

>    Heat_Eqn:=diff(u(x,t),t)-a^2*diff(u(x,t),x,x)=0; #0<x<1, t>0

Heat_Eqn := diff(u(x,t),t)-a^2*diff(u(x,t),`$`(x,2)) = 0

>    BCs:={u(x,0)=phi(x),u(0,x)=0, u(1,x)=0};

BCs := {u(x,0) = phi(x), u(0,x) = 0, u(1,x) = 0}

>    a:=sqrt(1/10);

a := 1/10*sqrt(10)

>    phi:=x->(1-x)*(1-exp(-50*x));

phi := proc (x) options operator, arrow; (1-x)*(1-exp(-50*x)) end proc

>    plot(phi,0..1);

[Maple Plot]

>   

Solving problem

We solve corresponding eigenvalue problem:

>    L:=-diff(y(x),x,x)=lambda*y(x);

>    s1:=y(0)=0; s2:=y(1)=0;

>    assume(lambda>0);

L := -diff(y(x),`$`(x,2)) = lambda*y(x)

s1 := y(0) = 0

s2 := y(1) = 0

>    sol:=rhs(dsolve(L,y(x)));

sol := _C1*sin(sqrt(lambda)*x)+_C2*cos(sqrt(lambda)*x)

>    sist:={subs(x=0,sol),subs(x=1,sol)};   

sist := {_C1*sin(0)+_C2*cos(0), _C1*sin(sqrt(lambda))+_C2*cos(sqrt(lambda))}

>    linalg[genmatrix](sist,{_C1,_C2});   

matrix([[0, 1], [sin(sqrt(lambda)), cos(sqrt(lambda))]])

>    chl:=combine(linalg[det](%));      

chl := -sin(sqrt(lambda))

>    _EnvAllSolutions := true:

>    solve(chl,lambda);

Pi^2*_Z1^2

>    indets(%);

{_Z1}

>    subs(%[1]='k',%%):

>    ev:=unapply(%,k);

ev := proc (k) options operator, arrow; Pi^2*k^2 end proc

>    assume(k,posint);

>    subs(lambda=ev(k),L);

-diff(y(x),`$`(x,2)) = Pi^2*k^2*y(x)

>    dsolve({%,s1,s2},y(x));

y(x) = _C1*sin(Pi*k*x)

>    rhs(%)/sqrt(int(rhs(%)^2,x=0..1));

_C1*sin(Pi*k*x)*2^(1/2)/(_C1^2)^(1/2)

>    simplify(%,radical,symbolic):

>    ef:=unapply(%,(k,x)):

Eigenvalues and eigenfunctions:

>    ev(k);ef(k,x);

Pi^2*k^2

sin(Pi*k*x)*sqrt(2)

Solution we find in form:

>    solution:=Sum(T[k](t)*ef(k,x),k=1..Order);

solution := Sum(T[k](t)*sin(Pi*k*x)*sqrt(2),k = 1 .. 30)

For coefficients    T[k](t)   we solve ODE problem:

>    Tk:=simplify(dsolve({diff(T[k](t),t)+a^2*ev(k)*T[k](t)=0,

>    T[k](0)=int(phi(x)*ef(k,x),x=0..1)}));

Tk := T[k](t) = -100*2^(1/2)*(exp(-50)*Pi^2*k^2*(-1)^k-26*Pi^2*k^2-62500)/k/Pi/(6250000+5000*Pi^2*k^2+Pi^4*k^4)*exp(-1/10*Pi^2*k^2*t)

>    map(simplify,value(subs(Tk,solution))):

>   

Solution

>    u:=unapply(%,(x,t)):

>    `u(x,t)`=sort(map(factor,u(x,t)),[seq(sin(Pi*k*x),k=1..Order)]);

`u(x,t)` = 200*(exp(-50)*Pi^2+26*Pi^2+62500)*exp(-1/10*Pi^2*t)/Pi/(2500+Pi^2)^2*sin(Pi*x)-25*(exp(-50)*Pi^2-26*Pi^2-15625)*exp(-2/5*Pi^2*t)/Pi/(625+Pi^2)^2*sin(2*Pi*x)+200/3*(9*exp(-50)*Pi^2+234*Pi^2+6...
`u(x,t)` = 200*(exp(-50)*Pi^2+26*Pi^2+62500)*exp(-1/10*Pi^2*t)/Pi/(2500+Pi^2)^2*sin(Pi*x)-25*(exp(-50)*Pi^2-26*Pi^2-15625)*exp(-2/5*Pi^2*t)/Pi/(625+Pi^2)^2*sin(2*Pi*x)+200/3*(9*exp(-50)*Pi^2+234*Pi^2+6...
`u(x,t)` = 200*(exp(-50)*Pi^2+26*Pi^2+62500)*exp(-1/10*Pi^2*t)/Pi/(2500+Pi^2)^2*sin(Pi*x)-25*(exp(-50)*Pi^2-26*Pi^2-15625)*exp(-2/5*Pi^2*t)/Pi/(625+Pi^2)^2*sin(2*Pi*x)+200/3*(9*exp(-50)*Pi^2+234*Pi^2+6...
`u(x,t)` = 200*(exp(-50)*Pi^2+26*Pi^2+62500)*exp(-1/10*Pi^2*t)/Pi/(2500+Pi^2)^2*sin(Pi*x)-25*(exp(-50)*Pi^2-26*Pi^2-15625)*exp(-2/5*Pi^2*t)/Pi/(625+Pi^2)^2*sin(2*Pi*x)+200/3*(9*exp(-50)*Pi^2+234*Pi^2+6...
`u(x,t)` = 200*(exp(-50)*Pi^2+26*Pi^2+62500)*exp(-1/10*Pi^2*t)/Pi/(2500+Pi^2)^2*sin(Pi*x)-25*(exp(-50)*Pi^2-26*Pi^2-15625)*exp(-2/5*Pi^2*t)/Pi/(625+Pi^2)^2*sin(2*Pi*x)+200/3*(9*exp(-50)*Pi^2+234*Pi^2+6...
`u(x,t)` = 200*(exp(-50)*Pi^2+26*Pi^2+62500)*exp(-1/10*Pi^2*t)/Pi/(2500+Pi^2)^2*sin(Pi*x)-25*(exp(-50)*Pi^2-26*Pi^2-15625)*exp(-2/5*Pi^2*t)/Pi/(625+Pi^2)^2*sin(2*Pi*x)+200/3*(9*exp(-50)*Pi^2+234*Pi^2+6...
`u(x,t)` = 200*(exp(-50)*Pi^2+26*Pi^2+62500)*exp(-1/10*Pi^2*t)/Pi/(2500+Pi^2)^2*sin(Pi*x)-25*(exp(-50)*Pi^2-26*Pi^2-15625)*exp(-2/5*Pi^2*t)/Pi/(625+Pi^2)^2*sin(2*Pi*x)+200/3*(9*exp(-50)*Pi^2+234*Pi^2+6...
`u(x,t)` = 200*(exp(-50)*Pi^2+26*Pi^2+62500)*exp(-1/10*Pi^2*t)/Pi/(2500+Pi^2)^2*sin(Pi*x)-25*(exp(-50)*Pi^2-26*Pi^2-15625)*exp(-2/5*Pi^2*t)/Pi/(625+Pi^2)^2*sin(2*Pi*x)+200/3*(9*exp(-50)*Pi^2+234*Pi^2+6...
`u(x,t)` = 200*(exp(-50)*Pi^2+26*Pi^2+62500)*exp(-1/10*Pi^2*t)/Pi/(2500+Pi^2)^2*sin(Pi*x)-25*(exp(-50)*Pi^2-26*Pi^2-15625)*exp(-2/5*Pi^2*t)/Pi/(625+Pi^2)^2*sin(2*Pi*x)+200/3*(9*exp(-50)*Pi^2+234*Pi^2+6...
`u(x,t)` = 200*(exp(-50)*Pi^2+26*Pi^2+62500)*exp(-1/10*Pi^2*t)/Pi/(2500+Pi^2)^2*sin(Pi*x)-25*(exp(-50)*Pi^2-26*Pi^2-15625)*exp(-2/5*Pi^2*t)/Pi/(625+Pi^2)^2*sin(2*Pi*x)+200/3*(9*exp(-50)*Pi^2+234*Pi^2+6...
`u(x,t)` = 200*(exp(-50)*Pi^2+26*Pi^2+62500)*exp(-1/10*Pi^2*t)/Pi/(2500+Pi^2)^2*sin(Pi*x)-25*(exp(-50)*Pi^2-26*Pi^2-15625)*exp(-2/5*Pi^2*t)/Pi/(625+Pi^2)^2*sin(2*Pi*x)+200/3*(9*exp(-50)*Pi^2+234*Pi^2+6...
`u(x,t)` = 200*(exp(-50)*Pi^2+26*Pi^2+62500)*exp(-1/10*Pi^2*t)/Pi/(2500+Pi^2)^2*sin(Pi*x)-25*(exp(-50)*Pi^2-26*Pi^2-15625)*exp(-2/5*Pi^2*t)/Pi/(625+Pi^2)^2*sin(2*Pi*x)+200/3*(9*exp(-50)*Pi^2+234*Pi^2+6...
`u(x,t)` = 200*(exp(-50)*Pi^2+26*Pi^2+62500)*exp(-1/10*Pi^2*t)/Pi/(2500+Pi^2)^2*sin(Pi*x)-25*(exp(-50)*Pi^2-26*Pi^2-15625)*exp(-2/5*Pi^2*t)/Pi/(625+Pi^2)^2*sin(2*Pi*x)+200/3*(9*exp(-50)*Pi^2+234*Pi^2+6...
`u(x,t)` = 200*(exp(-50)*Pi^2+26*Pi^2+62500)*exp(-1/10*Pi^2*t)/Pi/(2500+Pi^2)^2*sin(Pi*x)-25*(exp(-50)*Pi^2-26*Pi^2-15625)*exp(-2/5*Pi^2*t)/Pi/(625+Pi^2)^2*sin(2*Pi*x)+200/3*(9*exp(-50)*Pi^2+234*Pi^2+6...
`u(x,t)` = 200*(exp(-50)*Pi^2+26*Pi^2+62500)*exp(-1/10*Pi^2*t)/Pi/(2500+Pi^2)^2*sin(Pi*x)-25*(exp(-50)*Pi^2-26*Pi^2-15625)*exp(-2/5*Pi^2*t)/Pi/(625+Pi^2)^2*sin(2*Pi*x)+200/3*(9*exp(-50)*Pi^2+234*Pi^2+6...

The solution at  x=0.5 , t=3

>    evalf(u(0.5,3),20);

.32835441455045746901e-1

>    plot3d(u(x,t),x=0..1,t=0..2,axes=boxed,labels=["x","t","u(x,t)"]);

[Maple Plot]

>    plots[animate](u(x,t),x=0..1,t=0..2,frames=30,labels=["x","u(x,t)"]);

[Maple Plot]

>    plot([phi(x),u(x,0)],x=0..1);

[Maple Plot]

>   

Example 2

Problem

>    restart;

>    Heat_Eqn:=diff(u(x,t),t)-exp(-2*t)*rho(x)*diff(u(x,t),x,x)=0; #0<x<1, t>0

Heat_Eqn := diff(u(x,t),t)-exp(-2*t)*rho(x)*diff(u(x,t),`$`(x,2)) = 0

>    BCs:={u(x,0)=phi(x),u(0,x)=0, u(1,x)=0};

BCs := {u(1,x) = 0, u(0,x) = 0, u(x,0) = phi(x)}

>    rho:=x->x/2+1/1000;

rho := proc (x) options operator, arrow; 1/2*x+1/1000 end proc

>    phi:=x->sin(Pi*x);

phi := proc (x) options operator, arrow; sin(Pi*x) end proc

>   

Solving problem

We solve corresponding eigenvalue problem:

>    L:=-diff(y(x),x,x)=lambda*y(x)/rho(x);

>    s1:=y(0)=0; s2:=y(1)=0;

>    assume(lambda>0);

L := -diff(y(x),`$`(x,2)) = lambda*y(x)/(1/2*x+1/1000)

s1 := y(0) = 0

s2 := y(1) = 0

>    sol:=rhs(dsolve(L,y(x)));

sol := _C1*sqrt(2500*x+5)*BesselJ(1,1/25*sqrt(10)*sqrt(lambda)*sqrt(500*x+1))+_C2*sqrt(2500*x+5)*BesselY(1,1/25*sqrt(10)*sqrt(lambda)*sqrt(500*x+1))

>    sist:={subs(x=0,sol),subs(x=1,sol)};   

sist := {_C1*sqrt(5)*BesselJ(1,1/25*sqrt(10)*sqrt(lambda))+_C2*sqrt(5)*BesselY(1,1/25*sqrt(10)*sqrt(lambda)), _C1*sqrt(2505)*BesselJ(1,1/25*sqrt(10)*sqrt(lambda)*sqrt(501))+_C2*sqrt(2505)*BesselY(1,1/2...
sist := {_C1*sqrt(5)*BesselJ(1,1/25*sqrt(10)*sqrt(lambda))+_C2*sqrt(5)*BesselY(1,1/25*sqrt(10)*sqrt(lambda)), _C1*sqrt(2505)*BesselJ(1,1/25*sqrt(10)*sqrt(lambda)*sqrt(501))+_C2*sqrt(2505)*BesselY(1,1/2...

>    linalg[genmatrix](sist,{_C1,_C2});   

matrix([[sqrt(5)*BesselY(1,1/25*sqrt(10)*sqrt(lambda)), sqrt(5)*BesselJ(1,1/25*sqrt(10)*sqrt(lambda))], [sqrt(2505)*BesselY(1,1/25*sqrt(10)*sqrt(lambda)*sqrt(501)), sqrt(2505)*BesselJ(1,1/25*sqrt(10)*s...

>    combine(linalg[det](%));      

sqrt(12525)*BesselY(1,1/25*sqrt(10)*sqrt(lambda))*BesselJ(1,1/25*sqrt(5010)*sqrt(lambda))-sqrt(12525)*BesselJ(1,1/25*sqrt(10)*sqrt(lambda))*BesselY(1,1/25*sqrt(5010)*sqrt(lambda))

>    ch_eq:=unapply(simplify(%/sqrt(12525)),lambda);

ch_eq := proc (lambda) options operator, arrow; BesselY(1,1/25*sqrt(10)*sqrt(lambda))*BesselJ(1,1/25*sqrt(10)*sqrt(lambda)*sqrt(501))-BesselJ(1,1/25*sqrt(10)*sqrt(lambda))*BesselY(1,1/25*sqrt(10)*sqrt(...

>    plot(ch_eq(x),x=1..50);

[Maple Plot]

>    #plot(ch_eq(x),x=50..150);

The ranges  of roots  ch_eq(x)=0  are:

>    S:=1..5,5..10,10..15,20..30,30..40,40..60; #60..80,80..100,100..120,120..140;

S := 1 .. 5, 5 .. 10, 10 .. 15, 20 .. 30, 30 .. 40, 40 .. 60

>    m:=nops([S]);

m := 6

We find eigenvalues and eigenfunctions:

>    for k to m do

>    mu[k]:=fsolve(ch_eq(x), x=S[k]);
subs(_C2=1,lambda=mu[k],x=0,sol):
isolate(%,_C1):
subs(%,_C2=1,lambda=mu[k],sol):
ef[k]:=evalf(%/sqrt(evalf(int(%^2/rho(x),x=0..1))));
print(lambda[k]=mu[k]);print(y[k]=ef[k]);
end do: k:='k':

lambda[1] = 1.853596368

y[1] = .3537421558e-1*sqrt(2500.*x+5.)*BesselJ(1.,.1722136518*sqrt(500.*x+1.))+.7931241384e-3*sqrt(2500.*x+5.)*BesselY(1.,.1722136518*sqrt(500.*x+1.))
y[1] = .3537421558e-1*sqrt(2500.*x+5.)*BesselJ(1.,.1722136518*sqrt(500.*x+1.))+.7931241384e-3*sqrt(2500.*x+5.)*BesselY(1.,.1722136518*sqrt(500.*x+1.))

lambda[2] = 6.266617453

y[2] = .4764305941e-1*sqrt(2500.*x+5.)*BesselJ(1.,.3166478790*sqrt(500.*x+1.))+.3408599790e-2*sqrt(2500.*x+5.)*BesselY(1.,.3166478790*sqrt(500.*x+1.))
y[2] = .4764305941e-1*sqrt(2500.*x+5.)*BesselJ(1.,.3166478790*sqrt(500.*x+1.))+.3408599790e-2*sqrt(2500.*x+5.)*BesselY(1.,.3166478790*sqrt(500.*x+1.))

lambda[3] = 13.27407668

y[3] = .5710228743e-1*sqrt(2500.*x+5.)*BesselJ(1.,.4608527171*sqrt(500.*x+1.))+.8123330668e-2*sqrt(2500.*x+5.)*BesselY(1.,.4608527171*sqrt(500.*x+1.))
y[3] = .5710228743e-1*sqrt(2500.*x+5.)*BesselJ(1.,.4608527171*sqrt(500.*x+1.))+.8123330668e-2*sqrt(2500.*x+5.)*BesselY(1.,.4608527171*sqrt(500.*x+1.))

lambda[4] = 22.90882987

y[4] = .6450102753e-1*sqrt(2500.*x+5.)*BesselJ(1.,.6054265256*sqrt(500.*x+1.))+.1490656301e-1*sqrt(2500.*x+5.)*BesselY(1.,.6054265256*sqrt(500.*x+1.))
y[4] = .6450102753e-1*sqrt(2500.*x+5.)*BesselJ(1.,.6054265256*sqrt(500.*x+1.))+.1490656301e-1*sqrt(2500.*x+5.)*BesselY(1.,.6054265256*sqrt(500.*x+1.))

lambda[5] = 35.19291869

y[5] = .6993253628e-1*sqrt(2500.*x+5.)*BesselJ(1.,.7503910307*sqrt(500.*x+1.))+.2356013370e-1*sqrt(2500.*x+5.)*BesselY(1.,.7503910307*sqrt(500.*x+1.))
y[5] = .6993253628e-1*sqrt(2500.*x+5.)*BesselJ(1.,.7503910307*sqrt(500.*x+1.))+.2356013370e-1*sqrt(2500.*x+5.)*BesselY(1.,.7503910307*sqrt(500.*x+1.))

lambda[6] = 50.14094994

y[6] = .7329410952e-1*sqrt(2500.*x+5.)*BesselJ(1.,.8956869985*sqrt(500.*x+1.))+.3378459724e-1*sqrt(2500.*x+5.)*BesselY(1.,.8956869985*sqrt(500.*x+1.))
y[6] = .7329410952e-1*sqrt(2500.*x+5.)*BesselJ(1.,.8956869985*sqrt(500.*x+1.))+.3378459724e-1*sqrt(2500.*x+5.)*BesselY(1.,.8956869985*sqrt(500.*x+1.))

Solution we find in form:

>    solution:=Sum(T[k](t)*ef[k],k=1..m);

solution := Sum(T[k](t)*ef[k],k = 1 .. 6)

For coefficients    T[k](t)   we solve ODE problems:

>    for k to m do

>    s[k]:=simplify(dsolve({diff(T[k](t),t)+exp(-2*t)*mu[k]*T[k](t)=0,

>    T[k](0)=evalf(int(phi(x)*ef[k]/rho(x),x=0..1))})); end do;

s[1] := T[1](t) = 15242297/10000000*exp(-115849773/125000000+115849773/125000000*exp(-2*t))

s[2] := T[2](t) = -191855901/625000000*exp(-6266617453/2000000000+6266617453/2000000000*exp(-2*t))

s[3] := T[3](t) = 5108493321/100000000000*exp(-331851917/50000000+331851917/50000000*exp(-2*t))

s[4] := T[4](t) = -1102474977/100000000000*exp(-2290882987/200000000+2290882987/200000000*exp(-2*t))

s[5] := T[5](t) = 3183280309/1000000000000*exp(-3519291869/200000000+3519291869/200000000*exp(-2*t))

s[6] := T[6](t) = -238384883/200000000000*exp(-2507047497/100000000+2507047497/100000000*exp(-2*t))

>    k:='k':

>   

Solution

>    u:=unapply(subs(seq(s[k],k=1..m),value(solution)),(x,t));

u := proc (x, t) options operator, arrow; 15242297/10000000*exp(-115849773/125000000+115849773/125000000*exp(-2*t))*(.3537421558e-1*sqrt(2500.*x+5.)*BesselJ(1.,.1722136518*sqrt(500.*x+1.))+.7931241384e...
u := proc (x, t) options operator, arrow; 15242297/10000000*exp(-115849773/125000000+115849773/125000000*exp(-2*t))*(.3537421558e-1*sqrt(2500.*x+5.)*BesselJ(1.,.1722136518*sqrt(500.*x+1.))+.7931241384e...
u := proc (x, t) options operator, arrow; 15242297/10000000*exp(-115849773/125000000+115849773/125000000*exp(-2*t))*(.3537421558e-1*sqrt(2500.*x+5.)*BesselJ(1.,.1722136518*sqrt(500.*x+1.))+.7931241384e...
u := proc (x, t) options operator, arrow; 15242297/10000000*exp(-115849773/125000000+115849773/125000000*exp(-2*t))*(.3537421558e-1*sqrt(2500.*x+5.)*BesselJ(1.,.1722136518*sqrt(500.*x+1.))+.7931241384e...
u := proc (x, t) options operator, arrow; 15242297/10000000*exp(-115849773/125000000+115849773/125000000*exp(-2*t))*(.3537421558e-1*sqrt(2500.*x+5.)*BesselJ(1.,.1722136518*sqrt(500.*x+1.))+.7931241384e...
u := proc (x, t) options operator, arrow; 15242297/10000000*exp(-115849773/125000000+115849773/125000000*exp(-2*t))*(.3537421558e-1*sqrt(2500.*x+5.)*BesselJ(1.,.1722136518*sqrt(500.*x+1.))+.7931241384e...
u := proc (x, t) options operator, arrow; 15242297/10000000*exp(-115849773/125000000+115849773/125000000*exp(-2*t))*(.3537421558e-1*sqrt(2500.*x+5.)*BesselJ(1.,.1722136518*sqrt(500.*x+1.))+.7931241384e...
u := proc (x, t) options operator, arrow; 15242297/10000000*exp(-115849773/125000000+115849773/125000000*exp(-2*t))*(.3537421558e-1*sqrt(2500.*x+5.)*BesselJ(1.,.1722136518*sqrt(500.*x+1.))+.7931241384e...
u := proc (x, t) options operator, arrow; 15242297/10000000*exp(-115849773/125000000+115849773/125000000*exp(-2*t))*(.3537421558e-1*sqrt(2500.*x+5.)*BesselJ(1.,.1722136518*sqrt(500.*x+1.))+.7931241384e...
u := proc (x, t) options operator, arrow; 15242297/10000000*exp(-115849773/125000000+115849773/125000000*exp(-2*t))*(.3537421558e-1*sqrt(2500.*x+5.)*BesselJ(1.,.1722136518*sqrt(500.*x+1.))+.7931241384e...
u := proc (x, t) options operator, arrow; 15242297/10000000*exp(-115849773/125000000+115849773/125000000*exp(-2*t))*(.3537421558e-1*sqrt(2500.*x+5.)*BesselJ(1.,.1722136518*sqrt(500.*x+1.))+.7931241384e...
u := proc (x, t) options operator, arrow; 15242297/10000000*exp(-115849773/125000000+115849773/125000000*exp(-2*t))*(.3537421558e-1*sqrt(2500.*x+5.)*BesselJ(1.,.1722136518*sqrt(500.*x+1.))+.7931241384e...

The solution at x=0.5 , t=3

>    evalf(u(0.5,3),20);

.33929862627482972827

>    plot3d(u(x,t),x=0..1,t=0..2,axes=boxed,labels=["x","t","u(x,t)"]);

[Maple Plot]

>    plots[animate](u(x,t),x=0..1,t=0..2,frames=30,labels=["x","u(x,t)"]);

[Maple Plot]

>   

Example 3

Problem

>    restart; Order:=20:

>    Wave_Eqn:=diff(u(x,t),t,t)-a^2*diff(u(x,t),x,x)=0; #0<x<1, t>0

Wave_Eqn := diff(u(x,t),`$`(t,2))-a^2*diff(u(x,t),`$`(x,2)) = 0

>    BCs:={u(x,0)=phi(x), D[2](u)(x,t)=0, u(0,x)=0, u(1,x)=0};

BCs := {u(1,x) = 0, u(0,x) = 0, D[2](u)(x,t) = 0, u(x,0) = phi(x)}

>    a:=sqrt(1/10);

a := 1/10*sqrt(10)

case 1:

>    phi:=x->piecewise(x<=1/2,x,1-x);

phi := proc (x) options operator, arrow; piecewise(x <= 1/2,x,1-x) end proc

>    plot(phi,0..1);

[Maple Plot]

>   

Solving problem

Corresponding egenvalue problem:

>    L:=-diff(y(x),x,x)=lambda*y(x);

>    s1:=y(0)=0; s2:=y(1)=0;

L := -diff(y(x),`$`(x,2)) = lambda*y(x)

s1 := y(0) = 0

s2 := y(1) = 0

Eigenvalues and eigenfunctions(same as in Example 1):

>    ev:=unapply(Pi^2*k^2,k);

ev := proc (k) options operator, arrow; Pi^2*k^2 end proc

>    ef:=unapply(sin(Pi*k*x)*sqrt(2),(k,x));

ef := proc (k, x) options operator, arrow; sin(Pi*k*x)*sqrt(2) end proc

Solution of this problem is sought in in the form:

>    solution:=Sum(T[k](t)*ef(k,x),k=1..Order);

solution := Sum(T[k](t)*sin(Pi*k*x)*sqrt(2),k = 1 .. 20)

For coefficients   T[k](t)  we solve ODE problem:

>    Tk:=simplify(dsolve({diff(T[k](t),t,t)+a^2*ev(k)*T[k](t)=0,

>    T[k](0)=int(phi(x)*ef(k,x),x=0..1),D(T[k])(0)=0}));

Tk := T[k](t) = -(sin(Pi*k)-2*sin(1/2*Pi*k))*2^(1/2)/Pi^2/k^2*cos(1/10*Pi*sqrt(2)*sqrt(5)*k*t)

>    map(simplify,value(subs(Tk,solution))):

>   

Solution

>    u:=unapply(%,(x,t));

u := proc (x, t) options operator, arrow; 4/Pi^2*cos(1/10*Pi*sqrt(2)*sqrt(5)*t)*sin(Pi*x)-4/9*1/Pi^2*cos(3/10*Pi*sqrt(2)*sqrt(5)*t)*sin(3*Pi*x)+4/25/Pi^2*cos(1/2*Pi*sqrt(2)*sqrt(5)*t)*sin(5*Pi*x)-4/49*...
u := proc (x, t) options operator, arrow; 4/Pi^2*cos(1/10*Pi*sqrt(2)*sqrt(5)*t)*sin(Pi*x)-4/9*1/Pi^2*cos(3/10*Pi*sqrt(2)*sqrt(5)*t)*sin(3*Pi*x)+4/25/Pi^2*cos(1/2*Pi*sqrt(2)*sqrt(5)*t)*sin(5*Pi*x)-4/49*...
u := proc (x, t) options operator, arrow; 4/Pi^2*cos(1/10*Pi*sqrt(2)*sqrt(5)*t)*sin(Pi*x)-4/9*1/Pi^2*cos(3/10*Pi*sqrt(2)*sqrt(5)*t)*sin(3*Pi*x)+4/25/Pi^2*cos(1/2*Pi*sqrt(2)*sqrt(5)*t)*sin(5*Pi*x)-4/49*...
u := proc (x, t) options operator, arrow; 4/Pi^2*cos(1/10*Pi*sqrt(2)*sqrt(5)*t)*sin(Pi*x)-4/9*1/Pi^2*cos(3/10*Pi*sqrt(2)*sqrt(5)*t)*sin(3*Pi*x)+4/25/Pi^2*cos(1/2*Pi*sqrt(2)*sqrt(5)*t)*sin(5*Pi*x)-4/49*...

>    plot3d(u(x,t),x=0..1,t=0..4*Pi,axes=boxed,labels=["x","t","u(x,t)"]);

[Maple Plot]

>    plots[animate](u(x,t),x=0..1,t=0..2*Pi,frames=30,labels=["x","u(x,t)"]);

[Maple Plot]

>    plot([phi(x),u(x,0)],x=0..1);

[Maple Plot]

>   

Example 4

Problem

>    restart;

>    Wave_Eqn:=diff(u(x,t),t,t)-a^2*diff(u(x,t),x,x)=0; #0<x<1, t>0

Wave_Eqn := diff(u(x,t),`$`(t,2))-a^2*diff(u(x,t),`$`(x,2)) = 0

>    BCs:={u(x,0)=phi(x), D[2](u)(x,t)=0, u(0,t)=0, u(1,t)=0};

BCs := {u(0,t) = 0, u(1,t) = 0, D[2](u)(x,t) = 0, u(x,0) = phi(x)}

>    a:=sqrt(1/10);

a := 1/10*sqrt(10)

case 2:

>    phi:=x->sin(4*Pi*x)/2;

phi := proc (x) options operator, arrow; 1/2*sin(4*Pi*x) end proc

>    plot(phi,0..1);

[Maple Plot]

>   

Solving problem

Corresponding eigenvalue problem:

>    L:=-diff(y(x),x,x)=lambda*y(x);

>    s1:=y(0)=0; s2:=y(1)=0;

L := -diff(y(x),`$`(x,2)) = lambda*y(x)

s1 := y(0) = 0

s2 := y(1) = 0

Eigenvalues and eigenfunctions(same as in Example 1):

>    ev:=unapply(Pi^2*k^2,k);

ev := proc (k) options operator, arrow; Pi^2*k^2 end proc

>    ef:=unapply(sin(Pi*k*x)*sqrt(2),(k,x));

ef := proc (k, x) options operator, arrow; sin(Pi*k*x)*sqrt(2) end proc

Solution of this problem is sought in in the form:

>    solution:=sum(T[k](t)*ef(k,x),k=1..Order);

solution := T[1](t)*sin(Pi*x)*sqrt(2)+T[2](t)*sin(2*Pi*x)*sqrt(2)+T[3](t)*sin(3*Pi*x)*sqrt(2)+T[4](t)*sin(4*Pi*x)*sqrt(2)+T[5](t)*sin(5*Pi*x)*sqrt(2)+T[6](t)*sin(6*Pi*x)*sqrt(2)

For coefficients    T[k](t)   we solve ODE problems:

>    for k to Order do

>    s[k]:=combine(dsolve({diff(T[k](t),t,t)+a^2*ev(k)*T[k](t)=0,

>    T[k](0)=int(phi(x)*ef(k,x),x=0..1),D(T[k])(0)=0}));od; k:='k':

s[1] := T[1](t) = 0

s[2] := T[2](t) = 0

s[3] := T[3](t) = 0

s[4] := T[4](t) = 1/4*sqrt(2)*cos(2/5*sqrt(10)*Pi*t)

s[5] := T[5](t) = 0

s[6] := T[6](t) = 0

>   

Solution

In this case we have exact solution:

>    sol:=subs(seq(s[k],k=1..Order),solution);

sol := 1/2*cos(2/5*sqrt(10)*Pi*t)*sin(4*Pi*x)

>    u:=unapply(%,(x,t));

u := proc (x, t) options operator, arrow; 1/2*cos(2/5*sqrt(10)*Pi*t)*sin(4*Pi*x) end proc

>    plot3d(u(x,t),x=0..1,t=0..Pi/2,axes=boxed,labels=["x","t","u(x,t)"]);

[Maple Plot]

>    plots[animate](u(x,t),x=0..1,t=0..Pi/2,frames=30,labels=["x","u(x,t)"]);

[Maple Plot]

>   

Checking the Solution

>    Wave_Eqn;

0 = 0

>    u(x,0); is(%=phi(x));

1/2*sin(4*Pi*x)

true

>    D[2](u)(x,0);

0

>    u(0,t);

0

>    u(1,t);

0

>   

>