специальные функции

Цилиндрические функции

>    restart;

>    with(PDEtools); with(plots);

[PDEplot, TWSolutions, build, casesplit, charstrip, dchange, dcoeffs, declare, difforder, dpolyform, dsubs, mapde, separability, splitstrip, splitsys, undeclare]
[PDEplot, TWSolutions, build, casesplit, charstrip, dchange, dcoeffs, declare, difforder, dpolyform, dsubs, mapde, separability, splitstrip, splitsys, undeclare]

Warning, the name changecoords has been redefined

[animate, animate3d, animatecurve, arrow, changecoords, complexplot, complexplot3d, conformal, conformal3d, contourplot, contourplot3d, coordplot, coordplot3d, cylinderplot, densityplot, display, displ...
[animate, animate3d, animatecurve, arrow, changecoords, complexplot, complexplot3d, conformal, conformal3d, contourplot, contourplot3d, coordplot, coordplot3d, cylinderplot, densityplot, display, displ...
[animate, animate3d, animatecurve, arrow, changecoords, complexplot, complexplot3d, conformal, conformal3d, contourplot, contourplot3d, coordplot, coordplot3d, cylinderplot, densityplot, display, displ...
[animate, animate3d, animatecurve, arrow, changecoords, complexplot, complexplot3d, conformal, conformal3d, contourplot, contourplot3d, coordplot, coordplot3d, cylinderplot, densityplot, display, displ...
[animate, animate3d, animatecurve, arrow, changecoords, complexplot, complexplot3d, conformal, conformal3d, contourplot, contourplot3d, coordplot, coordplot3d, cylinderplot, densityplot, display, displ...
[animate, animate3d, animatecurve, arrow, changecoords, complexplot, complexplot3d, conformal, conformal3d, contourplot, contourplot3d, coordplot, coordplot3d, cylinderplot, densityplot, display, displ...
[animate, animate3d, animatecurve, arrow, changecoords, complexplot, complexplot3d, conformal, conformal3d, contourplot, contourplot3d, coordplot, coordplot3d, cylinderplot, densityplot, display, displ...

Запишем уравнение Бесселя

>    Z:=x^2*diff(y(v,x),x$2)+x*diff(y(v,x),x)+(x^2+v^2)*y(v,x)=0;

Z := x^2*diff(y(v,x),`$`(x,2))+x*diff(y(v,x),x)+(x^2+v^2)*y(v,x) = 0

найдем его решение

>    z1:=pdsolve(Z);

z1 := y(v,x) = _F1(v)*BesselJ(v*I,x)+_F2(v)*BesselY(v*I,x)

видим, что решения дифференциального уравнения Бесселя (Z) называются цилиндрическими, или бесселевыми функциями.Здесь x вещественная или комплексная переменная, а v вещественный или комплексный пареметр.  

>    J:=(v,x)->sum((((-1)^k)/(factorial(k)*GAMMA(k+v+1))*((x/2)^(2*k+v))),k=0..infinity); J1:=(v,x)->sum(((-1)^k)*(((-1)^k)/(factorial(k)*GAMMA(k+v+1))*((x/2)^(2*k+v))),k=0..infinity);

J := proc (v, x) options operator, arrow; sum((-1)^k/k!/GAMMA(k+v+1)*(1/2*x)^(2*k+v),k = 0 .. infinity) end proc

J1 := proc (v, x) options operator, arrow; sum((-1)^k*(-1)^k/k!/GAMMA(k+v+1)*(1/2*x)^(2*k+v),k = 0 .. infinity) end proc

В MAPLE существуют встроенные функции BesselJ и BesselY (функции Бесселя 1 и 2 рода). Построим их графики с помощью специальных команд.

>    plot([J(0,x),J(1,x),J(2,x)],x=0..10,y=-1..1,color=[red,blue,green]); plot([BesselJ(0,x),BesselJ(1,x),BesselJ(2,x)],x=0..10,y=-1..1,color=[red,blue,green]);  

[Maple Plot]

[Maple Plot]

>    animate(J(v,x),x=0..10,v=0..4,frames=40); animate(BesselJ(v,x),x=0..10,v=0..4,frames=40);

[Maple Plot]

[Maple Plot]

>    plot3d(J(v,x),x=0..10,v=0..5); plot3d(BesselJ(v,x),x=0..10,v=0..5);

[Maple Plot]

[Maple Plot]

>    animate3d(J(v,x)*t,x=0..10,v=0..4,t=0.1..1,frames=15); animate3d(BesselJ(v,x)*t,x=0..10,v=0..4,t=0.1..1,frames=15);

[Maple Plot]

[Maple Plot]

>   

>    plot([J1(1,x),J1(2,x),J1(3,x),J1(4,x)],x=-5..5);

[Maple Plot]

>    plot([BesselI(1,x),BesselI(2,x),BesselI(3,x),BesselI(4,x)],x=-5..5,y=-1..1);

[Maple Plot]

>    N:=(v,x)->(1/sin(Pi*v))*(J(v,x)*cos(Pi*v)-J1(v,x)); v<>0;

N := proc (v, x) options operator, arrow; 1/sin(Pi*v)*(J(v,x)*cos(Pi*v)-J1(v,x)) end proc

v <> 0

>    plot([BesselY(1,x),BesselY(2,x),BesselY(3,x)],x=-1..10,y=-3..1,color=[red,blue,green]);

[Maple Plot]

Сферические функции

>    restart;

>    with(PDEtools): with(DEtools):

>    PDE:=diff(u(r,theta,phi),r$2)+(2/r)*diff(u(r,theta,phi),r)+(1/r^2)*(diff(u(r,theta,phi),theta$2)+cot(theta)*diff(u(r,theta,phi),theta))+1/((r^2)*(sin(theta))^2)*(diff(u(r,theta,phi),phi$2))=0;

PDE := diff(u(r,theta,phi),`$`(r,2))+2/r*diff(u(r,theta,phi),r)+1/r^2*(diff(u(r,theta,phi),`$`(theta,2))+cot(theta)*diff(u(r,theta,phi),theta))+1/r^2/sin(theta)^2*diff(u(r,theta,phi),`$`(phi,2)) = 0

>    a1:=pdsolve(PDE);

a1 := `&where`(u(r,theta,phi) = _F1(r)*_F2(theta)*_F3(phi),[{diff(_F2(theta),`$`(theta,2)) = _c[2]/sin(theta)^2*_F2(theta)-_c[1]*_F2(theta)-cot(theta)*diff(_F2(theta),theta), diff(_F1(r),`$`(r,2)) = 1/...
a1 := `&where`(u(r,theta,phi) = _F1(r)*_F2(theta)*_F3(phi),[{diff(_F2(theta),`$`(theta,2)) = _c[2]/sin(theta)^2*_F2(theta)-_c[1]*_F2(theta)-cot(theta)*diff(_F2(theta),theta), diff(_F1(r),`$`(r,2)) = 1/...
a1 := `&where`(u(r,theta,phi) = _F1(r)*_F2(theta)*_F3(phi),[{diff(_F2(theta),`$`(theta,2)) = _c[2]/sin(theta)^2*_F2(theta)-_c[1]*_F2(theta)-cot(theta)*diff(_F2(theta),theta), diff(_F1(r),`$`(r,2)) = 1/...

>    t1:=_c2=mu; t2:=_c1=lambda; t3:=_F1(r)=R(r); t4:=_F2(theta)=Theta(theta); t5:=_F3(phi)=Phi(phi);

t1 := _c2 = mu

t2 := _c1 = lambda

t3 := _F1(r) = R(r)

t4 := _F2(theta) = Theta(theta)

t5 := _F3(phi) = Phi(phi)

>    a3:=subs({t1,t2,t3,t4,t5},a1); a3;

a3 := `&where`(u(r,theta,phi) = R(r)*Theta(theta)*Phi(phi),[{diff(Theta(theta),`$`(theta,2)) = _c[2]/sin(theta)^2*Theta(theta)-_c[1]*Theta(theta)-cot(theta)*diff(Theta(theta),theta), diff(R(r),`$`(r,2)...
a3 := `&where`(u(r,theta,phi) = R(r)*Theta(theta)*Phi(phi),[{diff(Theta(theta),`$`(theta,2)) = _c[2]/sin(theta)^2*Theta(theta)-_c[1]*Theta(theta)-cot(theta)*diff(Theta(theta),theta), diff(R(r),`$`(r,2)...

`&where`(u(r,theta,phi) = R(r)*Theta(theta)*Phi(phi),[{diff(Theta(theta),`$`(theta,2)) = _c[2]/sin(theta)^2*Theta(theta)-_c[1]*Theta(theta)-cot(theta)*diff(Theta(theta),theta), diff(R(r),`$`(r,2)) = 1/...
`&where`(u(r,theta,phi) = R(r)*Theta(theta)*Phi(phi),[{diff(Theta(theta),`$`(theta,2)) = _c[2]/sin(theta)^2*Theta(theta)-_c[1]*Theta(theta)-cot(theta)*diff(Theta(theta),theta), diff(R(r),`$`(r,2)) = 1/...

>    a2:=dchange(theta=arccos(x),a1);

a2 := `&where`(u(x,r,phi) = _F1(r)*_F2(x)*_F3(phi),[{-(1-x^2)^(1/2)*(1/(1-x^2)^(1/2)*diff(_F2(x),x)*x-(1-x^2)^(1/2)*diff(_F2(x),`$`(x,2))) = _c[2]/(1-x^2)*_F2(x)-_c[1]*_F2(x)+x*diff(_F2(x),x), diff(_F1...
a2 := `&where`(u(x,r,phi) = _F1(r)*_F2(x)*_F3(phi),[{-(1-x^2)^(1/2)*(1/(1-x^2)^(1/2)*diff(_F2(x),x)*x-(1-x^2)^(1/2)*diff(_F2(x),`$`(x,2))) = _c[2]/(1-x^2)*_F2(x)-_c[1]*_F2(x)+x*diff(_F2(x),x), diff(_F1...
a2 := `&where`(u(x,r,phi) = _F1(r)*_F2(x)*_F3(phi),[{-(1-x^2)^(1/2)*(1/(1-x^2)^(1/2)*diff(_F2(x),x)*x-(1-x^2)^(1/2)*diff(_F2(x),`$`(x,2))) = _c[2]/(1-x^2)*_F2(x)-_c[1]*_F2(x)+x*diff(_F2(x),x), diff(_F1...

>    a2;

`&where`(u(x,r,phi) = _F1(r)*_F2(x)*_F3(phi),[{-(1-x^2)^(1/2)*(1/(1-x^2)^(1/2)*diff(_F2(x),x)*x-(1-x^2)^(1/2)*diff(_F2(x),`$`(x,2))) = _c[2]/(1-x^2)*_F2(x)-_c[1]*_F2(x)+x*diff(_F2(x),x), diff(_F1(r),`$...
`&where`(u(x,r,phi) = _F1(r)*_F2(x)*_F3(phi),[{-(1-x^2)^(1/2)*(1/(1-x^2)^(1/2)*diff(_F2(x),x)*x-(1-x^2)^(1/2)*diff(_F2(x),`$`(x,2))) = _c[2]/(1-x^2)*_F2(x)-_c[1]*_F2(x)+x*diff(_F2(x),x), diff(_F1(r),`$...
`&where`(u(x,r,phi) = _F1(r)*_F2(x)*_F3(phi),[{-(1-x^2)^(1/2)*(1/(1-x^2)^(1/2)*diff(_F2(x),x)*x-(1-x^2)^(1/2)*diff(_F2(x),`$`(x,2))) = _c[2]/(1-x^2)*_F2(x)-_c[1]*_F2(x)+x*diff(_F2(x),x), diff(_F1(r),`$...

>   

>    pde1:=(1-x^2)*(diff(Theta(theta),x$2))-2*x*(diff(Theta(theta),x))+lambda*Theta(theta)=0;

>   

pde1 := lambda*Theta(theta) = 0

>    P:=(n,x)->(1/((2^n)*(factorial(n))))*(diff(((x^2-1)^n),x$n));

P := proc (n, x) options operator, arrow; 1/(2^n)/n!*diff((x^2-1)^n,`$`(x,n)) end proc

>    plot([P(1,x),P(2,x),P(3,x),P(4,x),P(5,x)],x=-1.1..1.1,y=-1.1..1.1);

[Maple Plot]

>   

>    plot([LegendreP(1, x),LegendreP(2, x),LegendreP(3, x),LegendreP(4, x),LegendreP(5, x)],x=-1.1..1.1,v=-1.1..1.1);

>   

[Maple Plot]

>    Pr:=(n,m,x)->((x^2-1)^(m/2))*diff(P(n,x),x$m); n=0..n;

Pr := proc (n, m, x) options operator, arrow; (x^2-1)^(1/2*m)*diff(P(n,x),`$`(x,m)) end proc

n = 0 .. n

>    plot([Pr(3,3,x),Pr(2,2,x),Pr(1,1,x),Pr(4,2,x)],x=-2..2,Pr=-3..3,color=[red,blue,green,black]);

[Maple Plot]

>    plot([LegendreP(3,3, x),LegendreP(2,2,x),LegendreP(1,1, x),LegendreP(4,2,x)],x=-2..2,LegendreP=-3..3,color=[red,blue,green,black]);

[Maple Plot]

>   

Полиномы Лежандра

>    plot({LegendreP(0,x),LegendreP(1,x),LegendreP(2,x),LegendreP(3,x),LegendreP(4,x)},x=0..1);

[Maple Plot]

>    plot({LegendreQ(0,x),LegendreQ(1,x),LegendreQ(2,x),LegendreQ(3,x),LegendreQ(4,x)},x=1.5..5);

[Maple Plot]

Функция ошибки

функция оштбки (erf(x)) определяется:

>    u:=x->2/sqrt(Pi) * int(exp(-t^2), t=0..x);

u := proc (x) options operator, arrow; 2/sqrt(Pi)*int(exp(-t^2),t = 0 .. x) end proc

Дополнительная функция ошибки (erfc(x)) определяется как

>    u1:=x-> 1 - erf(x);

u1 := proc (x) options operator, arrow; 1-erf(x) end proc

>    u1_1:=x-> 1 - 2/Pi^(1/2) * int(exp(-t^2), t=0..x);

u1_1 := proc (x) options operator, arrow; 1-2/Pi^(1/2)*int(exp(-t^2),t = 0 .. x) end proc

Повторенные интегралы дополнительной функции ошибки определены (erfc(n, x))

>    u2:=(n, x)-> int(erfc(n-1,t), t=x..infinity);   n >= 0;

u2 := proc (n, x) options operator, arrow; int(erfc(n-1,t),t = x .. infinity) end proc

0 <= n

Воображаемая функция ошибки(erfi(x)) определена следующим образом

>    u3:=x->-I*erf(I*x) = 2/sqrt(Pi) * int(exp(t^2), t=0..x);

u3 := proc (x) options operator, arrow; -I*erf(x*I) = 2/sqrt(Pi)*int(exp(t^2),t = 0 .. x) end proc

Все эти функции являются целыми.

постоим их графики

>    plot(u(x),x=-3..3); plot(erf(x),x=-3..3);

[Maple Plot]

[Maple Plot]

>    plot(erfc(x),x=-3..3);

[Maple Plot]

>    plot({erfc(0,x), erfc(1,x), erfc(2,x), erfc(3,x)}, x=-3..2);

[Maple Plot]

>    plot(erfi(x),x=-2..2);

[Maple Plot]

гиперболические уравнения

Формула Даламбера

  Колебания бесконечной струны.

Рассмотрим свободные колебания бесконечной струны. Для этого решается однородное уравнение

  diff(u(t,x),`$`(t,2)) = a^2*diff(u(t,x),`$`(x,2))  

с начальными условиями

u(0,x) = F(x) ,

diff(u(0,x),t) = f(x) .

>    restart;

Однородное уравнение и его решение:

>    PDE:=diff(u(t,x),t,t)=a^2*diff(u(t,x),x,x);
pdsolve(PDE);

PDE := diff(u(t,x),`$`(t,2)) = a^2*diff(u(t,x),`$`(x,2))

u(t,x) = _F1(x+a*t)+_F2(x-a*t)

Переобозначение решений:

>    u(t,x):=U1(x-a*t)+U2(x+a*t);

u(t,x) := U1(x-a*t)+U2(x+a*t)

Учет начальных условий :

>    u_0(x):=subs(t=0,u(t,x))-F(x)=0;
ut_0(x):=subs(t=0,diff(u(t,x),t))-f(x)=0;

u_0(x) := U1(x)+U2(x)-F(x) = 0

ut_0(x) := -D(U1)(x)*a+D(U2)(x)*a-f(x) = 0

>    int(diff(-a*U1(xi),xi)+diff(a*U2(xi),xi)-f(xi),xi=0..x);

int(-a*diff(U1(xi),xi)+a*diff(U2(xi),xi)-f(xi),xi = 0 .. x)

>    -a*(U1(x)-U2(x))+a*(U1(0)-U2(0))=int(f(xi),xi=0..x);

-a*(U1(x)-U2(x))+a*(U1(0)-U2(0)) = int(f(xi),xi = 0 .. x)

>    -a*(U1(x)-U2(x))=int(f(xi),xi=0..x)+a*C;

-a*(U1(x)-U2(x)) = int(f(xi),xi = 0 .. x)+a*C

Выражение начальных функций:

>    solve({U1(x)+U2(x)-F(x)=0,-a*(U1(x)-U2(x)) = int(f(xi),xi = 0 .. x)+a*C}, {U1(x),U2(x)});

{U1(x) = -1/2*(-a*F(x)+int(f(xi),xi = 0 .. x)+a*C)/a, U2(x) = 1/2*(a*F(x)+int(f(xi),xi = 0 .. x)+a*C)/a}

>    U1(x):=1/2*(a*F(x)-int(f(xi),xi = 0 .. x)-a*C)/a;
U2(x):=1/2*(a*F(x)+int(f(xi),xi = 0 .. x)+a*C)/a;

U1(x) := 1/2*(a*F(x)-int(f(xi),xi = 0 .. x)-a*C)/a

U2(x) := 1/2*(a*F(x)+int(f(xi),xi = 0 .. x)+a*C)/a

Представление общего решения:

>    u(t,x):=simplify(subs(x=x-a*t,U1(x))+(subs(x=x+a*t,U2(x))));

u(t,x) := 1/2*(a*F(x-a*t)-int(f(xi),xi = 0 .. x-a*t)+a*F(x+a*t)+int(f(xi),xi = 0 .. x+a*t))/a

>    u(t,x):=collect(1/2*(a*F(x-a*t)-int(f(xi),xi = 0 .. x-a*t)+a*F(x+a*t)+int(f(xi),xi = 0 .. x+a*t))/a, a);

u(t,x) := 1/2*F(x-a*t)+1/2*F(x+a*t)+(-1/2*int(f(xi),xi = 0 .. x-a*t)+1/2*int(f(xi),xi = 0 .. x+a*t))/a

Формула Даламбера:

>    u(t,x):=1/2*F(x-a*t)+1/2*F(x+a*t)+1/2*int(f(xi),xi = x-a*t .. x+a*t)/a;

u(t,x) := 1/2*F(x-a*t)+1/2*F(x+a*t)+1/2*1/a*int(f(xi),xi = x-a*t .. x+a*t)

Убедимся, что полученная функция u(t,x)  удовлетворяет уравнению и начальным условиям.

Для этого подставим u(t,x)  в уравнение и начальные условия:

>    simplify(diff(u(t,x),`$`(t,2)) - a^2*diff(u(t,x),`$`(x,2)));
eval(subs(t=0,u(t,x)));
subs(t=0,diff(u(t,x),t));

0

F(x)

f(x)

  ПРИМЕР 1

>    restart;

Решить однородное уравнение

  diff(u(t,x),`$`(t,2)) = a^2*diff(u(t,x),`$`(x,2))  

с начальными условиями

u(0,x) = F(x) ,

diff(u(0,x),t) = f(x) .

где функции F(x)  и f(x)  заданы в виде:  

>    a:=1;L:=1;alpha:=1;
F(x):=x->piecewise(x<-L,0, x<0,alpha*(1+x/L),x<L,alpha*(1-x/L), x>L,0);
f(x):=0;

a := 1

L := 1

alpha := 1

F(x) := proc (x) options operator, arrow; piecewise(x < -L,0,x < 0,alpha*(1+x/L),x < L,alpha*(1-x/L),L < x,0) end proc

f(x) := 0

>    plot(F(x),-16..16,-0.1..1.1, numpoints=400,color=blue,thickness=3);

[Maple Plot]

Для решения воспользуемся формулой Даламбера:

>    restart;

>    F(x):=x->piecewise(x<-L,0, x<0,alpha*(1+x/L),x<L,alpha*(1-x/L), x>L,0);
f(xi):=0;

F(x) := proc (x) options operator, arrow; piecewise(x < -L,0,x < 0,alpha*(1+x/L),x < L,alpha*(1-x/L),L < x,0) end proc

f(xi) := 0

>    u(t,x):=subs(x=x-a*t,1/2*piecewise(x<-L,0, x<0,alpha*(1+x/L),x<L,alpha*(1-x/L), x>L,0))+(subs(x=x+a*t,1/2*piecewise(x<-L,0, x<0,alpha*(1+x/L),x<L,alpha*(1-x/L), x>L,0)));

u(t,x) := 1/2*PIECEWISE([0, x-a*t < -L],[alpha*(1+(x-a*t)/L), x-a*t < 0],[alpha*(1-(x-a*t)/L), x-a*t < L],[0, L < x-a*t])+1/2*PIECEWISE([0, x+a*t < -L],[alpha*(1+(x+a*t)/L), x+a*t < 0],[alpha*(1-(x+a*t...

Представим полученные решения в виде двумерных анимированных графиков:

>    with(plots):
a:=1;L:=1;alpha:=1;

u1(t,x):=1/2*PIECEWISE([0, x-a*t < -L],[alpha*(1+(x-a*t)/L), x-a*t < 0],[alpha*(1-(x-a*t)/L), x-a*t < L],[0, L < x-a*t]);
u2(t,x):=1/2*PIECEWISE([0, x+a*t < -L],[alpha*(1+(x+a*t)/L), x+a*t < 0],[alpha*(1-(x+a*t)/L), x+a*t < L],[0, L < x+a*t]);
u(t,x):=1/2*PIECEWISE([0, x-a*t < -L],[alpha*(1+(x-a*t)/L), x-a*t < 0],[alpha*(1-(x-a*t)/L), x-a*t < L],[0, L < x-a*t])+1/2*PIECEWISE([0, x+a*t < -L],[alpha*(1+(x+a*t)/L), x+a*t < 0],[alpha*(1-(x+a*t)/L), x+a*t < L],[0, L < x+a*t]);

animate(plot,[u1(t,x),x=-5..5, y=-0.1..1], t=0..4, frames=30,thickness=3, title="u1(t,x)");
animate(plot,[u2(t,x),x=-5..5, y=-0.1..1], t=0..4, frames=30,thickness=3, title="u2(t,x)");
animate(plot,[u(t,x),x=-5..5, y=-0.1..1], t=0..4, frames=30,thickness=3, title="u(t,x)");
animate(plot,[{u1(t,x),u2(t,x),u(t,x)},x=-5..5, y=-0.1..1], t=0..4, frames=30,thickness=3, title="u1(t,x), u2(t,x), u(t,x)");


Warning, the name changecoords has been redefined

a := 1

L := 1

alpha := 1

u1(t,x) := 1/2*PIECEWISE([0, x-t < -1],[1+x-t, x-t < 0],[1-x+t, x-t < 1],[0, 1 < x-t])

u2(t,x) := 1/2*PIECEWISE([0, x+t < -1],[1+x+t, x+t < 0],[1-x-t, x+t < 1],[0, 1 < x+t])

u(t,x) := 1/2*PIECEWISE([0, x-t < -1],[1+x-t, x-t < 0],[1-x+t, x-t < 1],[0, 1 < x-t])+1/2*PIECEWISE([0, x+t < -1],[1+x+t, x+t < 0],[1-x-t, x+t < 1],[0, 1 < x+t])

[Maple Plot]

[Maple Plot]

[Maple Plot]

[Maple Plot]

Представим полученное решение в виде двумерных графиков для нескольких моментов времени:

>    tau:=3:

u_1(x):=subs(t=tau*0,u(t,x)):
u_2(x):=subs(t=tau*(1/8),u(t,x)):
u_3(x):=subs(t=tau*(2/8),u(t,x)):
u_4(x):=subs(t=tau*(3/8),u(t,x)):
u_5(x):=subs(t=tau*(4/8),u(t,x)):
u_6(x):=subs(t=tau*(5/8),u(t,x)):
u_7(x):=subs(t=tau*(6/8),u(t,x)):
u_8(x):=subs(t=tau*(7/8),u(t,x)):

plot(u_1(x),x=-4..4,y=-0.1..1,title="t = 0", color=[red,green], thickness=[4,2]);
plot(u_2(x),x=-4..4,y=-0.1..1,title="t = 1/8*tau",color=[red,green],thickness=[4,2]);
plot(u_3(x),x=-4..4,y=-0.1..1,title="t = 2/8*tau",color=[red,green],thickness=[4,2]);
plot(u_4(x),x=-4..4,y=-0.1..1,title="t = 3/8*tau",color=[red,green],thickness=[4,2]);
plot(u_5(x),x=-4..4,y=-0.1..1,title="t = 4/8*tau",color=[red,green],thickness=[4,2]);
plot(u_6(x),x=-4..4,y=-0.1..1,title="t = 5/8*tau",color=[red,green],thickness=[4,2]);
plot(u_7(x),x=-4..4,y=-0.1..1,title="t = 6/8*tau",color=[red,green],thickness=[4,2]);
plot(u_8(x),x=-4..4,y=-0.1..1,title="t = 7/8*tau",color=[red,green],thickness=[4,2]);

[Maple Plot]

[Maple Plot]

[Maple Plot]

[Maple Plot]

[Maple Plot]

[Maple Plot]

[Maple Plot]

[Maple Plot]

>   

 ПРИМЕР 2

>    restart;

Решить однородное уравнение

  diff(u(t,x),`$`(t,2)) = a^2*diff(u(t,x),`$`(x,2))  

с начальными условиями

u(0,x) = F(x) ,

diff(u(0,x),t) = f(x) .

где функции F(x)  и f(x)  заданы в виде:  

>    L:=1;alpha:=1;l1:=-L;l2:=+L;
F(x):=x->piecewise(x<l1,0, x<l2,alpha, x>L,0);
plot(F(x),-16..16,-0.1..1.1, numpoints=400,color=blue,thickness=3);

L := 1

alpha := 1

l1 := -1

l2 := 1

F(x) := proc (x) options operator, arrow; piecewise(x < l1,0,x < l2,alpha,L < x,0) end proc

[Maple Plot]

>   

>    restart;

>    F(x):=x->piecewise(x<l1,0, x<l2,alpha, x>L,0);
f(xi):=0;

F(x) := proc (x) options operator, arrow; piecewise(x < l1,0,x < l2,alpha,L < x,0) end proc

f(xi) := 0

Для решения воспользуемся формулой Даламбера:

>    u(t,x):=subs(x=x-a*t,piecewise(x<l1,0, x<l2,alpha, x>L,0))+(subs(x=x+a*t,piecewise(x<l1,0, x<l2,alpha, x>L,0)));

u(t,x) := PIECEWISE([0, x-a*t < l1],[alpha, x-a*t < l2],[0, L < x-a*t])+PIECEWISE([0, x+a*t < l1],[alpha, x+a*t < l2],[0, L < x+a*t])

Представим полученные решения в виде двумерных анимированных графиков:

>    with(plots):
a:=1;L:=0.8;alpha:=1;l1:=-L;l2:=+L;

u1(t,x):=PIECEWISE([0, x-a*t < l1],[alpha, x-a*t < l2],[0, L < x-a*t]);
u2(t,x):=PIECEWISE([0, x+a*t < l1],[alpha, x+a*t < l2],[0, L < x+a*t]);
u(t,x):=PIECEWISE([0, x-a*t < l1],[alpha, x-a*t < l2],[0, L < x-a*t])+PIECEWISE([0, x+a*t < l1],[alpha, x+a*t < l2],[0, L < x+a*t]);

animate(plot,[u1(t,x),x=-5..5, y=-0.1..2.2], t=0..3, frames=30,thickness=3, title="u1(t,x)");
animate(plot,[u2(t,x),x=-5..5, y=-0.1..2.2], t=0..3, frames=30,thickness=3, title="u2(t,x)");
animate(plot,[u(t,x),x=-5..5, y=-0.1..2.2], t=0..3, frames=30,thickness=3, title="u(t,x)");
animate(plot,[{u1(t,x),u2(t,x),u(t,x)},x=-5..5, y=-0.1..2.2], t=0..4, frames=30,thickness=3, title="u1(t,x), u2(t,x), u(t,x)");

Warning, the name changecoords has been redefined

a := 1

L := .8

alpha := 1

l1 := -.8

l2 := .8

u1(t,x) := PIECEWISE([0, x-t < -.8],[1, x-t < .8],[0, .8 < x-t])

u2(t,x) := PIECEWISE([0, x+t < -.8],[1, x+t < .8],[0, .8 < x+t])

u(t,x) := PIECEWISE([0, x-t < -.8],[1, x-t < .8],[0, .8 < x-t])+PIECEWISE([0, x+t < -.8],[1, x+t < .8],[0, .8 < x+t])

[Maple Plot]

[Maple Plot]

[Maple Plot]

[Maple Plot]

>   

 ПРИМЕР 3

>    restart;

Решить однородное уравнение

  diff(u(t,x),`$`(t,2)) = a^2*diff(u(t,x),`$`(x,2))  

с начальными условиями

u(0,x) = F(x) ,

diff(u(0,x),t) = f(x) .

где функции F(x)  и f(x)  заданы в виде:  

>    L:=2;v0:=1;
f(x):=x->piecewise(x<-L,0, x<L,v0, x>L,0);
F(x):=0;
plot(f(x),-16..16,-0.1..1.1, numpoints=400,color=blue,thickness=3);

L := 2

v0 := 1

f(x) := proc (x) options operator, arrow; piecewise(x < -L,0,x < L,v0,L < x,0) end proc

F(x) := 0

[Maple Plot]

>    restart;

>    f(xi):=piecewise(xi<-L,0, xi<L,v0, xi>L,0);
F(x):=0;

f(xi) := PIECEWISE([0, xi < -L],[v0, xi < L],[0, L < xi])

F(x) := 0

Для решения воспользуемся формулой Даламбера:

>    u(t,x):=eval(1/2*1/a*int(f(xi),xi = x-a*t .. x+a*t));

u(t,x) := 1/2*1/a*int(PIECEWISE([0, xi < -L],[v0, xi < L],[0, L < xi]),xi = x-a*t .. x+a*t)

>    u(t,x):=(1/2*a)*(PIECEWISE([int(v0,xi = 0 .. -L), x < -L],[int(v0,xi = 0 .. x), x < L],[int(v0,xi = 0 .. L), L < x]));

u(t,x) := 1/2*a*PIECEWISE([-v0*L, x < -L],[v0*x, x < L],[v0*L, L < x])

>    u(t,x):=-1/2*a*PIECEWISE([-v0*L,x-a*t<-L],[v0*x-a*t,x-a*t<L],[v0*L,L<x-a*t])+1/2*a*PIECEWISE([-v0*L,x+a*t<-L],[v0*x+a*t,x+a*t<L],[v0*L,L< x+a*t]);

u(t,x) := -1/2*a*PIECEWISE([-v0*L, x-a*t < -L],[v0*x-a*t, x-a*t < L],[v0*L, L < x-a*t])+1/2*a*PIECEWISE([-v0*L, x+a*t < -L],[v0*x+a*t, x+a*t < L],[v0*L, L < x+a*t])

Представим полученные решения в виде двумерных анимированных графиков:

>    with(plots):
a:=1;L:=2;v0:=1;l1:=-L;l2:=+L;

u1(t,x):=-1/2*a*PIECEWISE([-v0*L, x-a*t < -L],[v0*x-a*t, x-a*t < L],[v0*L, L < x-a*t]);
u2(t,x):=1/2*a*PIECEWISE([-v0*L, x+a*t < -L],[v0*x+a*t, x+a*t < L],[v0*L, L < x+a*t]);
u(t,x):=-1/2*a*PIECEWISE([-v0*L, x-a*t < -L],[v0*x-a*t, x-a*t < L],[v0*L, L < x-a*t])+1/2*a*PIECEWISE([-v0*L, x+a*t < -L],[v0*x+a*t, x+a*t < L],[v0*L, L < x+a*t]);
animate(plot,[u1(t,x),x=-5..5, y=-7..7], t=0..4, frames=30,thickness=3, title="u1(t,x)");
animate(plot,[u2(t,x),x=-5..5, y=-7..7], t=0..4, frames=30,thickness=3, title="u2(t,x)");
animate(plot,[u(t,x),x=-5..5, y=-7..7], t=0..4, frames=30,thickness=3, title="u(t,x)");
animate(plot,[{u1(t,x),u2(t,x),u(t,x)},x=-5..5, y=-2.2..2.2], t=0..4, frames=30,thickness=3, title="u1(t,x), u2(t,x), u(t,x)");

Warning, the name changecoords has been redefined

a := 1

L := 2

v0 := 1

l1 := -2

l2 := 2

u1(t,x) := -1/2*PIECEWISE([-2, x-t < -2],[x-t, x-t < 2],[2, 2 < x-t])

u2(t,x) := 1/2*PIECEWISE([-2, x+t < -2],[x+t, x+t < 2],[2, 2 < x+t])

u(t,x) := -1/2*PIECEWISE([-2, x-t < -2],[x-t, x-t < 2],[2, 2 < x-t])+1/2*PIECEWISE([-2, x+t < -2],[x+t, x+t < 2],[2, 2 < x+t])

[Maple Plot]

[Maple Plot]

[Maple Plot]

[Maple Plot]

>   

 Колебания полубесконечной струны.

Рассмотрим свободные колебания полубесконечной струны. Для этого решается однородное уравнение

  diff(u(t,x),`$`(t,2)) = a^2*diff(u(t,x),`$`(x,2))  

с начальными условиями

u(0,x) = F(x) ,

diff(u(0,x),t) = f(x) .

и граничным условием:

u(t,0) = 0

или граничным условием:

diff(u(t,0),x) = 0 .

>    restart;

Однородное уравнение и его решение:

>    PDE:=diff(u(t,x),t,t)=a^2*diff(u(t,x),x,x);
pdsolve(PDE);

PDE := diff(u(t,x),`$`(t,2)) = a^2*diff(u(t,x),`$`(x,2))

u(t,x) = _F1(-x-a*t)+_F2(x-a*t)

Переобозначение решений:

>    u(t,x):=U1(x-a*t)+U2(x+a*t);

u(t,x) := U1(x-a*t)+U2(x+a*t)

Учет начальных условий :

>    u_0(x):=subs(t=0,u(t,x))-F(x)=0;
ut_0(x):=subs(t=0,diff(u(t,x),t))-f(x)=0;

u_0(x) := U1(x)+U2(x)-F(x) = 0

ut_0(x) := -D(U1)(x)*a+D(U2)(x)*a-f(x) = 0

>    int(diff(-a*U1(xi),xi)+diff(a*U2(xi),xi)-f(xi),xi=0..x);

int(-a*diff(U1(xi),xi)+a*diff(U2(xi),xi)-f(xi),xi = 0 .. x)

>    -a*(U1(x)-U2(x))+a*(U1(0)-U2(0))=int(f(xi),xi=0..x);

-a*(U1(x)-U2(x))+a*(U1(0)-U2(0)) = int(f(xi),xi = 0 .. x)

>    -a*(U1(x)-U2(x))=int(f(xi),xi=0..x)+a*C;

-a*(U1(x)-U2(x)) = int(f(xi),xi = 0 .. x)+a*C

Выражение начальных функций:

>    solve({U1(x)+U2(x)-F(x)=0,-a*(U1(x)-U2(x)) = int(f(xi),xi = 0 .. x)+a*C}, {U1(x),U2(x)});

{U1(x) = 1/2*(a*F(x)-int(f(xi),xi = 0 .. x)-a*C)/a, U2(x) = 1/2*(a*F(x)+int(f(xi),xi = 0 .. x)+a*C)/a}

>    U1(x):=1/2*(a*F(x)-int(f(xi),xi = 0 .. x)-a*C)/a;
U2(x):=1/2*(a*F(x)+int(f(xi),xi = 0 .. x)+a*C)/a;

U1(x) := 1/2*(a*F(x)-int(f(xi),xi = 0 .. x)-a*C)/a

U2(x) := 1/2*(a*F(x)+int(f(xi),xi = 0 .. x)+a*C)/a

Представление общего решения:

>    u(t,x):=simplify(subs(x=x-a*t,U1(x))+(subs(x=x+a*t,U2(x))));

u(t,x) := 1/2*(a*F(x-a*t)-int(f(xi),xi = 0 .. x-a*t)+a*F(x+a*t)+int(f(xi),xi = 0 .. x+a*t))/a

>    u(t,x):=collect(1/2*(a*F(x-a*t)-int(f(xi),xi = 0 .. x-a*t)+a*F(x+a*t)+int(f(xi),xi = 0 .. x+a*t))/a, a);

u(t,x) := 1/2*F(x-a*t)+1/2*F(x+a*t)+(-1/2*int(f(xi),xi = 0 .. x-a*t)+1/2*int(f(xi),xi = 0 .. x+a*t))/a

>    u(t,x):=1/2*F(x-a*t)+1/2*F(x+a*t)+1/2*int(f(xi),xi = x-a*t .. x+a*t)/a;

u(t,x) := 1/2*F(x-a*t)+1/2*F(x+a*t)+1/2*1/a*int(f(xi),xi = x-a*t .. x+a*t)

Убедимся, что полученная функция u(t,x)  удовлетворяет уравнению и начальным условиям.

Для этого подставим u(t,x)  в уравнение и начальные условия:

>    simplify(diff(u(t,x),`$`(t,2)) - a^2*diff(u(t,x),`$`(x,2)));
eval(subs(t=0,u(t,x)));
subs(t=0,diff(u(t,x),t));

0

F(x)

f(x)

В случае, когда конец струны ( x = 0 ) неподвижно закреплен, необходимо учесть граничное условие:

u(t,0) = 0

или граничное условие

diff(u(t,0),x) = 0 .

Отсюда следует:

1. Для решения задачи на полуограниченной прямой с граничным условием

u(t,0) = 0 ,

начальные данные надо продолжить на всю прямую нечетно:

Формула Даламбера 1:

>    u(t,x):=piecewise(t<x/a,1/2*F(x+a*t)+1/2*F(x-a*t)+1/2*1/a*int(f(xi),xi = x-a*t .. x+a*t), t>x/a,1/2*F(x+a*t)-1/2*F(-x+a*t)+1/2*1/a*int(f(xi),xi=-x+a*t..x+a*t));

u(t,x) := PIECEWISE([1/2*F(x-a*t)+1/2*F(x+a*t)+1/2*1/a*int(f(xi),xi = x-a*t .. x+a*t), t < x/a],[1/2*F(x+a*t)-1/2*F(-x+a*t)+1/2*1/a*int(f(xi),xi = -x+a*t .. x+a*t), x/a < t])

2. Для решения задачи на полуограниченной пря-мой с граничным условием

diff(u(t,0),x) = 0

начальные данные надо продолжить на всю прямую четно:

Формула Даламбера 2:

>    u(t,x):=piecewise(t<x/a,1/2*F(x-a*t)+1/2*F(x+a*t)+1/2*1/a*int(f(xi),xi = x-a*t .. x+a*t), t>x/a,1/2*F(x-a*t)+1/2*F(x+a*t)+1/2*1/a*int(f(xi),xi = 0 .. x+a*t)+1/2*F(x+a*t)+1/2*1/a*int(f(xi),xi = 0 .. x-a*t));

u(t,x) := PIECEWISE([1/2*F(x-a*t)+1/2*F(x+a*t)+1/2*1/a*int(f(xi),xi = x-a*t .. x+a*t), t < x/a],[1/2*F(x-a*t)+F(x+a*t)+1/2*1/a*int(f(xi),xi = 0 .. x+a*t)+1/2*1/a*int(f(xi),xi = 0 .. x-a*t), x/a < t])

  ПРИМЕР 1

>    restart;

Решить однородное уравнение

  diff(u(t,x),`$`(t,2)) = a^2*diff(u(t,x),`$`(x,2))  

с начальными условиями

u(0,x) = F(x) ,

diff(u(0,x),t) = f(x) .

где функции F(x)  и f(x)  заданы в виде:  

>    a:=1;L:=1;alpha:=0.5;l:=-4*L;
F(x):=x->piecewise(x<-L-l,0, x<-l,alpha*(1+(x+l)/L),x<L-l,alpha*(1-(x+l)/L), x>L-l,0);
f(x):=0;

a := 1

L := 1

alpha := .5

l := -4

F(x) := proc (x) options operator, arrow; piecewise(x < -L-l,0,x < -l,alpha*(1+(x+l)/L),x < L-l,alpha*(1-(x+l)/L),L-l < x,0) end proc

f(x) := 0

>    plot(F(x),0..5.25,-0.55..0.55, numpoints=400,color=blue,thickness=3);

[Maple Plot]

Для решения воспользуемся формулой Даламбера:

>    restart;

>    F(x):=x->piecewise(x<-L-l,0, x<-l,alpha*(1+(x+l)/L),x<L-l,alpha*(1-(x+l)/L), x>L-l,0);
f(xi):=0;

F(x) := proc (x) options operator, arrow; piecewise(x < -L-l,0,x < -l,alpha*(1+(x+l)/L),x < L-l,alpha*(1-(x+l)/L),L-l < x,0) end proc

f(xi) := 0

>    u(t,x):=subs(x=x-a*t,1/2*piecewise(x<-L-l,0, x<-l,alpha*(1+(x+l)/L),x<L-l,alpha*(1-(x+l)/L), x>L-l,0))-(subs(x=x+a*t,1/2*piecewise(x<-L+l,0, x<+l,alpha*(1+(x-l)/L),x<L+l,alpha*(1-(x-l)/L), x>L+l,0)));

u(t,x) := 1/2*PIECEWISE([0, x-a*t < -L-l],[alpha*(1+(x-a*t+l)/L), x-a*t < -l],[alpha*(1-(x-a*t+l)/L), x-a*t < L-l],[0, L-l < x-a*t])-1/2*PIECEWISE([0, x+a*t < -L+l],[alpha*(1+(x+a*t-l)/L), x+a*t < l],[...

Представим полученные решения в виде двумерных анимированных графиков:

>    with(plots):
a:=-1;L:=1;alpha:=1;l:=-4*L;
u1(t,x):=1/2*PIECEWISE([0, x-a*t < -L-l],[alpha*(1+(x-a*t+l)/L), x-a*t < -l],[alpha*(1-(x-a*t+l)/L), x-a*t < L-l],[0, L-l < x-a*t]);
u2(t,x):=-1/2*PIECEWISE([0, x+a*t < -L+l],[alpha*(1+(x+a*t-l)/L), x+a*t < l],[alpha*(1-(x+a*t-l)/L), x+a*t < L+l],[0, L+l < x+a*t]);
u(t,x) := 1/2*PIECEWISE([0, x-a*t < -L-l],[alpha*(1+(x-a*t+l)/L), x-a*t < -l],[alpha*(1-(x-a*t+l)/L), x-a*t < L-l],[0, L-l < x-a*t])-1/2*PIECEWISE([0, x+a*t < -L+l],[alpha*(1+(x+a*t-l)/L), x+a*t < l],[alpha*(1-(x+a*t-l)/L), x+a*t < L+l],[0, L+l < x+a*t]);

animate(plot,[u1(t,x),x=0..5.25, y=-0.55..0.55], t=0..8, frames=30,thickness=3, title="u1(t,x)");
animate(plot,[u2(t,x),x=0..5.25, y=-0.55..0.55], t=0..8, frames=30,thickness=3, title="u2(t,x)");
animate(plot,[u(t,x),x=0..5.25, y=-0.55..0.55], t=0..8, frames=30,thickness=3, title="u(t,x)");
animate(plot,[{u1(t,x),u2(t,x),u(t,x)},x=0..5.25, y=-0.55..0.55], t=0..8, frames=30,thickness=3, title="u1(t,x), u2(t,x), u(t,x)");
animate(plot,[{u1(t,x),u2(t,x),u(t,x)},x=-5.25..5.25, y=-0.55..0.55], t=0..8, frames=30,thickness=3, title="u1(t,x), u2(t,x), u(t,x)");


Warning, the name changecoords has been redefined

a := -1

L := 1

alpha := 1

l := -4

u1(t,x) := 1/2*PIECEWISE([0, x+t < 3],[-3+x+t, x+t < 4],[5-x-t, x+t < 5],[0, 5 < x+t])

u2(t,x) := -1/2*PIECEWISE([0, x-t < -5],[5+x-t, x-t < -4],[-3-x+t, x-t < -3],[0, -3 < x-t])

u(t,x) := 1/2*PIECEWISE([0, x+t < 3],[-3+x+t, x+t < 4],[5-x-t, x+t < 5],[0, 5 < x+t])-1/2*PIECEWISE([0, x-t < -5],[5+x-t, x-t < -4],[-3-x+t, x-t < -3],[0, -3 < x-t])

[Maple Plot]

[Maple Plot]

[Maple Plot]

[Maple Plot]

[Maple Plot]

Представим полученное решение в виде двумерных графиков для нескольких моментов времени:

>    tau:=8:

u_1(x):=subs(t=tau*0,u(t,x)):
u_2(x):=subs(t=tau*(1/8),u(t,x)):
u_3(x):=subs(t=tau*(2/8),u(t,x)):
u_4(x):=subs(t=tau*(3/8),u(t,x)):
u_5(x):=subs(t=tau*(4/8),u(t,x)):
u_6(x):=subs(t=tau*(5/8),u(t,x)):
u_7(x):=subs(t=tau*(6/8),u(t,x)):
u_8(x):=subs(t=tau*(7/8),u(t,x)):

plot(u_1(x),x=0..5.25, y=-0.55..0.55,title="t = 0", color=[red,green], thickness=[4,2]);
plot(u_2(x),x=0..5.25, y=-0.55..0.55,title="t = 1/8*tau",color=[red,green],thickness=[4,2]);
plot(u_3(x),x=0..5.25, y=-0.55..0.55,title="t = 2/8*tau",color=[red,green],thickness=[4,2]);
plot(u_4(x),x=0..5.25, y=-0.55..0.55,title="t = 3/8*tau",color=[red,green],thickness=[4,2]);
plot(u_5(x),x=0..5.25, y=-0.55..0.55,title="t = 4/8*tau",color=[red,green],thickness=[4,2]);
plot(u_6(x),x=0..5.25, y=-0.55..0.55,title="t = 5/8*tau",color=[red,green],thickness=[4,2]);
plot(u_7(x),x=0..5.25, y=-0.55..0.55,title="t = 6/8*tau",color=[red,green],thickness=[4,2]);
plot(u_8(x),x=0..5.25, y=-0.55..0.55,title="t = 7/8*tau",color=[red,green],thickness=[4,2]);

[Maple Plot]

[Maple Plot]

[Maple Plot]

[Maple Plot]

[Maple Plot]

[Maple Plot]

[Maple Plot]

[Maple Plot]

>   

 ПРИМЕР 2

>    restart;

Решить однородное уравнение

  diff(u(t,x),`$`(t,2)) = a^2*diff(u(t,x),`$`(x,2))  

с начальными условиями

u(0,x) = F(x) ,

diff(u(0,x),t) = f(x) .

где функции F(x)  и f(x)  заданы в виде:  

>    L:=1;alpha:=0.5;l:=2*L;
F(x):=x->piecewise((x+l+L/2)<0,0, (x+l+L/2)<L,4*alpha*(x+l+L/2)*(L-(x+l+L/2))/L^2, (x+l-L/2)>L,0);
f(x):=0;

L := 1

alpha := .5

l := 2

F(x) := proc (x) options operator, arrow; piecewise(x+l+1/2*L < 0,0,x+l+1/2*L < L,4*alpha*(x+l+1/2*L)*(1/2*L-x-l)/L^2,L < x+l-1/2*L,0) end proc

f(x) := 0

>    plot(F(x),-5.25..5.25,-0.55..0.55, numpoints=400,color=blue,thickness=3);

[Maple Plot]

Для решения воспользуемся формулой Даламбера:

>    restart;

>    F(x):=x->piecewise((x+l+L/2)<0,0, (x+l+L/2)<L,4*alpha*(x+l+L/2)*(L-(x+l+L/2))/L^2, (x+l-L/2)>L,0);

F(x):=x->piecewise((x+l+L/2)<0,0, (x+l+L/2)<L,4*alpha*(x+l+L/2)*(L-(x+l+L/2))/L^2, (x+l+L/2)>L,0);
f(xi):=0;

F(x) := proc (x) options operator, arrow; piecewise(x+l+1/2*L < 0,0,x+l+1/2*L < L,4*alpha*(x+l+1/2*L)*(1/2*L-x-l)/L^2,L < x+l-1/2*L,0) end proc

F(x) := proc (x) options operator, arrow; piecewise(x+l+1/2*L < 0,0,x+l+1/2*L < L,4*alpha*(x+l+1/2*L)*(1/2*L-x-l)/L^2,L < x+l+1/2*L,0) end proc

f(xi) := 0

>    u(t,x) := 1/2*F(x-a*t)+1/2*F(x+a*t)+1/2*1/a*int(f(xi),xi = x-a*t .. x+a*t);

u(t,x) := 1/2*F(x-a*t)+1/2*F(x+a*t)

>    u(t,x):=(1/2)*PIECEWISE([0,x-a*t+l+L/2<0],[4*alpha*(x-a*t+l+L/2)*(L-x+a*t-l-L/2)/L^2,x-a*t+l+L/2<L],[0,L<x-a*t+l+L/2])-(1/2)*PIECEWISE([0,x+a*t-l+L/2<0],[4*alpha*(x+a*t-l+L/2)*(L-x-a*t+l-L/2)/L^2,x+a*t-l+L/2<L],[0,L<x+a*t-l+L/2]);

u(t,x) := 1/2*PIECEWISE([0, x-a*t+l+1/2*L < 0],[4*alpha*(x-a*t+l+1/2*L)*(1/2*L-x+a*t-l)/L^2, x-a*t+l+1/2*L < L],[0, L < x-a*t+l+1/2*L])-1/2*PIECEWISE([0, x+a*t-l+1/2*L < 0],[4*alpha*(x+a*t-l+1/2*L)*(1/...
u(t,x) := 1/2*PIECEWISE([0, x-a*t+l+1/2*L < 0],[4*alpha*(x-a*t+l+1/2*L)*(1/2*L-x+a*t-l)/L^2, x-a*t+l+1/2*L < L],[0, L < x-a*t+l+1/2*L])-1/2*PIECEWISE([0, x+a*t-l+1/2*L < 0],[4*alpha*(x+a*t-l+1/2*L)*(1/...

Представим полученные решения в виде двумерных анимированных графиков:

>    with(plots):
a:=1;L:=1;alpha:=2;l:=2*L;

u1(t,x):=1/2*PIECEWISE([0, x-a*t+l+1/2*L < 0],[4*alpha*(x-a*t+l+1/2*L)*(1/2*L-x+a*t-l)/L^2, x-a*t+l+1/2*L < L],[0, L < x-a*t+l+1/2*L]);
u2(t,x):=-1/2*PIECEWISE([0, x+a*t-l+1/2*L < 0],[4*alpha*(x+a*t-l+1/2*L)*(1/2*L-x-a*t+l)/L^2, x+a*t-l+1/2*L < L],[0, L < x+a*t-l+1/2*L]);
u(t,x):=1/2*PIECEWISE([0, x-a*t+l+1/2*L < 0],[4*alpha*(x-a*t+l+1/2*L)*(1/2*L-x+a*t-l)/L^2, x-a*t+l+1/2*L < L],[0, L < x-a*t+l+1/2*L])-1/2*PIECEWISE([0, x+a*t-l+1/2*L < 0],[4*alpha*(x+a*t-l+1/2*L)*(1/2*L-x-a*t+l)/L^2, x+a*t-l+1/2*L < L],[0, L < x+a*t-l+1/2*L]);

animate(plot,[u1(t,x),x=-2.75..0, y=-1.25..1.25], t=0..4, frames=30,thickness=3, title="u1(t,x)");
animate(plot,[u2(t,x),x=-2.75..0, y=-1.25..1.25], t=0..4, frames=30,thickness=3, title="u2(t,x)");
animate(plot,[u(t,x),x=-2.75..0, y=-1.25..1.25], t=0..4, frames=30,thickness=3, title="u(t,x)");
animate(plot,[{u1(t,x),u2(t,x),u(t,x)},x=-2.75..2.75, y=-1.25..1.25], t=0..4, frames=30,thickness=3, title="u1(t,x), u2(t,x), u(t,x)");

Warning, the name changecoords has been redefined

a := 1

L := 1

alpha := 2

l := 2

u1(t,x) := 1/2*PIECEWISE([0, x-t < -5/2],[8*(x-t+5/2)*(-3/2-x+t), x-t < -3/2],[0, 0 < x-t+3/2])

u2(t,x) := -1/2*PIECEWISE([0, x+t < 3/2],[8*(x+t-3/2)*(5/2-x-t), x+t < 5/2],[0, 0 < x+t-5/2])

u(t,x) := 1/2*PIECEWISE([0, x-t < -5/2],[8*(x-t+5/2)*(-3/2-x+t), x-t < -3/2],[0, 0 < x-t+3/2])-1/2*PIECEWISE([0, x+t < 3/2],[8*(x+t-3/2)*(5/2-x-t), x+t < 5/2],[0, 0 < x+t-5/2])
u(t,x) := 1/2*PIECEWISE([0, x-t < -5/2],[8*(x-t+5/2)*(-3/2-x+t), x-t < -3/2],[0, 0 < x-t+3/2])-1/2*PIECEWISE([0, x+t < 3/2],[8*(x+t-3/2)*(5/2-x-t), x+t < 5/2],[0, 0 < x+t-5/2])

[Maple Plot]

[Maple Plot]

[Maple Plot]

[Maple Plot]

 

  Метод Фурье

 Колебания конечной струны.

Рассмотрим свободные колебания конечной струны. Для этого решается однородное уравнение

  diff(u(t,x),`$`(t,2)) = a^2*diff(u(t,x),`$`(x,2))  

с начальными условиями

u(0,x) = F(x) ,

diff(u(0,x),t) = f(x) .

и граничными условиями (струна закреплена с двух сторон)

u(t,0) = 0 ,

u(t,L) = 0 ,

>    restart;

Однородное уравнение и его решение методом разделения переменных :

>    PDE:=diff(u(t,x),t,t)=a^2*diff(u(t,x),x,x);
struc:=pdsolve(PDE,HINT=T(t)*X(x));

PDE := diff(u(t,x),`$`(t,2)) = a^2*diff(u(t,x),`$`(x,2))

struc := `&where`(u(t,x) = T(t)*X(x),[{diff(X(x),`$`(x,2)) = _c[1]*X(x)/a^2, diff(T(t),`$`(t,2)) = _c[1]*T(t)}])

>    dsolve(diff(T(t),`$`(t,2)) = _c[1]*T(t));
dsolve(diff(X(x),`$`(x,2)) = _c[1]*X(x)/a^2);

T(t) = _C1*exp(_c[1]^(1/2)*t)+_C2*exp(-_c[1]^(1/2)*t)

X(x) = _C1*exp(_c[1]^(1/2)/a*x)+_C2*exp(-_c[1]^(1/2)/a*x)

Сделаем замену постоянной разделения переменных:

_c[1]  = = - lambda^2

>    dsolve(diff(T(t),`$`(t,2)) = -lambda^2*T(t));
dsolve(diff(X(x),`$`(x,2)) = -lambda^2*X(x)/a^2);

T(t) = _C1*sin(lambda*t)+_C2*cos(lambda*t)

X(x) = _C1*sin(lambda/a*x)+_C2*cos(lambda/a*x)

Второе уравнение решим, учитывая первое граничное условие:

X(0) = 0

>    dsolve({diff(X(x),`$`(x,2)) = -lambda^2*X(x)/a^2, X(0)=0}, X(x));

X(x) = _C1*sin(lambda/a*x)

Теперь учтем второе граничное условие:

X(L) = 0

>    _EnvAllSolutions := true:
solve(sin(lambda*L/a)=0,lambda);

Pi*_Z1*a/L

или, в обычном виде,

>    lambda:=Pi*n*a/L;

lambda := Pi*n*a/L

Поэтому для каждого n  получаем:

>    T[n](t):=C1[n]*cos(lambda*t)+C2[n]*sin(lambda*t);
X[n](x):=sin(lambda/a*x);

T[n](t) := C1[n]*cos(Pi*n*a/L*t)+C2[n]*sin(Pi*n*a/L*t)

X[n](x) := sin(Pi*n/L*x)

>    u[n](t,x):=T[n](t)*X[n](x);

u[n](t,x) := (C1[n]*cos(Pi*n*a/L*t)+C2[n]*sin(Pi*n*a/L*t))*sin(Pi*n/L*x)

В результате общее решение имеет вид:

>    u(t,x):=Sum(u[n](t,x), n=1..infinity);

u(t,x) := Sum((C1[n]*cos(Pi*n*a/L*t)+C2[n]*sin(Pi*n*a/L*t))*sin(Pi*n/L*x),n = 1 .. infinity)

Для определения коэффициентов C1[n]  и C2[n]  воспользуемся начальными условиями:

u(0,x) = F(x) ,

diff(u(0,x),t) = f(x) .

>    simplify(subs(t=0,u(t,x))=F(x));
simplify(subs(t=0,diff(u(t,x),t))=f(x));

Sum(C1[n]*sin(Pi*n/L*x),n = 1 .. infinity) = F(x)

Sum(C2[n]*Pi*n*a/L*sin(Pi*n/L*x),n = 1 .. infinity) = f(x)

Эти равенства означают, что C1[n]  и C2[n]  являются коэффициентами разложения функций F(x)  и f(x)  в ряды Фурье.

Поэтому они определяются формулами:

>    C1[n]:=(2/L)*int(F(x)*sin(Pi*n/L*x),x=0..L);
C2[n]:=(2/(L*lambda))*int(f(x)*cos(Pi*n/L*x),x=0..L);

C1[n] := 2/L*int(F(x)*sin(Pi*n/L*x),x = 0 .. L)

C2[n] := 2/Pi/n/a*int(f(x)*cos(Pi*n/L*x),x = 0 .. L)

Наконец, выпишем общее решение а развернутом виде:

>    u(t,x) := Sum((C1[n]*cos(Pi*n*a/L*t)+C2[n]*sin(Pi*n*a/L*t))*sin(Pi*n/L*x),n = 1 .. infinity);

u(t,x) := Sum((2/L*cos(Pi*n*a/L*t)*int(F(x)*sin(Pi*n/L*x),x = 0 .. L)+2/Pi/n/a*sin(Pi*n*a/L*t)*int(f(x)*cos(Pi*n/L*x),x = 0 .. L))*sin(Pi*n/L*x),n = 1 .. infinity)
u(t,x) := Sum((2/L*cos(Pi*n*a/L*t)*int(F(x)*sin(Pi*n/L*x),x = 0 .. L)+2/Pi/n/a*sin(Pi*n*a/L*t)*int(f(x)*cos(Pi*n/L*x),x = 0 .. L))*sin(Pi*n/L*x),n = 1 .. infinity)

  ПРИМЕР 1

>    restart;

Решить однородное уравнение

  diff(u(t,x),`$`(t,2)) = a^2*diff(u(t,x),`$`(x,2))  

с однородными граничными условиями и начальными условиями

u(0,x) = F(x) ,

diff(u(0,x),t) = f(x) .

где функции F(x)  и f(x)  заданы в виде:  

>    a:=1;L:=1;alpha:=1;l:=L/3;
F(x):=x->piecewise(x<0,0, x<l,alpha*x/l,x<L,alpha*(L-x)/(L-l), x>L,0);
f(x):=0;

a := 1

L := 1

alpha := 1

l := 1/3

F(x) := proc (x) options operator, arrow; piecewise(x < 0,0,x < l,alpha*x/l,x < L,alpha*(L-x)/(L-l),L < x,0) end proc

f(x) := 0

>    plot(F(x),-0.15..1.15,-0.1..1.1, numpoints=400,color=blue,thickness=3);

[Maple Plot]

Для решения воспользуемся полученной в пункте 1.2. формулой:

>    restart;

>    F(x):=x->piecewise(x<0,0, x<l,alpha*x/l,x<L,alpha*(L-x)/(L-l), x>L,0);
f(x):=0;

F(x) := proc (x) options operator, arrow; piecewise(x < 0,0,x < l,alpha*x/l,x < L,alpha*(L-x)/(L-l),L < x,0) end proc

f(x) := 0

Коэффициенты разложения:

>    C1[n]:=simplify((2/L)*int(alpha*x/l*sin(Pi*n/L*x),x=0..l)+(2/L)*int(alpha*(L-x)/(L-l)*sin(Pi*n/L*x),x=l..L));
C2[n]:=(2/(L*(Pi*n*a/L)))*int(f(x)*cos(Pi*n/L*x),x=0..L);

C1[n] := -2*alpha*L*(sin(l*Pi*n/L)*L-l*sin(Pi*n))/l/Pi^2/n^2/(l-L)

C2[n] := 0

Решение уравнения:

>    u(t,x) := Sum((C1[n]*cos(Pi*n*a/L*t)+C2[n]*sin(Pi*n*a/L*t))*sin(Pi*n/L*x),n = 1 .. infinity);

u(t,x) := Sum(-2*alpha*L*(sin(l*Pi*n/L)*L-l*sin(Pi*n))/l/Pi^2/n^2/(l-L)*cos(Pi*n*a/L*t)*sin(Pi*n/L*x),n = 1 .. infinity)

>    a:=1;L:=1;alpha:=1;l:=L/4;
u(t,x):=Sum(-2*alpha*L*(-sin(l*Pi*n/L)*L+l*sin(Pi*n))/l/Pi^2/n^2/(L-l)*cos(Pi*n*a/L*t)*sin(Pi*n/L*x), n = 1 .. infinity);

a := 1

L := 1

alpha := 1

l := 1/4

u(t,x) := Sum(-32/3*(-sin(1/4*Pi*n)+1/4*sin(Pi*n))/Pi^2/n^2*cos(Pi*n*t)*sin(Pi*n*x),n = 1 .. infinity)

Представим полученные решения в виде двумерных анимированных графиков:

>    with(plots):
u(t,x):=Sum(-2*alpha*L*(-sin(l*Pi*n/L)*L+l*sin(Pi*n))/l/Pi^2/n^2/(L-l)*cos(Pi*n*a/L*t)*sin(Pi*n/L*x),n=1..1000);
ut(t,x):=diff(u(t,x),t);
animate(plot,[{u(t,x),ut(t,x)/10},x=0..1], t=0..2, frames=30,thickness=3, title="Волны на струне");

Warning, the name changecoords has been redefined

u(t,x) := Sum(-32/3*(-sin(1/4*Pi*n)+1/4*sin(Pi*n))/Pi^2/n^2*cos(Pi*n*t)*sin(Pi*n*x),n = 1 .. 1000)

ut(t,x) := Sum(32/3*(-sin(1/4*Pi*n)+1/4*sin(Pi*n))/Pi/n*sin(Pi*n*t)*sin(Pi*n*x),n = 1 .. 1000)

[Maple Plot]

Представим полученное решение в виде двумерных графиков для нескольких моментов времени:

>    tau:=2*Pi/(Pi*a/L):

u_1(x):=subs(t=tau*0,u(t,x)):     ut_1(x):=subs(t=tau*0,ut(t,x)):
u_2(x):=subs(t=tau*(1/8),u(t,x)): ut_2(x):=subs(t=tau*(1/8),ut(t,x)):
u_3(x):=subs(t=tau*(2/8),u(t,x)): ut_3(x):=subs(t=tau*(2/8),ut(t,x)):
u_4(x):=subs(t=tau*(3/8),u(t,x)): ut_4(x):=subs(t=tau*(3/8),ut(t,x)):
u_5(x):=subs(t=tau*(4/8),u(t,x)): ut_5(x):=subs(t=tau*(4/8),ut(t,x)):
u_6(x):=subs(t=tau*(5/8),u(t,x)): ut_6(x):=subs(t=tau*(5/8),ut(t,x)):
u_7(x):=subs(t=tau*(6/8),u(t,x)): ut_7(x):=subs(t=tau*(6/8),ut(t,x)):
u_8(x):=subs(t=tau*(7/8),u(t,x)): ut_8(x):=subs(t=tau*(7/8),ut(t,x)):

plot({u_1(x),ut_1(x)/10},x=0..1,y=-1..1,title="t = 0", color=[red,green], thickness=[4,2]);
plot({u_2(x),ut_2(x)/10},x=0..1,y=-1..1,title="t=1/8*tau",color=[red,green],thickness=[4,2]);plot({u_3(x),ut_3(x)/10},x=0..1,y=-1..1,title="t=2/8*tau",color=[red,green],thickness=[4,2]);plot({u_4(x),ut_4(x)/10},x=0..1,y=-1..1,title="t=3/8*tau",color=[red,green],thickness=[4,2]);plot({u_5(x),ut_5(x)/10},x=0..1,y=-1..1,title="t=4/8*tau",color=[red,green],thickness=[4,2]);plot({u_6(x),ut_6(x)/10},x=0..1,y=-1..1,title="t=5/8*tau",color=[red,green],thickness=[4,2]);plot({u_7(x),ut_7(x)/10},x=0..1,y=-1..1,title="t=6/8*tau",color=[red,green],thickness=[4,2]);plot({u_8(x),ut_8(x)/10},x=0..1,y=-1..1,title="t=7/8*tau",color=[red,green],thickness=[4,2]);

[Maple Plot]

[Maple Plot]

[Maple Plot]

[Maple Plot]

[Maple Plot]

[Maple Plot]

[Maple Plot]

[Maple Plot]

 ПРИМЕР 2

>    restart;

Решить однородное уравнение

  diff(u(t,x),`$`(t,2)) = a^2*diff(u(t,x),`$`(x,2))  

с однородными граничными условиями и начальными условиями

u(0,x) = F(x) ,

diff(u(0,x),t) = f(x) .

где функции F(x)  и f(x)  заданы в виде:  

>    L:=1;v0:=1;l1:=L/4-L/100;l2:=L/4+L/100;
F(x):=0;
f(x):=x->piecewise(x<l1,0, x<l2,v0, x>L,0);

L := 1

v0 := 1

l1 := 6/25

l2 := 13/50

F(x) := 0

f(x) := proc (x) options operator, arrow; piecewise(x < l1,0,x < l2,v0,L < x,0) end proc

>    plot(f(x),0..1,-0.1..1.1, numpoints=400, color=blue,thickness=3);

[Maple Plot]

Для решения воспользуемся полученной в пункте 1.2. формулой:

>    restart;

>    F(x):=0;
f(x):=x->piecewise(x<l1,0, x<l2,v0, x>L,0);

F(x) := 0

f(x) := proc (x) options operator, arrow; piecewise(x < l1,0,x < l2,v0,L < x,0) end proc

Коэффициенты разложения:

>    C1[n]:=(2/L)*int(F(x)*sin(Pi*n/L*x),x=0..L);
C2[n]:=(2/(L*(Pi*n*a/L)))*int(v0*cos(Pi*n/L*x),x=l1..l2);

C1[n] := 0

C2[n] := -2/Pi^2/n^2/a*v0*L*(sin(Pi*n/L*l1)-sin(Pi*n/L*l2))

Решение уравнения:

>    u(t,x) := Sum((C1[n]*cos(Pi*n*a/L*t)+C2[n]*sin(Pi*n*a/L*t))*sin(Pi*n/L*x),n = 1 .. infinity);

u(t,x) := Sum(-2/Pi^2/n^2/a*v0*L*(sin(Pi*n/L*l1)-sin(Pi*n/L*l2))*sin(Pi*n*a/L*t)*sin(Pi*n/L*x),n = 1 .. infinity)

>    a:=1;L:=1;v0:=10;l1:=L/4-L/100;l2:=L/4+L/100;
u(t,x) := Sum(-2/Pi^2/n^2/a*v0*L*(sin(Pi*n/L*l1)-sin(Pi*n/L*l2))*sin(Pi*n*a/L*t)*sin(Pi*n/L*x),n = 1 .. infinity);

a := 1

L := 1

v0 := 10

l1 := 6/25

l2 := 13/50

u(t,x) := Sum(-20/Pi^2/n^2*(sin(6/25*Pi*n)-sin(13/50*Pi*n))*sin(Pi*n*t)*sin(Pi*n*x),n = 1 .. infinity)

Представим полученные решения в виде двумерных анимированных графиков:

>    with(plots):
u(t,x):=Sum(-20/Pi^2/n^2*(sin(6/25*Pi*n)-sin(13/50*Pi*n))*sin(Pi*n*t)*sin(Pi*n*x),n=1..1000);
ut(t,x):=diff(u(t,x),t);
animate(plot,[{u(t,x),ut(t,x)/40},x=0..1], t=0..2, frames=30,thickness=3, title="Волны на струне");

Warning, the name changecoords has been redefined

u(t,x) := Sum(-20/Pi^2/n^2*(sin(6/25*Pi*n)-sin(13/50*Pi*n))*sin(Pi*n*t)*sin(Pi*n*x),n = 1 .. 1000)

ut(t,x) := Sum(-20/Pi/n*(sin(6/25*Pi*n)-sin(13/50*Pi*n))*cos(Pi*n*t)*sin(Pi*n*x),n = 1 .. 1000)

[Maple Plot]

Представим полученное решение в виде двумерных графиков для нескольких моментов времени:

>    tau:=2*Pi/(Pi*a/L):

u_1(x):=subs(t=tau*0,u(t,x)):     ut_1(x):=subs(t=tau*0,ut(t,x)):
u_2(x):=subs(t=tau*(1/8),u(t,x)): ut_2(x):=subs(t=tau*(1/8),ut(t,x)):
u_3(x):=subs(t=tau*(2/8),u(t,x)): ut_3(x):=subs(t=tau*(2/8),ut(t,x)):
u_4(x):=subs(t=tau*(3/8),u(t,x)): ut_4(x):=subs(t=tau*(3/8),ut(t,x)):
u_5(x):=subs(t=tau*(4/8),u(t,x)): ut_5(x):=subs(t=tau*(4/8),ut(t,x)):
u_6(x):=subs(t=tau*(5/8),u(t,x)): ut_6(x):=subs(t=tau*(5/8),ut(t,x)):
u_7(x):=subs(t=tau*(6/8),u(t,x)): ut_7(x):=subs(t=tau*(6/8),ut(t,x)):
u_8(x):=subs(t=tau*(7/8),u(t,x)): ut_8(x):=subs(t=tau*(7/8),ut(t,x)):

plot({u_1(x),ut_1(x)/50},x=0..1,y=-.3..0.3,title="t=0",color=[red,green],thickness=[4,2]);
plot({u_2(x),ut_2(x)/50},x=0..1,y=-.3..0.3,title="t=1/8*tau",color=[red,green],thickness=[4,2]);
plot({u_3(x),ut_3(x)/50},x=0..1,y=-.3..0.3,title="t=2/8*tau",color=[red,green],thickness=[4,2]);
plot({u_4(x),ut_4(x)/50},x=0..1,y=-.3..0.3,title="t=3/8*tau",color=[red,green],thickness=[4,2]);
plot({u_5(x),ut_5(x)/50},x=0..1,y=-.3..0.3,title="t=4/8*tau",color=[red,green],thickness=[4,2]);
plot({u_6(x),ut_6(x)/50},x=0..1,y=-.3..0.3,title="t=5/8*tau",color=[red,green],thickness=[4,2]);
plot({u_7(x),ut_7(x)/50},x=0..1,y=-.3..0.3,title="t=6/8*tau",color=[red,green],thickness=[4,2]);
plot({u_8(x),ut_8(x)/50},x=0..1,y=-.3..0.3,title="t=7/8*tau",color=[red,green],thickness=[4,2]);

[Maple Plot]

[Maple Plot]

[Maple Plot]

[Maple Plot]

[Maple Plot]

[Maple Plot]

[Maple Plot]

[Maple Plot]

 ПРИМЕР 3

>    restart;

Решить однородное уравнение

  diff(u(t,x),`$`(t,2)) = a^2*diff(u(t,x),`$`(x,2))  

с однородными граничными условиями и начальными условиями

u(0,x) = F(x) ,

diff(u(0,x),t) = f(x) .

где функции F(x)  и f(x)  заданы в виде:  

>    a:=1;L:=1;alpha:=1;l:=L/3;
F(x):=x->piecewise(x<0,0, x<L,4*alpha*x*(L-x)/L^2, x>L,0);
f(x):=0;

a := 1

L := 1

alpha := 1

l := 1/3

F(x) := proc (x) options operator, arrow; piecewise(x < 0,0,x < L,4*alpha*x*(L-x)/L^2,L < x,0) end proc

f(x) := 0

>    plot(F(x),-0.15..1.15,-0.1..1.1, numpoints=400, color=blue,thickness=3);

[Maple Plot]

Для решения воспользуемся полученной в пункте 1.2. формулой:

>    restart;

>    F(x):=x->piecewise(x<0,0, x<L,4*alpha*x*(L-x)/L^2, x>L,0);
f(x):=0;

F(x) := proc (x) options operator, arrow; piecewise(x < 0,0,x < L,4*alpha*x*(L-x)/L^2,L < x,0) end proc

f(x) := 0

Коэффициенты разложения:

>    C1[n]:=simplify((2/L)*int(4*alpha*x*(L-x)/L^2*sin(Pi*n/L*x),x=0..L));
C2[n]:=(2/(L*(Pi*n*a/L)))*int(f(x)*cos(Pi*n/L*x),x=0..L);

C1[n] := -8*alpha*(-2+Pi*n*sin(Pi*n)+2*cos(Pi*n))/Pi^3/n^3

C2[n] := 0

Решение уравнения:

>    u(t,x):=Sum((C1[n]*cos(Pi*n*a/L*t)+C2[n]*sin(Pi*n*a/L*t))*sin(Pi*n/L*x),n = 1 .. infinity);

u(t,x) := Sum(-8*alpha*(-2+Pi*n*sin(Pi*n)+2*cos(Pi*n))/Pi^3/n^3*cos(Pi*n*a/L*t)*sin(Pi*n/L*x),n = 1 .. infinity)

>    a:=1;L:=1;alpha:=1;l:=L/4;
u(t,x):=Sum(-8*alpha*(-2+Pi*n*sin(Pi*n)+2*cos(Pi*n))/Pi^3/n^3*cos(Pi*n*a/L*t)*sin(Pi*n/L*x),n = 1 .. infinity);

a := 1

L := 1

alpha := 1

l := 1/4

u(t,x) := Sum(-8*(-2+Pi*n*sin(Pi*n)+2*cos(Pi*n))/Pi^3/n^3*cos(Pi*n*t)*sin(Pi*n*x),n = 1 .. infinity)

Представим полученные решения в виде двумерных анимированных графиков:

>    with(plots):
u(t,x):=Sum(-8*(-2+Pi*n*sin(Pi*n)+2*cos(Pi*n))/Pi^3/n^3*cos(Pi*n*t)*sin(Pi*n*x),n=1..1000):
ut(t,x):=diff(u(t,x),t):
animate(plot,[{u(t,x),ut(t,x)/40},x=0..1], t=0..2, frames=30,thickness=3, title="Волны на струне");

Warning, the name changecoords has been redefined

[Maple Plot]

Представим полученное решение в виде двумерных графиков для нескольких моментов времени:

>    tau:=2*Pi/(Pi*a/L):

u_1(x):=subs(t=tau*0,u(t,x)):     ut_1(x):=subs(t=tau*0,ut(t,x)):
u_2(x):=subs(t=tau*(1/8),u(t,x)): ut_2(x):=subs(t=tau*(1/8),ut(t,x)):
u_3(x):=subs(t=tau*(2/8),u(t,x)): ut_3(x):=subs(t=tau*(2/8),ut(t,x)):
u_4(x):=subs(t=tau*(3/8),u(t,x)): ut_4(x):=subs(t=tau*(3/8),ut(t,x)):
u_5(x):=subs(t=tau*(4/8),u(t,x)): ut_5(x):=subs(t=tau*(4/8),ut(t,x)):
u_6(x):=subs(t=tau*(5/8),u(t,x)): ut_6(x):=subs(t=tau*(5/8),ut(t,x)):
u_7(x):=subs(t=tau*(6/8),u(t,x)): ut_7(x):=subs(t=tau*(6/8),ut(t,x)):
u_8(x):=subs(t=tau*(7/8),u(t,x)): ut_8(x):=subs(t=tau*(7/8),ut(t,x)):

plot({u_1(x),ut_1(x)/10},x=0..1,y=-1..1,title="t=0",color=[red,green], thickness=[4,2]);
plot({u_2(x),ut_2(x)/10},x=0..1,y=-1..1,title="t=1/8*tau",color=[red,green],thickness=[4,2]);plot({u_3(x),ut_3(x)/10},x=0..1,y=-1..1,title="t=2/8*tau",color=[red,green],thickness=[4,2]);plot({u_4(x),ut_4(x)/10},x=0..1,y=-1..1,title="t=3/8*tau",color=[red,green],thickness=[4,2]);plot({u_5(x),ut_5(x)/10},x=0..1,y=-1..1,title="t=4/8*tau",color=[red,green],thickness=[4,2]);plot({u_6(x),ut_6(x)/10},x=0..1,y=-1..1,title="t=5/8*tau",color=[red,green],thickness=[4,2]);plot({u_7(x),ut_7(x)/10},x=0..1,y=-1..1,title="t=6/8*tau",color=[red,green],thickness=[4,2]);plot({u_8(x),ut_8(x)/10},x=0..1,y=-1..1,title="t=7/8*tau",color=[red,green],thickness=[4,2]);

[Maple Plot]

[Maple Plot]

[Maple Plot]

[Maple Plot]

[Maple Plot]

[Maple Plot]

[Maple Plot]

[Maple Plot]

параболические уравнения

>    restart;

>    with(PDETools):

Задаем дифференциальное уравнение - уравнение теплопроводности.

>    PDE:=diff(u(x,t),t)-diff(u(x,t),x$2);

PDE := diff(u(x,t),t)-diff(u(x,t),`$`(x,2))

Указываем правило, по которому будет произведена замена независимых переменных и функции.

>    tr:={x=eta*sqrt(tau),t=tau,u(x,t)=U(eta)};

tr := {t = tau, u(x,t) = U(eta), x = eta*tau^(1/2)}

С помощью функции dchange преобразуем дифференциальное уравнение.

>    PDEA:=dchange(tr,PDE,params=a,simplify);

PDEA := -1/2*(eta*diff(U(eta),eta)+2*diff(U(eta),`$`(eta,2)))/tau

С помощью функции  dsolve решаем полученное дифференциальное уравнение.

>    SOLD:=dsolve(PDEA);

SOLD := U(eta) = _C1+erf(1/2*eta)*_C2

Выполняем обратное преобразование.

>    trback:={eta=x/sqrt(t),tau=t,U(eta)=u(x,t)};

trback := {eta = x/t^(1/2), tau = t, U(eta) = u(x,t)}

>    SOLD1:=dchange(trback,SOLD);

SOLD1 := u(x,t) = _C1+erf(1/2*x/t^(1/2))*_C2

>    SOLD2:=subs(_C1=0,_C2=1,rhs(SOLD1));

SOLD2 := erf(1/2*x/t^(1/2))

>    u:=unapply(SOLD2,x,y);

u := proc (x, y) options operator, arrow; erf(1/2*x/t^(1/2)) end proc

>    plot3d(u(x,t),x=0.0..1,t=0.0..1);

[Maple Plot]

>   

  Теплопроводность в бесконечном стержне

Рассмотрим процесс распространения тепла в бесконечном стержне. Для этого решается однородное уравнение

diff(u(t,x),t) = a^2*diff(u(t,x),`$`(x,2))  

с начальным условием

u(0,x) = f(x) .

>    restart;with(PDETools):

>   

Однородное уравнение и его решение методом разделения переменных :

>    PDE:=diff(u(t,x),t)=a^2*diff(u(t,x),x,x);
struc:=pdsolve(PDE,HINT=T(t)*X(x));

PDE := diff(u(t,x),t) = a^2*diff(u(t,x),`$`(x,2))

struc := `&where`(u(t,x) = T(t)*X(x),[{diff(X(x),`$`(x,2)) = _c[1]*X(x)/a^2, diff(T(t),t) = _c[1]*T(t)}])

>    dsolve(diff(T(t),t)=_c[1]*T(t));
dsolve(diff(X(x),`$`(x,2))=_c[1]*X(x)/a^2);

T(t) = _C1*exp(_c[1]*t)

X(x) = _C1*exp(_c[1]^(1/2)/a*x)+_C2*exp(-_c[1]^(1/2)/a*x)

Сделаем замену постоянной разделения переменных:

_c[1]  = = - lambda^2

>    dsolve(diff(T(t),t)=-lambda^2*T(t)*a^2);
dsolve(diff(X(x),`$`(x,2))=-lambda^2*X(x));

T(t) = _C1*exp(-lambda^2*a^2*t)

X(x) = _C1*sin(lambda*x)+_C2*cos(lambda*x)

В результате общее решение имеет вид:

>    u(t,x):=(C1*sin(lambda*x)+C2*cos(lambda*x))*exp(-lambda^2*a^2*t);

u(t,x) := (C1*sin(lambda*x)+C2*cos(lambda*x))*exp(-lambda^2*a^2*t)

Функция u(t,x)  - есть решение уравнения для любого lambda  (где lambda  - непрерывно меняющейся параметр со значениями в интервале от - infinity  до + infinity ), причем для каждого lambda  будут соответствующие коэффициенты   C1(lambda)  и C2(lambda) .

Поэтому имеем:

>    u[lambda](t,x):=(C1(lambda)*sin(lambda*x)+C2(lambda)*cos(lambda*x))*exp(-lambda^2*a^2*t);

u[lambda](t,x) := (C1(lambda)*sin(lambda*x)+C2(lambda)*cos(lambda*x))*exp(-lambda^2*a^2*t)

В результате решение линейного обнородного уравнения можно представить в виде суперпозиции решений, зависящих от  параметра lambda :

>    u(t,x):=int(u[lambda](t,x), lambda=-infinity..infinity);

u(t,x) := int((C1(lambda)*sin(lambda*x)+C2(lambda)*cos(lambda*x))*exp(-lambda^2*a^2*t),lambda = -infinity .. infinity)

Для определения коэффициентов   C1(lambda)  и C2(lambda)  воспользуемся начальными условиями:

>    u_0(t,x):=eval(subs(t=0, u(t,x)))=f(x);

u_0(t,x) := int(C1(lambda)*sin(lambda*x)+C2(lambda)*cos(lambda*x),lambda = -infinity .. infinity) = f(x)

Это выражение соответсвует разложению функции f(x)  в интеграл Фурье:

>    f(x)=(1/(2*Pi))*int(int(f(xi)*cos(lambda*(xi-x)),xi=-infinity..infinity),lambda=-infinity..infinity);

f(x) = 1/2*1/Pi*int(int(f(xi)*cos(lambda*(xi-x)),xi = -infinity .. infinity),lambda = -infinity .. infinity)

Значит, коэффициенты C1(lambda)  и C2(lambda)  выражаются:

>    C1(lambda):=(1/(2*Pi))*int(f(xi)*sin(lambda*xi),xi=-infinity..infinity);
C2(lambda):=(1/(2*Pi))*int(f(xi)*cos(lambda*xi),xi=-infinity..infinity);

C1(lambda) := 1/2*1/Pi*int(f(xi)*sin(lambda*xi),xi = -infinity .. infinity)

C2(lambda) := 1/2*1/Pi*int(f(xi)*cos(lambda*xi),xi = -infinity .. infinity)

>    u(t,x):=int((C1(lambda)*sin(lambda*x)+C2(lambda)*cos(lambda*x))*exp(-lambda^2*a^2*t),lambda = -infinity .. infinity);
u(t,x):=combine(int((C1(lambda)*sin(lambda*x)+C2(lambda)*cos(lambda*x))*exp(-lambda^2*a^2*t),lambda = -infinity .. infinity));

u(t,x) := int((1/2*1/Pi*sin(lambda*x)*int(f(xi)*sin(lambda*xi),xi = -infinity .. infinity)+1/2*1/Pi*cos(lambda*x)*int(f(xi)*cos(lambda*xi),xi = -infinity .. infinity))*exp(-lambda^2*a^2*t),lambda = -in...

u(t,x) := int(int(1/2*exp(-lambda^2*a^2*t)*f(xi)*cos(lambda*x-lambda*xi)/Pi,xi = -infinity .. infinity),lambda = -infinity .. infinity)

Полученное выражение можно преобразовать.

Для этого рассмотрим интеграл:

>    int(exp(-lambda^2*a^2*t)*cos(-lambda*x+lambda*xi), lambda = -infinity .. infinity);

int(exp(-lambda^2*a^2*t)*cos(lambda*x-lambda*xi),lambda = -infinity .. infinity)

Сделаем замену переменной и преобразование подинтегральной функции:

>    simplify(subs({xi=-v*a*t^(1/2)+x,lambda=w/(a*sqrt(t))},exp(-lambda^2*a^2*t)*cos(-lambda*x+lambda*xi)));

exp(-w^2)*cos(w*v)

>    Int(exp(-lambda^2*a^2*t)*cos(-lambda*x+lambda*xi),lambda = -infinity .. infinity)=(1/(a*sqrt(t)))*int(exp(-w^2)*cos(w*v),w = -infinity .. infinity);

Int(exp(-lambda^2*a^2*t)*cos(lambda*x-lambda*xi),lambda = -infinity .. infinity) = 1/a/t^(1/2)*Pi^(1/2)*exp(-1/4*v^2)

>    Int(exp(-lambda^2*a^2*t)*cos(-lambda*x+lambda*xi),lambda=-infinity..infinity)= subs(v=(x-xi)/a/t^(1/2),1/a/t^(1/2)*Pi^(1/2)*exp(-1/4*v^2));

Int(exp(-lambda^2*a^2*t)*cos(lambda*x-lambda*xi),lambda = -infinity .. infinity) = 1/a/t^(1/2)*Pi^(1/2)*exp(-1/4*(-xi+x)^2/a^2/t)

В результате решение примет вид:

>    u(t,x):=(1/(2*a*sqrt(Pi*t)))*int(f(xi)*exp(-1/4*(x-xi)^2/a^2/t),xi = -infinity .. infinity);

u(t,x) := 1/2*1/a/(Pi*t)^(1/2)*int(f(xi)*exp(-1/4*(-xi+x)^2/a^2/t),xi = -infinity .. infinity)

ПРИМЕР 1

>    restart;

Решить однородное уравнение

diff(u(t,x),t) = a^2*diff(u(t,x),`$`(x,2))  

с начальным условияем

u(0,x) = f(x) ,

где функция f(x)  задана в виде:  

>    a:=1;L:=1;alpha:=1;l:=L/3;
f(xi):=u0*exp(-gamma^2*xi^2);

a := 1

L := 1

alpha := 1

l := 1/3

f(xi) := u0*exp(-gamma^2*xi^2)

>    u0:=1;gamma:=0.5;
plot(f(xi), xi=-15..15, color=red,thickness=3);

u0 := 1

Error, attempting to assign to `gamma` which is protected

[Maple Plot]

Для решения воспользуемся полученной в пункте 1.1. формулой:

>    u(t,x):=1/2*1/a/(Pi*t)^(1/2)*int(f(xi)*exp(-1/4*(x-xi)^2/a^2/t),xi = -infinity .. infinity);

u(t,x) := 1/2*1/(Pi*t)^(1/2)*PIECEWISE([2*exp(1/(-4*gamma^2*t-1)*x^2*gamma^2)*u0/((4*gamma^2*t+1)/t)^(1/2)*Pi^(1/2), csgn(gamma^2+1/(4*t)) = 1],[infinity, otherwise])

>    u0:=1;beta:=0.5; a:=1;

u0 := 1

beta := .5

a := 1

Решение уравнения:

>    with(plots):
u(t,x):=(1/(2*a*sqrt(Pi*t)))*exp(1/(-4*beta^2*a^2*t-1)*x^2*beta^2)*u0/((4*beta^2*a^2*t+1)/a^2/t)^(1/2);

Warning, the name changecoords has been redefined

u(t,x) := 1/2*1/(Pi*t)^(1/2)*exp(.25/(-1.00*t-1)*x^2)/((1.00*t+1)/t)^(1/2)

Представим полученные решения в виде двумерных анимированных графиков:

>    animate(plot,[u(t,x),x=-15..15], t=0.0001..60, frames=30,thickness=3);

[Maple Plot]

Представим полученное решение в виде двумерных графиков для нескольких моментов времени:

>    tau:=60:

u_1(x):=subs(t=tau*0.000001,u(t,x)):
u_2(x):=subs(t=tau*(1/8),u(t,x)):
u_3(x):=subs(t=tau*(2/8),u(t,x)):
u_4(x):=subs(t=tau*(3/8),u(t,x)):
u_5(x):=subs(t=tau*(4/8),u(t,x)):
u_6(x):=subs(t=tau*(5/8),u(t,x)):
u_7(x):=subs(t=tau*(6/8),u(t,x)):
u_8(x):=subs(t=tau*(7/8),u(t,x)):

plot(u_1(x),x=-15..15,y=-0.02..0.3,title="t = 0", color=red,thickness=3);
plot(u_2(x),x=-15..15,y=-0.02..0.3,title="t = 1/8*tau",color=red,thickness=3);
plot(u_3(x),x=-15..15,y=-0.02..0.3,title="t = 2/8*tau",color=red,thickness=3);
plot(u_4(x),x=-15..15,y=-0.02..0.3,title="t = 3/8*tau",color=red,thickness=3);
plot(u_5(x),x=-15..15,y=-0.02..0.3,title="t = 4/8*tau",color=red,thickness=3);
plot(u_6(x),x=-15..15,y=-0.02..0.3,title="t = 5/8*tau",color=red,thickness=3);
plot(u_7(x),x=-15..15,y=-0.02..0.3,title="t = 6/8*tau",color=red,thickness=3);
plot(u_8(x),x=-15..15,y=-0.02..0.3,title="t = 7/8*tau",color=red,thickness=3);

[Maple Plot]

[Maple Plot]

[Maple Plot]

[Maple Plot]

[Maple Plot]

[Maple Plot]

[Maple Plot]

[Maple Plot]

 ПРИМЕР 2

>    restart;

Решить однородное уравнение

diff(u(t,x),t) = a^2*diff(u(t,x),`$`(x,2))  

с начальным условияем

u(0,x) = f(x) ,

где функция f(x)  задана в виде:  

>    a:=1;L:=2;alpha:=1;
f(x):=x->piecewise(x<-L,0, x<0,alpha*(1+x/L),x<L,alpha*(1-x/L), x>L,0);

a := 1

L := 2

alpha := 1

f(x) := proc (x) options operator, arrow; piecewise(x < -L,0,x < 0,alpha*(1+x/L),x < L,alpha*(1-x/L),L < x,0) end proc

>    plot(f(x),-10..10,-0.1..1.1, numpoints=400,color=blue,thickness=3);

[Maple Plot]

>    restart;
f(xi):=xi->piecewise(xi<-L,0, xi<0,alpha*(1+xi/L),xi<L,alpha*(1-xi/L), x>L,0);

f(xi) := proc (xi) options operator, arrow; piecewise(xi < -L,0,xi < 0,alpha*(1+xi/L),xi < L,alpha*(1-xi/L),L < x,0) end proc

Для решения воспользуемся полученной в пункте 1.1. формулой:

>    u(t,x):=simplify(1/2*1/a/(Pi*t)^(1/2)*int(alpha*(1+xi/L)*exp(-1/4*(x-xi)^2/a^2/t),xi = -L .. 0)+1/2*1/a/(Pi*t)^(1/2)*int(alpha*(1-xi/L)*exp(-1/4*(x-xi)^2/a^2/t),xi = 0 .. L));

u(t,x) := 1/2*alpha*(Pi^(1/2)*t^(1/2)*erf(1/2*(L+x)/a/t^(1/2))*L+2*a*t*exp(-1/4*(L+x)^2/a^2/t)+x*t^(1/2)*Pi^(1/2)*erf(1/2*(L+x)/a/t^(1/2))-4*a*t*exp(-1/4*x^2/a^2/t)-2*x*t^(1/2)*Pi^(1/2)*erf(1/2*x/a/t^(...
u(t,x) := 1/2*alpha*(Pi^(1/2)*t^(1/2)*erf(1/2*(L+x)/a/t^(1/2))*L+2*a*t*exp(-1/4*(L+x)^2/a^2/t)+x*t^(1/2)*Pi^(1/2)*erf(1/2*(L+x)/a/t^(1/2))-4*a*t*exp(-1/4*x^2/a^2/t)-2*x*t^(1/2)*Pi^(1/2)*erf(1/2*x/a/t^(...
u(t,x) := 1/2*alpha*(Pi^(1/2)*t^(1/2)*erf(1/2*(L+x)/a/t^(1/2))*L+2*a*t*exp(-1/4*(L+x)^2/a^2/t)+x*t^(1/2)*Pi^(1/2)*erf(1/2*(L+x)/a/t^(1/2))-4*a*t*exp(-1/4*x^2/a^2/t)-2*x*t^(1/2)*Pi^(1/2)*erf(1/2*x/a/t^(...

>    a:=1;L:=2;alpha:=1;

a := 1

L := 2

alpha := 1

Представим полученные решения в виде двумерных анимированных графиков:

>    with(plots):
u(t,x):=-1/2*alpha*(-Pi^(1/2)*t^(1/2)*erf(1/2*(L+x)/a/t^(1/2))*L-2*a*t*exp(-1/4*(L+x)^2/a^2/t)-t^(1/2)*x*Pi^(1/2)*erf(1/2*(L+x)/a/t^(1/2))+4*a*t*exp(-1/4/a^2/t*x^2)+2*t^(1/2)*x*Pi^(1/2)*erf(1/2/a/t^(1/2)*x)-Pi^(1/2)*t^(1/2)*erf(1/2*(L-x)/a/t^(1/2))*L-2*a*t*exp(-1/4*(L-x)^2/a^2/t)+t^(1/2)*x*Pi^(1/2)*erf(1/2*(L-x)/a/t^(1/2)))/Pi^(1/2)/t^(1/2)/L;
animate(plot,[u(t,x),x=-15..15], t=0.0001..15, frames=30,thickness=3);

Warning, the name changecoords has been redefined

u(t,x) := -1/4*(-2*Pi^(1/2)*t^(1/2)*erf(1/2*(2+x)/t^(1/2))-2*t*exp(-1/4*(2+x)^2/t)-x*t^(1/2)*Pi^(1/2)*erf(1/2*(2+x)/t^(1/2))+4*t*exp(-1/4*x^2/t)+2*x*t^(1/2)*Pi^(1/2)*erf(1/2*x/t^(1/2))-2*Pi^(1/2)*t^(1/...
u(t,x) := -1/4*(-2*Pi^(1/2)*t^(1/2)*erf(1/2*(2+x)/t^(1/2))-2*t*exp(-1/4*(2+x)^2/t)-x*t^(1/2)*Pi^(1/2)*erf(1/2*(2+x)/t^(1/2))+4*t*exp(-1/4*x^2/t)+2*x*t^(1/2)*Pi^(1/2)*erf(1/2*x/t^(1/2))-2*Pi^(1/2)*t^(1/...

[Maple Plot]

 ПРИМЕР 3

>    restart;

Решить однородное уравнение

diff(u(t,x),t) = a^2*diff(u(t,x),`$`(x,2))  

с начальным условияем

u(0,x) = f(x) ,

где функция f(x)  задана в виде:  

>    a:=1;L:=2;alpha:=1;
f(x):=x->piecewise(x<-L,0, x<L,alpha, x>L,0);

a := 1

L := 2

alpha := 1

f(x) := proc (x) options operator, arrow; piecewise(x < -L,0,x < L,alpha,L < x,0) end proc

>    plot(f(x),-10..10,-0.1..1.1, numpoints=400,color=blue,thickness=3);

[Maple Plot]

>    restart;

>    f(xi):=xi->piecewise(xi<-L,0, xi<L,alpha, xi>L,0);

f(xi) := proc (xi) options operator, arrow; piecewise(xi < -L,0,xi < L,alpha,L < xi,0) end proc

Для решения воспользуемся полученной в пункте 1.1. формулой:

>    u(t,x):=simplify(1/2*1/a/(Pi*t)^(1/2)*int(f(xi)*exp(-1/4*(x-xi)^2/a^2/t),xi = -L .. L));

u(t,x) := -1/2*c*(-erf(1/2*(L+x)/a/t^(1/2))+erf(1/2*(-L+x)/a/t^(1/2)))

>    a:=1;L:=2;alpha:=1;

a := 1

L := 2

alpha := 1

Решение уравнения:

>    with(plots):
u(t,x) := 1/2*(erf(1/2*(L+x)/a/t^(1/2))+erf(1/2*(L-x)/a/t^(1/2)));

Warning, the name changecoords has been redefined

u(t,x) := 1/2*erf(1/2*(2+x)/t^(1/2))+1/2*erf(1/2*(2-x)/t^(1/2))

Представим полученные решения в виде двумерных анимированных графиков:

>    animate(plot,[u(t,x),x=-15..15], t=0.0001..15, frames=30,thickness=3);

[Maple Plot]

  Теплопроводность в полубесконечном стержне

Рассмотрим процесс распространения тепла в полубесконечном стержне. Для этого решается однородное уравнение

diff(u(t,x),t) = a^2*diff(u(t,x),`$`(x,2))  

с начальным условием

u(0,x) = f(x)

и граничным условием:

1. Конец стержня  в точке x = 0  теплоизолирован:

diff(u(t,0),x) = 0 .

или

2. Конец стержня  в точке x = 0  поддерживается при постоянной температуре:

u(t,0) = T0

>    restart;

Однородное уравнение и его решение методом разделения переменных :

>    PDE:=diff(u(t,x),t)=a^2*diff(u(t,x),x,x);
struc:=pdsolve(PDE,HINT=T(t)*X(x));

PDE := diff(u(t,x),t) = a^2*diff(u(t,x),`$`(x,2))

struc := `&where`(u(t,x) = T(t)*X(x),[{diff(X(x),`$`(x,2)) = _c[1]*X(x)/a^2, diff(T(t),t) = _c[1]*T(t)}])

>    dsolve(diff(T(t),t)=_c[1]*T(t));
dsolve(diff(X(x),`$`(x,2))=_c[1]*X(x)/a^2);

T(t) = _C1*exp(_c[1]*t)

X(x) = _C1*exp(_c[1]^(1/2)/a*x)+_C2*exp(-_c[1]^(1/2)/a*x)

Сделаем замену постоянной разделения переменных:

_c[1]  = = - lambda^2

>    dsolve(diff(T(t),t)=-lambda^2*T(t)*a^2);
dsolve(diff(X(x),`$`(x,2))=-lambda^2*X(x));

T(t) = _C1*exp(-lambda^2*a^2*t)

X(x) = _C1*sin(lambda*x)+_C2*cos(lambda*x)

В результате общее решение имеет вид:

>    u(t,x):=(C1*sin(lambda*x)+C2*cos(lambda*x))*exp(-lambda^2*a^2*t);

u(t,x) := (C1*sin(lambda*x)+C2*cos(lambda*x))*exp(-lambda^2*a^2*t)

Функция u(t,x)  - есть решение уравнения для любого lambda  (где lambda  - непрерывно меняющейся параметр со значениями в интервале от - infinity  до + infinity ), причем для каждого lambda  будут соответствующие коэффициенты   C1(lambda)  и C2(lambda) .

Поэтому имеем:

>    u[lambda](t,x):=(C1(lambda)*sin(lambda*x)+C2(lambda)*cos(lambda*x))*exp(-lambda^2*a^2*t);

u[lambda](t,x) := (C1(lambda)*sin(lambda*x)+C2(lambda)*cos(lambda*x))*exp(-lambda^2*a^2*t)

В результате решение линейного обнородного уравнения можно представить в виде суперпозиции решений, зависящих от  параметра lambda :

>    u(t,x):=int(u[lambda](t,x), lambda=-infinity..infinity);

u(t,x) := int((C1(lambda)*sin(lambda*x)+C2(lambda)*cos(lambda*x))*exp(-lambda^2*a^2*t),lambda = -infinity .. infinity)

Для определения коэффициентов   C1(lambda)  и C2(lambda)  воспользуемся начальными условиями:

>    u_0(t,x):=eval(subs(t=0, u(t,x)))=f(x);

u_0(t,x) := int(C1(lambda)*sin(lambda*x)+C2(lambda)*cos(lambda*x),lambda = -infinity .. infinity) = f(x)

Это выражение соответсвует разложению функции f(x)  в интеграл Фурье:

>    f(x)=(1/(2*Pi))*int(int(f(xi)*cos(lambda*(xi-x)),xi=-infinity..infinity),lambda=-infinity..infinity);

f(x) = 1/2*1/Pi*int(int(f(xi)*cos(lambda*(xi-x)),xi = -infinity .. infinity),lambda = -infinity .. infinity)

Значит, коэффициенты C1(lambda)  и C2(lambda)  выражаются:

>    C1(lambda):=(1/(2*Pi))*int(f(xi)*sin(lambda*xi),xi=-infinity..infinity);
C2(lambda):=(1/(2*Pi))*int(f(xi)*cos(lambda*xi),xi=-infinity..infinity);

C1(lambda) := 1/2*1/Pi*int(f(xi)*sin(lambda*xi),xi = -infinity .. infinity)

C2(lambda) := 1/2*1/Pi*int(f(xi)*cos(lambda*xi),xi = -infinity .. infinity)

>    u(t,x):=int((C1(lambda)*sin(lambda*x)+C2(lambda)*cos(lambda*x))*exp(-lambda^2*a^2*t),lambda = -infinity .. infinity);
u(t,x):=combine(int((C1(lambda)*sin(lambda*x)+C2(lambda)*cos(lambda*x))*exp(-lambda^2*a^2*t),lambda = -infinity .. infinity));

u(t,x) := int((1/2*1/Pi*sin(lambda*x)*int(f(xi)*sin(lambda*xi),xi = -infinity .. infinity)+1/2*1/Pi*cos(lambda*x)*int(f(xi)*cos(lambda*xi),xi = -infinity .. infinity))*exp(-lambda^2*a^2*t),lambda = -in...

Error, (in depends/internal) too many levels of recursion

Полученное выражение можно преобразовать.

Для этого рассмотрим интеграл:

>    int(exp(-lambda^2*a^2*t)*cos(-lambda*x+lambda*xi), lambda = -infinity .. infinity);

int(exp(-lambda^2*a^2*t)*cos(-lambda*x+lambda*xi),lambda = -infinity .. infinity)

Сделаем замену переменной и преобразование подинтегральной функции:

>    simplify(subs({xi=-v*a*t^(1/2)+x,lambda=w/(a*sqrt(t))},exp(-lambda^2*a^2*t)*cos(-lambda*x+lambda*xi)));

exp(-w^2)*cos(w*v)

>    Int(exp(-lambda^2*a^2*t)*cos(-lambda*x+lambda*xi),lambda = -infinity .. infinity)=(1/(a*sqrt(t)))*int(exp(-w^2)*cos(w*v),w = -infinity .. infinity);

Int(exp(-lambda^2*a^2*t)*cos(-lambda*x+lambda*xi),lambda = -infinity .. infinity) = 1/a/t^(1/2)*Pi^(1/2)*exp(-1/4*v^2)

>    Int(exp(-lambda^2*a^2*t)*cos(-lambda*x+lambda*xi),lambda=-infinity..infinity)= subs(v=(x-xi)/a/t^(1/2),1/a/t^(1/2)*Pi^(1/2)*exp(-1/4*v^2));

Int(exp(-lambda^2*a^2*t)*cos(-lambda*x+lambda*xi),lambda = -infinity .. infinity) = 1/a/t^(1/2)*Pi^(1/2)*exp(-1/4*(-xi+x)^2/a^2/t)

В результате решение примет вид:

>    u(t,x):=(1/(2*a*sqrt(Pi*t)))*int(f(xi)*exp(-1/4*(x-xi)^2/a^2/t),xi = -infinity .. infinity);

u(t,x) := 1/2*1/a/(Pi*t)^(1/2)*int(f(xi)*exp(-1/4*(-xi+x)^2/a^2/t),xi = -infinity .. infinity)

В случае полубесконечного стержня необходимо учесть граничное условие в точке x = 0 .

1 . Конец стержня  в точке x = 0  теплоизолирован:

diff(u(t,0),x) = 0 .

В этом случае f(x)  необходимо продолжить на отрицательную полуось четным образом:

f(x)  = f(-x) .

>    u_x(t,x):=diff(u(t,x),x);

u_x(t,x) := 1/2*1/a/(Pi*t)^(1/2)*int(-1/2*f(xi)*(-xi+x)/a^2/t*exp(-1/4*(-xi+x)^2/a^2/t),xi = -infinity .. infinity)

Сделаем замену переменной:

>    u0_x:=subs(x=0,u_x(t,x));

u0_x := 1/2*1/a/(Pi*t)^(1/2)*int(1/2*f(xi)*xi/a^2/t*exp(-1/4*xi^2/a^2/t),xi = -infinity .. infinity)

Здесь подинтегральная функция нечтна; поэтому интеграл равен нулю и граничное условие в точке x = 0  выполнено.

При этом решение может быть записано в виде:

>    u(t,x):=1/2*1/a/(Pi*t)^(1/2)*int(f(xi)*(exp(-1/4*(-xi+x)^2/a^2/t)+exp(-1/4*(xi+x)^2/a^2/t)),xi=-infinity..infinity);

u(t,x) := 1/2*1/a/(Pi*t)^(1/2)*int(f(xi)*(exp(-1/4*(-xi+x)^2/a^2/t)+exp(-1/4*(xi+x)^2/a^2/t)),xi = -infinity .. infinity)

2 . Конец стержня  в точке x = 0  поддерживается при постоянной температуре ( 0 < x ):

u(t,0) = T0 .

Для решения этой задачи преобразуем граничное условие к однородному :

>    U(t,x)=u(t,x)-T0;
F(x)=f(x)-T0;

U(t,x) = 1/2*1/a/(Pi*t)^(1/2)*int(f(xi)*(exp(-1/4*(-xi+x)^2/a^2/t)+exp(-1/4*(xi+x)^2/a^2/t)),xi = -infinity .. infinity)-T0

F(x) = f(x)-T0

При этом F(x)  необходимо продолжить на отрицательную полуось нечетным образом:

F(x)  = -F(-x) .

В этом случае решение задачи - функция:

>    U(t,x):=1/2*1/a/(Pi*t)^(1/2)*int(F(xi)*exp(-1/4*(-xi+x)^2/a^2/t),xi = -infinity .. infinity);

U(t,x) := 1/2*1/a/(Pi*t)^(1/2)*int(F(xi)*exp(-1/4*(-xi+x)^2/a^2/t),xi = -infinity .. infinity)

В результате имеем:

>    F(xi):=f(xi)-T0;
u(t,x):=T0+1/2*1/a/(Pi*t)^(1/2)*int((f(xi)+T0)*exp(-1/4*(-xi+x)^2/a^2/t),xi = -infinity .. infinity);

F(xi) := f(xi)-T0

u(t,x) := T0+1/2*1/a/(Pi*t)^(1/2)*int((f(xi)+T0)*exp(-1/4*(-xi+x)^2/a^2/t),xi = -infinity .. infinity)

Учитывая нечетность функции F(xi) := f(xi)+T0 , получаем:

>    u(t,x):=T0+1/2*1/a/(Pi*t)^(1/2)*int((f(xi)-T0)*exp(-1/4*(-xi+x)^2/a^2/t),xi = -infinity .. 0)+1/2*1/a/(Pi*t)^(1/2)*int((f(xi)-T0)*exp(-1/4*(xi+x)^2/a^2/t),xi = 0 .. infinity);

u(t,x) := T0+1/2*1/a/(Pi*t)^(1/2)*int((f(xi)-T0)*exp(-1/4*(-xi+x)^2/a^2/t),xi = -infinity .. 0)+1/2*1/a/(Pi*t)^(1/2)*int((f(xi)-T0)*exp(-1/4*(xi+x)^2/a^2/t),xi = 0 .. infinity)
u(t,x) := T0+1/2*1/a/(Pi*t)^(1/2)*int((f(xi)-T0)*exp(-1/4*(-xi+x)^2/a^2/t),xi = -infinity .. 0)+1/2*1/a/(Pi*t)^(1/2)*int((f(xi)-T0)*exp(-1/4*(xi+x)^2/a^2/t),xi = 0 .. infinity)

или

>    u(t,x):=T0+1/2*1/a/(Pi*t)^(1/2)*int((f(xi))*(exp(-1/4*(-xi+x)^2/a^2/t)-exp(-1/4*(xi+x)^2/a^2/t)),xi=0..infinity)-T0*Integr;

u(t,x) := T0+1/2*1/a/(Pi*t)^(1/2)*int(f(xi)*(exp(-1/4*(-xi+x)^2/a^2/t)-exp(-1/4*(xi+x)^2/a^2/t)),xi = 0 .. infinity)-T0*Integr

где:

>    Integr:=1/2/a/(Pi*t)^(1/2)*Int((T0)*exp(-1/4*(-xi+x)^2/a^2/t),xi = -infinity .. 0)-1/2/a/(Pi*t)^(1/2)*Int((T0)*exp(-1/4*(xi+x)^2/a^2/t),xi = 0 .. infinity);

Integr := 1/2*1/a/(Pi*t)^(1/2)*Int(T0*exp(-1/4*(-xi+x)^2/a^2/t),xi = -infinity .. 0)-1/2*1/a/(Pi*t)^(1/2)*Int(T0*exp(-1/4*(xi+x)^2/a^2/t),xi = 0 .. infinity)

Для вычисления этих интегралов сделаем замены:

xi = x-2*a*t^(1/2)*y , xi = -x+2*a*t^(1/2)*z .

>    subs(xi=x-2*a*t^(1/2)*y,exp(-1/4*(-xi+x)^2/a^2/t));
subs(xi=-x+2*a*t^(1/2)*y,exp(-1/4*(xi+x)^2/a^2/t));

exp(-y^2)

exp(-y^2)

>    I1:=simplify((1/a/(Pi*t)^(1/2))*int(exp(-y^2),y = -infinity .. x/(2*a*t^(1/2)))*2*a*t^(1/2))/2;
I2:=simplify((1/a/(Pi*t)^(1/2))*int(exp(-y^2),y = x/(2*a*t^(1/2)) ..infinity)*2*a*t^(1/2))/2;

I1 := 1/2+1/2*erf(1/2/t^(1/2)/a*x)

I2 := -1/2*erf(1/2/t^(1/2)/a*x)+1/2

>    Integr:=simplify(I1-I2);

Integr := erf(1/2/t^(1/2)/a*x)

Таким образом, имеем:

>   

>    u(t,x):=collect(T0+1/2*1/a/(Pi*t)^(1/2)*int((f(xi))*(exp(-1/4*(-xi+x)^2/a^2/t)-exp(-1/4*(xi+x)^2/a^2/t)),xi=0..infinity)-T0*Integr,T0);

u(t,x) := (-erf(1/2/t^(1/2)/a*x)+1)*T0+1/2*1/a/(Pi*t)^(1/2)*int(f(xi)*(exp(-1/4*(-xi+x)^2/a^2/t)-exp(-1/4*(xi+x)^2/a^2/t)),xi = 0 .. infinity)

  ПРИМЕР 1

>    restart;

Решить однородное уравнение

diff(u(t,x),t) = a^2*diff(u(t,x),`$`(x,2))  

с граничным условием (конец стержня  в точке x = 0  теплоизолирован):

diff(u(t,0),x) = 0 .

и начальным условияем

u(0,x) = f(x) ,

где функция f(x)  задана в виде:  

>    a:=1;l:=4;L:=6;alpha:=1;
f(x):=x->piecewise(x<l,0, x<L,alpha, x>L,0);

a := 1

l := 4

L := 6

alpha := 1

f(x) := proc (x) options operator, arrow; piecewise(x < l,0,x < L,alpha,L < x,0) end proc

>    plot(f(x),0..10,-0.1..1.1, numpoints=400,color=blue,thickness=3);

[Maple Plot]

>    restart;
f(xi):=xi->piecewise(xi<l,0, xi<L,alpha, xi>L,0);

f(xi) := proc (xi) options operator, arrow; piecewise(xi < l,0,xi < L,alpha,L < xi,0) end proc

Для решения воспользуемся полученной в пункте 1.2. (граничное условие 1) формулой:

>    u(t,x):=simplify(1/2*1/a/(Pi*t)^(1/2)*int(f(xi)*(exp(-1/4*(-xi+x)^2/a^2/t)+exp(-1/4*(xi+x)^2/a^2/t)),xi = l .. L));

u(t,x) := -1/2*c*(erf(1/2*(l-x)/a/t^(1/2))+erf(1/2*(l+x)/a/t^(1/2))-erf(1/2*(L-x)/a/t^(1/2))-erf(1/2*(L+x)/a/t^(1/2)))

>    a:=1;l:=4;L:=6;alpha:=1;

a := 1

l := 4

L := 6

alpha := 1

Решение уравнения:

>    with(plots):
u(t,x):=-1/2*(erf(1/2*(l-x)/a/t^(1/2))+erf(1/2*(l+x)/a/t^(1/2))+erf(1/2*(-L+x)/a/t^(1/2))-erf(1/2*(L+x)/a/t^(1/2)));

Warning, the name changecoords has been redefined

u(t,x) := -1/2*erf(1/2*(4-x)/t^(1/2))-1/2*erf(1/2*(4+x)/t^(1/2))-1/2*erf(1/2*(-6+x)/t^(1/2))+1/2*erf(1/2*(6+x)/t^(1/2))

Представим полученные решения в виде двумерных анимированных графиков:

>    animate(plot,[u(t,x),x=0..15], t=0.00000001..12, frames=60,thickness=3);

[Maple Plot]

Представим полученное решение в виде двумерных графиков для нескольких моментов времени:

>    tau:=12:

u_1(x):=subs(t=tau*0.000001,u(t,x)):
u_2(x):=subs(t=tau*(1/8),u(t,x)):
u_3(x):=subs(t=tau*(2/8),u(t,x)):
u_4(x):=subs(t=tau*(3/8),u(t,x)):
u_5(x):=subs(t=tau*(4/8),u(t,x)):
u_6(x):=subs(t=tau*(5/8),u(t,x)):
u_7(x):=subs(t=tau*(6/8),u(t,x)):
u_8(x):=subs(t=tau*(7/8),u(t,x)):

plot(u_1(x),x=0..15,y=-0.02..1.1,title="t = 0", color=red,thickness=3);
plot(u_2(x),x=0..15,y=-0.02..1.1,title="t = 1/8*tau",color=red,thickness=3);
plot(u_3(x),x=0..15,y=-0.02..1.1,title="t = 2/8*tau",color=red,thickness=3);
plot(u_4(x),x=0..15,y=-0.02..1.1,title="t = 3/8*tau",color=red,thickness=3);
plot(u_5(x),x=0..15,y=-0.02..1.1,title="t = 4/8*tau",color=red,thickness=3);
plot(u_6(x),x=0..15,y=-0.02..1.1,title="t = 5/8*tau",color=red,thickness=3);
plot(u_7(x),x=0..15,y=-0.02..1.1,title="t = 6/8*tau",color=red,thickness=3);
plot(u_8(x),x=0..15,y=-0.02..1.1,title="t = 7/8*tau",color=red,thickness=3);

[Maple Plot]

[Maple Plot]

[Maple Plot]

[Maple Plot]

[Maple Plot]

[Maple Plot]

[Maple Plot]

[Maple Plot]

 ПРИМЕР 2

>    restart;

Решить однородное уравнение

diff(u(t,x),t) = a^2*diff(u(t,x),`$`(x,2))  

с граничным условием (конец стержня  в точке x = 0  поддерживается при постоянной температуре ( 0 < x ):

u(t,0) = T0

и начальным условияем

u(0,x) = f(x) ,

где функция f(x)  задана в виде:  

>    T0:=0; a:=1;l:=4;L:=6;alpha:=1;
f(x):=x->piecewise(x<l,T0, x<L,alpha+T0, x>L,0);

T0 := 0

a := 1

l := 4

L := 6

alpha := 1

f(x) := proc (x) options operator, arrow; piecewise(x < l,T0,x < L,alpha+T0,L < x,0) end proc

>    plot(f(x),0..10,-0.1..1.1, numpoints=400,color=blue,thickness=3);

[Maple Plot]

>    restart;
f(xi):=xi->piecewise(xi<l,T0, xi<L,alpha+T0, xi>L,0);

f(xi) := proc (xi) options operator, arrow; piecewise(xi < l,T0,xi < L,alpha+T0,L < xi,0) end proc

Для решения воспользуемся полученной в пункте 1.2. (граничное условие 2) формулой:

>    u(t,x):=simplify((-erf(1/2*x/a/t^(1/2))+1)*T0+1/2*1/a/(Pi*t)^(1/2)*int(f(xi)*(exp(-1/4*(-xi+x)^2/a^2/t)-exp(-1/4*(xi+x)^2/a^2/t)),xi = l .. L));

u(t,x) := -T0*erf(1/2*x/a/t^(1/2))+T0-1/2*c*erf(1/2*(l-x)/a/t^(1/2))+1/2*c*erf(1/2*(l+x)/a/t^(1/2))+1/2*c*erf(1/2*(L-x)/a/t^(1/2))-1/2*c*erf(1/2*(L+x)/a/t^(1/2))

>    T0:=0; a:=1;l:=4;L:=6;alpha:=1;

T0 := 0

a := 1

l := 4

L := 6

alpha := 1

Решение уравнения:

>    with(plots):
u(t,x):=-T0*erf(1/2*x/a/t^(1/2))+T0+1/2*erf(1/2*(-l+x)/a/t^(1/2))+1/2*erf(1/2*(l+x)/a/t^(1/2))+1/2*erf(1/2*(L-x)/a/t^(1/2))-1/2*erf(1/2*(L+x)/a/t^(1/2));

Warning, the name changecoords has been redefined

u(t,x) := 1/2*erf(1/2*(-4+x)/t^(1/2))+1/2*erf(1/2*(4+x)/t^(1/2))+1/2*erf(1/2*(6-x)/t^(1/2))-1/2*erf(1/2*(6+x)/t^(1/2))

Представим полученные решения в виде двумерных анимированных графиков:

>    animate(plot,[u(t,x),x=0..15, y=-0.1..1.1], t=0.0000001..12, frames=60,thickness=3);

[Maple Plot]

Представим полученное решение в виде двумерных графиков для нескольких моментов времени:

>    tau:=12:

u_1(x):=subs(t=tau*0.000001,u(t,x)):
u_2(x):=subs(t=tau*(1/8),u(t,x)):
u_3(x):=subs(t=tau*(2/8),u(t,x)):
u_4(x):=subs(t=tau*(3/8),u(t,x)):
u_5(x):=subs(t=tau*(4/8),u(t,x)):
u_6(x):=subs(t=tau*(5/8),u(t,x)):
u_7(x):=subs(t=tau*(6/8),u(t,x)):
u_8(x):=subs(t=tau*(7/8),u(t,x)):

plot(u_1(x),x=0..15,y=-0.02..1.1,title="t = 0", color=red,thickness=3);
plot(u_2(x),x=0..15,y=-0.02..1.1,title="t = 1/8*tau",color=red,thickness=3);
plot(u_3(x),x=0..15,y=-0.02..1.1,title="t = 2/8*tau",color=red,thickness=3);
plot(u_4(x),x=0..15,y=-0.02..1.1,title="t = 3/8*tau",color=red,thickness=3);
plot(u_5(x),x=0..15,y=-0.02..1.1,title="t = 4/8*tau",color=red,thickness=3);
plot(u_6(x),x=0..15,y=-0.02..1.1,title="t = 5/8*tau",color=red,thickness=3);
plot(u_7(x),x=0..15,y=-0.02..1.1,title="t = 6/8*tau",color=red,thickness=3);
plot(u_8(x),x=0..15,y=-0.02..1.1,title="t = 7/8*tau",color=red,thickness=3);

[Maple Plot]

[Maple Plot]

[Maple Plot]

[Maple Plot]

[Maple Plot]

[Maple Plot]

[Maple Plot]

[Maple Plot]

  Теплопроводность в конечном стержне

Рассмотрим процесс распространения тепла в полубесконечном стержне. Для этого решается однородное уравнение

diff(u(t,x),t) = a^2*diff(u(t,x),`$`(x,2))  

с начальным условием

u(0,x) = f(x)

и граничными условиями:

k*diff(u(t,0),x) = h1*(u(t,0)-T1)   

-k*diff(u(t,L),x) = h2*(u(t,L)-T2)   

( k  - коэффициент теплопроводности, h1  и h2  - коэффициенты теплообмена на концах стержня,   T1  и T2  - темпетатуры на концах стержня).

>    restart;

Однородное уравнение и его решение методом разделения переменных :

>    PDE:=diff(u(t,x),t)=a^2*diff(u(t,x),x,x);
struc:=pdsolve(PDE,HINT=T(t)*X(x));

PDE := diff(u(t,x),t) = a^2*diff(u(t,x),`$`(x,2))

struc := `&where`(u(t,x) = T(t)*X(x),[{diff(X(x),`$`(x,2)) = _c[1]*X(x)/a^2, diff(T(t),t) = _c[1]*T(t)}])

>    dsolve(diff(T(t),t)=_c[1]*T(t));
dsolve(diff(X(x),`$`(x,2))=_c[1]*X(x)/a^2);

T(t) = _C1*exp(_c[1]*t)

X(x) = _C1*exp(_c[1]^(1/2)/a*x)+_C2*exp(-_c[1]^(1/2)/a*x)

Сделаем замену постоянной разделения переменных:

_c[1]  = = - lambda^2

>    dsolve(diff(T(t),t)=-lambda^2*T(t)*a^2);
dsolve(diff(X(x),`$`(x,2))=-lambda^2*X(x));

T(t) = _C1*exp(-lambda^2*a^2*t)

X(x) = _C1*sin(lambda*x)+_C2*cos(lambda*x)

В результате общее решение имеет вид:

>    u(t,x):=(C1*sin(lambda*x)+C2*cos(lambda*x))*exp(-lambda^2*a^2*t);

u(t,x) := (C1*sin(lambda*x)+C2*cos(lambda*x))*exp(-lambda^2*a^2*t)

>    restart;

Начальное условие имеет вид:

u(0,x) = f(x) :

Граничные условия имеют вид ( k  - коэффициент теплопроводности, h1  и h2  - коэффициенты теплообмена на концах стержня,   T1  и T2  - темпетатуры на концах стержня)

k*diff(u(t,0),x) = h1*(u(t,0)-T1)   

-k*diff(u(t,L),x) = h2*(u(t,L)-T2)   

>    k*diff(u(t,x),x)=h1*(u(t,x)-T1);
-k*diff(u(t,x),x)=h2*(u(t,x)-T2);

k*diff(u(t,x),x) = h1*(u(t,x)-T1)

-k*diff(u(t,x),x) = h2*(u(t,x)-T2)

Чтобы применить метод Фурье, необходимо свести исходную задачу к случаю однородных граничных условий.

Для этого введем функцию U(t,x) :

>    u(t,x):=U(t,x)+kappa+sigma*x;

u(t,x) := U(t,x)+kappa+sigma*x

Здесь kappa  и sigma  - постоянные коэффициенты.

>    u_x(t,x):=diff(u(t,x),x);

u_x(t,x) := diff(U(t,x),x)+sigma

>    u_x(t,x) := U_x(t,x) +sigma;

u_x(t,x) := U_x(t,x)+sigma

Гричные условия при этом запишутся:

>    subs(x=0,k*u_x(t,x)=h1*(u(t,x)-T1));
subs(x=L,-k*u_x(t,x)=h2*(u(t,x)-T2));

k*(U_x(t,0)+sigma) = h1*(U(t,0)+kappa-T1)

-k*(U_x(t,L)+sigma) = h2*(U(t,L)+kappa+sigma*L-T2)

Поскольку для U(t,x)  предполагаются однородные граничные условия, получаем:

>    k*sigma=h1*(kappa-T1);
-k*sigma=h2*(kappa+sigma*L-T2);

k*sigma = h1*(kappa-T1)

-k*sigma = h2*(kappa+sigma*L-T2)

Отсюда имеем:

>    solve({k*sigma=h1*(kappa-T1),-k*sigma=h2*(kappa+sigma*L-T2)},{kappa,sigma});

{kappa = (k*h2*T2+k*h1*T1+h2*L*h1*T1)/(k*h2+k*h1+h2*L*h1), sigma = h1*h2*(T2-T1)/(k*h2+k*h1+h2*L*h1)}

В этом случае граничные условия для U(t,x)  действительно примут вид однородных:

>    simplify(subs({x = 0, kappa = (k*h2*T2-k*h1*T1+h2*L*h1*T1)/(k*h2-k*h1+h2*L*h1), sigma = -h1*h2*(-T2+T1)/(k*h2-k*h1+h2*L*h1)},(U_x(t,0)+sigma-h1*(U(t,0)+kappa-T1)/k)*k = 0)); simplify(subs({x = 0, kappa = (k*h2*T2-k*h1*T1+h2*L*h1*T1)/(k*h2-k*h1+h2*L*h1), sigma = -h1*h2*(-T2+T1)/(k*h2-k*h1+h2*L*h1)},(U_x(t,L)-sigma+h2*(U(t,L)+kappa+sigma*L-T2)/k)*k = 0));

-U(t,0)*h1+U_x(t,0)*k = 0

U(t,L)*h2+U_x(t,L)*k = 0

Начальное условие для U(t,x)  запишется:

>    u(t,x):=U(t,x)+kappa+sigma*x;
subs(t=0,u(t,x)=f(x));

u(t,x) := U(t,x)+kappa+sigma*x

U(0,x)+kappa+sigma*x = f(x)

или

>    F(x)=f(x)-kappa-sigma*x;
subs(t=0,U(t,x)=F(x));

F(x) = f(x)-kappa-sigma*x

U(0,x) = F(x)

При этом функция U(t,x)  удовлетворяет тому же уравнению, что и u(t,x) :

>    u(t,x):=U(t,x)+kappa+sigma*x;
diff(u(t,x),t)=a^2*diff(u(t,x),x,x);
diff(U(t,x),t)=a^2*diff(U(t,x),x,x);

u(t,x) := U(t,x)+kappa+sigma*x

diff(U(t,x),t) = a^2*diff(U(t,x),`$`(x,2))

diff(U(t,x),t) = a^2*diff(U(t,x),`$`(x,2))

Поэтому для функция U(t,x)  общее решение имеет вид:

>    U(t,x):=(C1*sin(lambda*x)+C2*cos(lambda*x))*exp(-lambda^2*a^2*t);

U(t,x) := (C1*sin(lambda*x)+C2*cos(lambda*x))*exp(-lambda^2*a^2*t)

>    U_x(t,x):=diff(U(t,x),x);

U_x(t,x) := (C1*cos(lambda*x)*lambda-C2*sin(lambda*x)*lambda)*exp(-lambda^2*a^2*t)

Учтем однородные граничные условия для U(t,x) :

>    eval(subs(x=0,U(t,x)*k=h1*U_x(t,x)));
eval(subs(x=L,U(t,x)*k=-h2*U_x(t,x)));

C2*exp(-lambda^2*a^2*t)*k = h1*C1*lambda*exp(-lambda^2*a^2*t)

(C1*sin(lambda*L)+C2*cos(lambda*L))*exp(-lambda^2*a^2*t)*k = -h2*(C1*cos(lambda*L)*lambda-C2*sin(lambda*L)*lambda)*exp(-lambda^2*a^2*t)

>    solve(C2*k=h1*C1*lambda,C1);
solve(C1*sin(lambda*L)+C2*cos(lambda*L)*k=-h2*(C1*cos(lambda*L)*lambda-C2*sin(lambda*L)*lambda),C1);

C2*k/h1/lambda

C2*(-cos(lambda*L)*k+h2*sin(lambda*L)*lambda)/(sin(lambda*L)+h2*cos(lambda*L)*lambda)

Отсюда имеем уравнение, определяющее lambda :

>    k/h1/lambda=-(cos(lambda*L)*k-h2*sin(lambda*L)*lambda)/(sin(lambda*L)+h2*cos(lambda*L)*lambda);

k/h1/lambda = -(cos(lambda*L)*k-h2*sin(lambda*L)*lambda)/(sin(lambda*L)+h2*cos(lambda*L)*lambda)

>    k/h1/lambda = -(k-h2*tan(lambda*L)*lambda)/(tan(lambda*L)+h2*lambda);

k/h1/lambda = -(k-h2*tan(lambda*L)*lambda)/(tan(lambda*L)+h2*lambda)

>    solve(k/h1/lambda = -(k-h2*G*lambda)/(G+h2*lambda), G);

lambda*k*(h2+h1)/(-k+h1*lambda^2*h2)

>    tan(lambda*L)=-k*lambda*(h1+h2)/(k-h1*lambda^2*h2);

tan(lambda*L) = -k*lambda*(h2+h1)/(k-h1*lambda^2*h2)

Рассмотрим несколько режимов.

1.   Концы стержня в одинаковом режиме; концы стержня теплоизолированы:

>    restart;

>    subs({h1=0, h2=0},tan(lambda*L) = -k*lambda*(h1+h2)/(k-h1*lambda^2*h2));

tan(lambda*L) = 0

2. Концы стержня в одинаковом режиме; температуры на концах постоянны:

>    restart;
limit(limit(tan(lambda*L) = -k*lambda*(h1+h2)/(k-h1*lambda^2*h2), h1=infinity), h2=infinity);

tan(lambda*L) = 0

Значит, при одинаковых режимах на концах стержня lambda  удовлетворяет уравнению:

tan(lambda*L) = 0 .

Откуда получаем:

>    _EnvAllSolutions := true:
solve(tan(lambda*L)=0,lambda);

Pi*_Z1/L

или, в обычном виде,

>    lambda=Pi*n/L;

lambda = Pi*n/L

3. Концы стержня в разных режимах; один конец стержня теплоизолирован, температура на втором конце постоянна:

>    restart;
limit(tan(lambda*L) = -k*lambda*(h1+h2)/(k-h1*lambda^2*h2), h1=0);

tan(lambda*L) = -lambda*h2

При h2 --> infinity  имеем:  

>    cot(lambda*L)=0;

cot(lambda*L) = 0

>    _EnvAllSolutions := true:
solve(cot(lambda*L)=0,lambda);

1/2*Pi*(1+2*_Z1)/L

или, в обычном виде,

>    lambda=1/2*Pi*(1+2*n)/L;

lambda = 1/2*Pi*(1+2*n)/L

Для симметричного случая результат аналогичен.

Таим образом, общее решение для U(t,x) , соответствующее параметру n  имеет вид:

>    restart;
U[n](t,x):=(C1[n]*sin(lambda[n]*x)+C2[n]*cos(lambda[n]*x))*exp(-lambda[n]^2*a^2*t);

U[n](t,x) := (C1[n]*sin(lambda[n]*x)+C2[n]*cos(lambda[n]*x))*exp(-lambda[n]^2*a^2*t)

Теперь определим коэффициенты и выпишем общие решения.

1.   Концы стержня в одинаковом режиме; концы стержня теплоизолированы:

>    restart;

>    lambda[n]:=Pi*n/L;
U[n](t,x):=(C1[n]*sin(lambda[n]*x)+C2[n]*cos(lambda[n]*x))*exp(-lambda[n]^2*a^2*t);
U_x[n](t,x):=diff(U[n](t,x),x);

lambda[n] := Pi*n/L

U[n](t,x) := (C1[n]*sin(Pi*n/L*x)+C2[n]*cos(Pi*n/L*x))*exp(-Pi^2*n^2/L^2*a^2*t)

U_x[n](t,x) := (C1[n]*cos(Pi*n/L*x)*Pi*n/L-C2[n]*sin(Pi*n/L*x)*Pi*n/L)*exp(-Pi^2*n^2/L^2*a^2*t)

>    eval(subs(x=0,U_x[n](t,x)*k=0));
eval(subs(x=L,U_x[n](t,x)*k=0));

C1[n]*Pi*n/L*exp(-Pi^2*n^2/L^2*a^2*t)*k = 0

(C1[n]*cos(Pi*n)*Pi*n/L-C2[n]*sin(Pi*n)*Pi*n/L)*exp(-Pi^2*n^2/L^2*a^2*t)*k = 0

>    simplify((C1[n]*cos(Pi*n)*Pi*n/L-C2[n]*sin(Pi*n)*Pi*n/L)*exp(-Pi^2*n^2/L^2*a^2*t)*k = 0) assuming n::integer;

C1[n]*(-1)^n*Pi*n/L*exp(-Pi^2*n^2/L^2*a^2*t)*k = 0

Откуда:

C1[n] = 0  

>    U[n](t,x):=C2[n]*cos(lambda[n]*x)*exp(-lambda[n]^2*a^2*t);

U[n](t,x) := C2[n]*cos(Pi*n/L*x)*exp(-Pi^2*n^2/L^2*a^2*t)

Общее решение имеемт вид:

>    U(t,x):=sum(U[n](t,x), n=0..infinity);

U(t,x) := sum(C2[n]*cos(Pi*n/L*x)*exp(-Pi^2*n^2/L^2*a^2*t),n = 0 .. infinity)

>    eval(subs(t=0,U(t,x)=F(x)));

sum(C2[n]*cos(Pi*n/L*x),n = 0 .. infinity) = F(x)

Поэтому коэффициенты C2[n]  определяются согласно формулам преобразования Фурье:

>    C2[n]:=(2/L)*int(F(xi)*cos(Pi*n/L*xi), xi=0..L);

C2[n] := 2/L*int(F(xi)*cos(Pi*n/L*xi),xi = 0 .. L)

Выпишем общее решение.

>    F(xi):=f(xi);
U(t,x):=sum(C2[n]*cos(Pi*n/L*x)*exp(-Pi^2*n^2/L^2*a^2*t),n=0..infinity);

F(xi) := f(xi)

U(t,x) := sum(2/L*cos(Pi*n/L*x)*exp(-Pi^2*n^2/L^2*a^2*t)*int(f(xi)*cos(Pi*n/L*xi),xi = 0 .. L),n = 0 .. infinity)

Таким образом, общее решение имеет вид:

>    u(t,x):=subs(F(xi)=f(xi),U(t,x));

u(t,x) := sum(2/L*cos(Pi*n/L*x)*exp(-Pi^2*n^2/L^2*a^2*t)*int(f(xi)*cos(Pi*n/L*xi),xi = 0 .. L),n = 0 .. infinity)

2.   Концы стержня в разных режимах.

>    restart;

>    lambda[n]:=Pi*n/L;
U[n](t,x):=(C1[n]*sin(lambda[n]*x)+C2[n]*cos(lambda[n]*x))*exp(-lambda[n]^2*a^2*t);

lambda[n] := Pi*n/L

U[n](t,x) := (C1[n]*sin(Pi*n/L*x)+C2[n]*cos(Pi*n/L*x))*exp(-Pi^2*n^2/L^2*a^2*t)

>    eval(subs(x=0,U[n](t,x)*k=0));
eval(subs(x=L,U[n](t,x)*k=0));

C2[n]*exp(-Pi^2*n^2/L^2*a^2*t)*k = 0

(C1[n]*sin(Pi*n)+C2[n]*cos(Pi*n))*exp(-Pi^2*n^2/L^2*a^2*t)*k = 0

>    simplify((C1[n]*sin(Pi*n)+C2[n]*cos(Pi*n))*exp(-Pi^2*n^2/L^2*a^2*t)*k = 0) assuming n::integer;

C2[n]*(-1)^n*exp(-Pi^2*n^2/L^2*a^2*t)*k = 0

Откуда:

C2[n] = 0  

>    U[n](t,x):=C1[n]*sin(lambda[n]*x)*exp(-lambda[n]^2*a^2*t);

U[n](t,x) := C1[n]*sin(Pi*n/L*x)*exp(-Pi^2*n^2/L^2*a^2*t)

Общее решение имеемт вид:

>    U(t,x):=sum(U[n](t,x), n=0..infinity);

U(t,x) := sum(C1[n]*sin(Pi*n/L*x)*exp(-Pi^2*n^2/L^2*a^2*t),n = 0 .. infinity)

>    eval(subs(t=0,U(t,x)=F(x)));

sum(C1[n]*sin(Pi*n/L*x),n = 0 .. infinity) = F(x)

Поэтому коэффициенты C2[n]  определяются согласно формклам преобразования Фурье:

>    C1[n]:=(2/L)*int(F(xi)*cos(Pi*n/L*xi), xi=0..L);

C1[n] := 2/L*int(F(xi)*cos(Pi*n/L*xi),xi = 0 .. L)

Выпишем общее решение.

>    F(xi):=f(xi);
U(t,x) := sum(C1[n]*sin(Pi*n/L*x)*exp(-Pi^2*n^2/L^2*a^2*t),n =0.. infinity);

F(xi) := f(xi)

U(t,x) := sum(2/L*sin(Pi*n/L*x)*exp(-Pi^2*n^2/L^2*a^2*t)*int(f(xi)*cos(Pi*n/L*xi),xi = 0 .. L),n = 0 .. infinity)

Таким образом, общее решение имеет вид:

>    u(t,x):=U(t,x);

u(t,x) := sum(2/L*sin(Pi*n/L*x)*exp(-Pi^2*n^2/L^2*a^2*t)*int(f(xi)*cos(Pi*n/L*xi),xi = 0 .. L),n = 0 .. infinity)

3.   Концы стержня в разных режимах.

>    restart;

>    lambda[n]:=1/2*Pi*(1+2*n)/L;
U[n](t,x):=(C1[n]*sin(lambda[n]*x)+C2[n]*cos(lambda[n]*x))*exp(-lambda[n]^2*a^2*t);
U_x[n](t,x):=diff(U[n](t,x),x);

lambda[n] := 1/2*Pi*(1+2*n)/L

U[n](t,x) := (C1[n]*sin(1/2*Pi*(1+2*n)/L*x)+C2[n]*cos(1/2*Pi*(1+2*n)/L*x))*exp(-1/4*Pi^2*(1+2*n)^2/L^2*a^2*t)

U_x[n](t,x) := (1/2*C1[n]*cos(1/2*Pi*(1+2*n)/L*x)*Pi*(1+2*n)/L-1/2*C2[n]*sin(1/2*Pi*(1+2*n)/L*x)*Pi*(1+2*n)/L)*exp(-1/4*Pi^2*(1+2*n)^2/L^2*a^2*t)
U_x[n](t,x) := (1/2*C1[n]*cos(1/2*Pi*(1+2*n)/L*x)*Pi*(1+2*n)/L-1/2*C2[n]*sin(1/2*Pi*(1+2*n)/L*x)*Pi*(1+2*n)/L)*exp(-1/4*Pi^2*(1+2*n)^2/L^2*a^2*t)

>    eval(subs(x=0,U_x[n](t,x)*k=0));
eval(subs(x=L,U[n](t,x)*k=0));

1/2*C1[n]*Pi*(1+2*n)/L*exp(-1/4*Pi^2*(1+2*n)^2/L^2*a^2*t)*k = 0

(C1[n]*sin(1/2*Pi*(1+2*n))+C2[n]*cos(1/2*Pi*(1+2*n)))*exp(-1/4*Pi^2*(1+2*n)^2/L^2*a^2*t)*k = 0

>    simplify((C1[n]*sin(1/2*Pi*(1+2*n))+C2[n]*cos(1/2*Pi*(1+2*n)))*exp(-1/4*Pi^2*(1+2*n)^2/L^2*a^2*t)*k = 0) assuming n::integer;

C1[n]*(-1)^n*exp(-1/4*Pi^2*(1+2*n)^2/L^2*a^2*t)*k = 0

Откуда:

C1[n] = 0  

>    U[n](t,x):=C2[n]*cos(lambda[n]*x)*exp(-lambda[n]^2*a^2*t);

U[n](t,x) := C2[n]*cos(1/2*Pi*(1+2*n)/L*x)*exp(-1/4*Pi^2*(1+2*n)^2/L^2*a^2*t)

Общее решение имеемт вид:

>    U(t,x):=sum(U[n](t,x), n=1..infinity);

U(t,x) := sum(C2[n]*cos(1/2*Pi*(1+2*n)/L*x)*exp(-1/4*Pi^2*(1+2*n)^2/L^2*a^2*t),n = 1 .. infinity)

>    eval(subs(t=0,U(t,x)=F(x)));

sum(C2[n]*cos(1/2*Pi*(1+2*n)/L*x),n = 1 .. infinity) = F(x)

Поэтому коэффициенты C2[n]  определяются согласно формклам преобразования Фурье:

>    C2[n]:=(2/L)*int(F(xi)*cos(1/2*Pi*(1+2*n)/L*xi), xi=0..L);

C2[n] := 2/L*int(F(xi)*cos(1/2*Pi*(1+2*n)/L*xi),xi = 0 .. L)

Выпишем общее решение.

>    h1:=0;
sigma:= -h1*h2*(-T2+T1)/(k*h2+k*h1+h2*L*h1);
kappa:= limit((k*h2*T2+k*h1*T1+h2*L*h1*T1)/(k*h2+k*h1+h2*L*h1), h2=infinity);
F(xi):=f(xi)-kappa-sigma*xi;

U(t,x) := sum(C2[n]*cos(1/2*Pi*(1+2*n)/L*x)*exp(-1/4*Pi^2*(1+2*n)^2/L^2*a^2*t),n =0..infinity);

h1 := 0

sigma := 0

kappa := T2

F(xi) := f(xi)-T2

U(t,x) := sum(2/L*cos(1/2*Pi*(1+2*n)/L*x)*exp(-1/4*Pi^2*(1+2*n)^2/L^2*a^2*t)*int((f(xi)-T2)*cos(1/2*Pi*(1+2*n)/L*xi),xi = 0 .. L),n = 0 .. infinity)

Таким образом, общее решение имеет вид:

>    u(t,x):=U(t,x)+kappa+sigma*x;

u(t,x) := sum(2/L*cos(1/2*Pi*(1+2*n)/L*x)*exp(-1/4*Pi^2*(1+2*n)^2/L^2*a^2*t)*int((f(xi)-T2)*cos(1/2*Pi*(1+2*n)/L*xi),xi = 0 .. L),n = 0 .. infinity)+T2
u(t,x) := sum(2/L*cos(1/2*Pi*(1+2*n)/L*x)*exp(-1/4*Pi^2*(1+2*n)^2/L^2*a^2*t)*int((f(xi)-T2)*cos(1/2*Pi*(1+2*n)/L*xi),xi = 0 .. L),n = 0 .. infinity)+T2

  ПРИМЕР 1

>    restart;

Решить однородное уравнение

diff(u(t,x),t) = a^2*diff(u(t,x),`$`(x,2))  

с граничным условием первого типа и начальным условием

u(0,x) = f(x) ,

где функция f(x)  задана в виде:  

>    T0:=1; a:=1;L:=12;
f(x):=x->piecewise(x<L/2,T0, x<L,0);

T0 := 1

a := 1

L := 12

f(x) := proc (x) options operator, arrow; piecewise(x < 1/2*L,T0,x < L,0) end proc

>    plot(f(x),0..12,-0.1..1.1, numpoints=400,color=blue,thickness=3);

[Maple Plot]

>    restart;
f(xi):=xi->piecewise(xi<L/2,T0, xi<L,0);

f(xi) := proc (xi) options operator, arrow; piecewise(xi < 1/2*L,T0,xi < L,0) end proc

Для решения воспользуемся полученной в пункте 1.3. (граничное условие 1) формулой:

>    C2_0 := 2/L*int(T0,xi = 0 .. L/2);
u(t,x):=sum(2/L*cos(Pi*n/L*x)*exp(-Pi^2*n^2/L^2*a^2*t)*int(T0*cos(Pi*n/L*xi),xi=0..L/2),n = 0..infinity);

C2_0 := T0

u(t,x) := sum(2*cos(Pi*n/L*x)*exp(-Pi^2*n^2/L^2*a^2*t)*sin(1/2*Pi*n)*T0/Pi/n,n = 0 .. infinity)

Поскольку

sin(Pi*n) = 0  при n  --> 2*n

sin(Pi*n) = (-1)^n  при n  --> 2*n+1

Решение уравнения:

>    u(t,x):=C2_0/2+sum(2*(-1)^n*cos(Pi*(2*n+1)/L*x)*exp(-Pi^2*(2*n+1)^2/L^2*a^2*t)*T0/Pi/(2*n+1),n=0..infinity);

u(t,x) := 1/2*T0+sum(2*(-1)^n*cos(Pi*(2*n+1)/L*x)*exp(-Pi^2*(2*n+1)^2/L^2*a^2*t)*T0/Pi/(2*n+1),n = 0 .. infinity)

>    with(plots):
T0:=1; a:=1;L:=12;
u(t,x):=1/2*T0+sum(2*(-1)^n*cos(Pi*(2*n+1)/L*x)*exp(-Pi^2*(2*n+1)^2/L^2*a^2*t)*T0/Pi/(2*n+1),n=0..1000):

Warning, the name changecoords has been redefined

T0 := 1

a := 1

L := 12

Представим полученные решения в виде двумерных анимированных графиков:

>    animate(plot,[u(t,x),x=0..12, y=-0.1..1.1], t=0.0001..30, frames=30,thickness=3);

[Maple Plot]

  ПРИМЕР 2

>    restart;

Решить однородное уравнение

diff(u(t,x),t) = a^2*diff(u(t,x),`$`(x,2))  

с граничным условием второго типа и начальным условияем

u(0,x) = f(x) ,

где функция f(x)  задана в виде:  

>    a:=1;L:=12;T0:=1;
f(x):=x->piecewise(x<L/2,2*T0*x/L,x<L,2*T0*(L-x)/L);

a := 1

L := 12

T0 := 1

f(x) := proc (x) options operator, arrow; piecewise(x < 1/2*L,2*T0*x/L,x < L,2*T0*(L-x)/L) end proc

>    plot(f(x),0..12,-0.1..1.1, numpoints=400,color=blue,thickness=3);

[Maple Plot]

>    restart;
f(xi):=xi->piecewise(xi<L/2,2*T0*xi/L,xi<L,2*T0*(L-xi)/L);

f(xi) := proc (xi) options operator, arrow; piecewise(xi < 1/2*L,2*T0*xi/L,xi < L,2*T0*(L-xi)/L) end proc

Для решения воспользуемся полученной в пункте 1.3. (граничное условие 2) формулой:

>    C2_0:=2/L*int(2*T0*xi/L,xi=0..L/2)+2/L*int(2*T0*(L-xi)/L,xi =L/2.. L);
u(t,x):=simplify(sum(2/L*cos(Pi*n/L*x)*exp(-Pi^2*n^2/L^2*a^2*t)*(int(2*T0*xi/L*cos(Pi*n/L*xi),xi= 0..L/2)+int(2*T0*(L-xi)/L*cos(Pi*n/L*xi),xi=L/2..L)),n=1..infinity));

C2_0 := T0

u(t,x) := sum(4*cos(Pi*n/L*x)*exp(-Pi^2*n^2/L^2*a^2*t)*T0*(-1+2*cos(1/2*Pi*n)-(-1)^n)/Pi^2/n^2,n = 1 .. infinity)

Поскольку

cos(Pi*n/2) = 0  при n  --> 2*(n-1)

cos(Pi*n/2) = (-1)^n  при n  --> 2*n

n  --> 4*n+2

Решение уравнения:

>    u(t,x):=C2_0/2-sum(16*cos(Pi*(4*n+2)/L*x)*exp(-Pi^2*(4*n+2)^2/(L^2)*a^2*t)*T0/(Pi^2)/((4*n+2)^2),n =0..infinity);

u(t,x) := 1/2*T0-sum(16*cos(Pi*(4*n+2)/L*x)*exp(-Pi^2*(4*n+2)^2/L^2*a^2*t)*T0/Pi^2/(4*n+2)^2,n = 0 .. infinity)

>    with(plots):
a:=1;L:=12;T0:=1;
u(t,x):=1/2*T0-sum(16*cos(Pi*(4*n+2)/L*x)*exp(-Pi^2*(4*n+2)^2/L^2*a^2*t)*T0/Pi^2/(4*n+2)^2,n=0..222):

Warning, the name changecoords has been redefined

a := 1

L := 12

T0 := 1

Представим полученные решения в виде двумерных анимированных графиков:

>    animate(plot,[u(t,x),x=0..12, y=-0.1..1.1], t=0..15, frames=30,thickness=3);

[Maple Plot]

 ПРИМЕР 3

>    restart;

Решить однородное уравнение

diff(u(t,x),t) = a^2*diff(u(t,x),`$`(x,2))  

с граничным условием третьего типа и начальным условияем

u(0,x) = f(x) ,

где функция f(x)  задана в виде:  

>    T0:=1; a:=1;L:=12;
f(x):=x->piecewise(x<L,T0);

T0 := 1

a := 1

L := 12

f(x) := proc (x) options operator, arrow; piecewise(x < L,T0) end proc

>    plot(f(x),0..13,-0.1..1.1, numpoints=400,color=blue,thickness=3);

[Maple Plot]

>    restart;
f(x):=x->piecewise(x<L,T0);

f(x) := proc (x) options operator, arrow; piecewise(x < L,T0) end proc

Для решения воспользуемся полученной в пункте 1.3. (граничное условие 3) формулой:

>    u(t,x):=sum(2/L*cos(1/2*Pi*(1+2*n)/L*x)*exp(-1/4*Pi^2*(1+2*n)^2/L^2*a^2*t)*int((T0-T2)*cos(1/2*Pi*(1+2*n)/L*xi),xi = 0 .. L),n = 1 .. infinity)+T2;

u(t,x) := sum(4*cos(1/2*Pi*(1+2*n)/L*x)*exp(-1/4*Pi^2*(1+2*n)^2/L^2*a^2*t)*cos(Pi*n)*(T0-T2)/Pi/(1+2*n),n = 1 .. infinity)+T2

Поскольку

cos(Pi*n) = (-1)^n  

Решение уравнения:

>    u(t,x):=sum(4*cos(1/2*Pi*(1+2*n)/L*x)*exp(-1/4*Pi^2*(1+2*n)^2/L^2*a^2*t)*(-1)^n*(T0-T2)/Pi/(1+2*n),n=0..infinity)+T2;

u(t,x) := sum(4*cos(1/2*Pi*(1+2*n)/L*x)*exp(-1/4*Pi^2*(1+2*n)^2/L^2*a^2*t)*(-1)^n*(T0-T2)/Pi/(1+2*n),n = 0 .. infinity)+T2

>    with(plots):
T0:=1; a:=1.5;L:=12;T2:=T0/4;
u(t,x):=sum(4*cos(1/2*Pi*(1+2*n)/L*x)*exp(-1/4*Pi^2*(1+2*n)^2/L^2*a^2*t)*(-1)^n*(T0-T2)/Pi/(1+2*n),n=0..1000)+T2:

Warning, the name changecoords has been redefined

T0 := 1

a := 1.5

L := 12

T2 := 1/4

Представим полученные решения в виде двумерных анимированных графиков:

>    animate(plot,[u(t,x),x=0..12, y=-0.1..1.1], t=0.0001..30, frames=30,thickness=3);

[Maple Plot]

>   

>   

>   

>