специальные функции
Цилиндрические функции
> | restart; |
> | with(PDEtools); with(plots); |
Warning, the name changecoords has been redefined
Запишем уравнение Бесселя
> | 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); |
видим, что решения дифференциального уравнения Бесселя (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); |
В 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]); |
> | animate(J(v,x),x=0..10,v=0..4,frames=40); animate(BesselJ(v,x),x=0..10,v=0..4,frames=40); |
> | plot3d(J(v,x),x=0..10,v=0..5); plot3d(BesselJ(v,x),x=0..10,v=0..5); |
> | 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); |
> |
> | plot([J1(1,x),J1(2,x),J1(3,x),J1(4,x)],x=-5..5); |
> | plot([BesselI(1,x),BesselI(2,x),BesselI(3,x),BesselI(4,x)],x=-5..5,y=-1..1); |
> | N:=(v,x)->(1/sin(Pi*v))*(J(v,x)*cos(Pi*v)-J1(v,x)); v<>0; |
> | plot([BesselY(1,x),BesselY(2,x),BesselY(3,x)],x=-1..10,y=-3..1,color=[red,blue,green]); |
Сферические функции
> | 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; |
> | a1:=pdsolve(PDE); |
> | 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; |
> | a2:=dchange(theta=arccos(x),a1); |
> | a2; |
> |
> | pde1:=(1-x^2)*(diff(Theta(theta),x$2))-2*x*(diff(Theta(theta),x))+lambda*Theta(theta)=0; |
> |
> | P:=(n,x)->(1/((2^n)*(factorial(n))))*(diff(((x^2-1)^n),x$n)); |
> | 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); |
> |
> | 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); |
> |
> | Pr:=(n,m,x)->((x^2-1)^(m/2))*diff(P(n,x),x$m); 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]); |
> | 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]); |
> |
Полиномы Лежандра
> | plot({LegendreP(0,x),LegendreP(1,x),LegendreP(2,x),LegendreP(3,x),LegendreP(4,x)},x=0..1); |
> | plot({LegendreQ(0,x),LegendreQ(1,x),LegendreQ(2,x),LegendreQ(3,x),LegendreQ(4,x)},x=1.5..5); |
Функция ошибки
функция оштбки (erf(x)) определяется:
> | u:=x->2/sqrt(Pi) * int(exp(-t^2), t=0..x); |
Дополнительная функция ошибки (erfc(x)) определяется как
> | u1:=x-> 1 - erf(x); |
> | u1_1:=x-> 1 - 2/Pi^(1/2) * int(exp(-t^2), t=0..x); |
Повторенные интегралы дополнительной функции ошибки определены (erfc(n, x))
> | u2:=(n, x)-> int(erfc(n-1,t), t=x..infinity); n >= 0; |
Воображаемая функция ошибки(erfi(x)) определена следующим образом
> | u3:=x->-I*erf(I*x) = 2/sqrt(Pi) * int(exp(t^2), t=0..x); |
Все эти функции являются целыми.
постоим их графики
> | plot(u(x),x=-3..3); plot(erf(x),x=-3..3); |
> | plot(erfc(x),x=-3..3); |
> | plot({erfc(0,x), erfc(1,x), erfc(2,x), erfc(3,x)}, x=-3..2); |
> | plot(erfi(x),x=-2..2); |
гиперболические уравнения
Формула Даламбера
Колебания бесконечной струны.
Рассмотрим свободные колебания бесконечной струны. Для этого решается однородное уравнение
с начальными условиями
,
.
> | restart; |
Однородное уравнение и его решение:
> | PDE:=diff(u(t,x),t,t)=a^2*diff(u(t,x),x,x); pdsolve(PDE); |
Переобозначение решений:
> | 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; |
> | int(diff(-a*U1(xi),xi)+diff(a*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))=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; |
Представление общего решения:
> | u(t,x):=simplify(subs(x=x-a*t,U1(x))+(subs(x=x+a*t,U2(x)))); |
> | 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 = x-a*t .. x+a*t)/a; |
Убедимся, что полученная функция удовлетворяет уравнению и начальным условиям.
Для этого подставим в уравнение и начальные условия:
> | 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)); |
ПРИМЕР 1
> | restart; |
Решить однородное уравнение
с начальными условиями
,
.
где функции и заданы в виде:
> | 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; |
> | plot(F(x),-16..16,-0.1..1.1, numpoints=400,color=blue,thickness=3); |
Для решения воспользуемся формулой Даламбера:
> | 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; |
> | 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))); |
Представим полученные решения в виде двумерных анимированных графиков:
> | 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
Представим полученное решение в виде двумерных графиков для нескольких моментов времени:
> | 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]); |
> |
ПРИМЕР 2
> | restart; |
Решить однородное уравнение
с начальными условиями
,
.
где функции и заданы в виде:
> | 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); |
> |
> | restart; |
> | F(x):=x->piecewise(x<l1,0, x<l2,alpha, x>L,0); 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))); |
Представим полученные решения в виде двумерных анимированных графиков:
> | 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
> |
ПРИМЕР 3
> | restart; |
Решить однородное уравнение
с начальными условиями
,
.
где функции и заданы в виде:
> | 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); |
> | restart; |
> | f(xi):=piecewise(xi<-L,0, xi<L,v0, xi>L,0); 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*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-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
> |
Колебания полубесконечной струны.
Рассмотрим свободные колебания полубесконечной струны. Для этого решается однородное уравнение
с начальными условиями
,
.
и граничным условием:
или граничным условием:
.
> | restart; |
Однородное уравнение и его решение:
> | PDE:=diff(u(t,x),t,t)=a^2*diff(u(t,x),x,x); pdsolve(PDE); |
Переобозначение решений:
> | 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; |
> | int(diff(-a*U1(xi),xi)+diff(a*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))=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; |
Представление общего решения:
> | u(t,x):=simplify(subs(x=x-a*t,U1(x))+(subs(x=x+a*t,U2(x)))); |
> | 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 = x-a*t .. x+a*t)/a; |
Убедимся, что полученная функция удовлетворяет уравнению и начальным условиям.
Для этого подставим в уравнение и начальные условия:
> | 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)); |
В случае, когда конец струны ( ) неподвижно закреплен, необходимо учесть граничное условие:
или граничное условие
.
Отсюда следует:
1. Для решения задачи на полуограниченной прямой с граничным условием
,
начальные данные надо продолжить на всю прямую нечетно:
Формула Даламбера 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)); |
2. Для решения задачи на полуограниченной пря-мой с граничным условием
начальные данные надо продолжить на всю прямую четно:
Формула Даламбера 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)); |
ПРИМЕР 1
> | restart; |
Решить однородное уравнение
с начальными условиями
,
.
где функции и заданы в виде:
> | 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; |
> | plot(F(x),0..5.25,-0.55..0.55, numpoints=400,color=blue,thickness=3); |
Для решения воспользуемся формулой Даламбера:
> | 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; |
> | 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))); |
Представим полученные решения в виде двумерных анимированных графиков:
> | 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
Представим полученное решение в виде двумерных графиков для нескольких моментов времени:
> | 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]); |
> |
ПРИМЕР 2
> | restart; |
Решить однородное уравнение
с начальными условиями
,
.
где функции и заданы в виде:
> | 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; |
> | plot(F(x),-5.25..5.25,-0.55..0.55, numpoints=400,color=blue,thickness=3); |
Для решения воспользуемся формулой Даламбера:
> | 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; |
> | 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)*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]); |
Представим полученные решения в виде двумерных анимированных графиков:
> | 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
Метод Фурье
Колебания конечной струны.
Рассмотрим свободные колебания конечной струны. Для этого решается однородное уравнение
с начальными условиями
,
.
и граничными условиями (струна закреплена с двух сторон)
,
,
> | restart; |
Однородное уравнение и его решение методом разделения переменных :
> | PDE:=diff(u(t,x),t,t)=a^2*diff(u(t,x),x,x); struc:=pdsolve(PDE,HINT=T(t)*X(x)); |
> | dsolve(diff(T(t),`$`(t,2)) = _c[1]*T(t)); dsolve(diff(X(x),`$`(x,2)) = _c[1]*X(x)/a^2); |
Сделаем замену постоянной разделения переменных:
= = -
> | dsolve(diff(T(t),`$`(t,2)) = -lambda^2*T(t)); dsolve(diff(X(x),`$`(x,2)) = -lambda^2*X(x)/a^2); |
Второе уравнение решим, учитывая первое граничное условие:
> | dsolve({diff(X(x),`$`(x,2)) = -lambda^2*X(x)/a^2, X(0)=0}, X(x)); |
Теперь учтем второе граничное условие:
> | _EnvAllSolutions := true: solve(sin(lambda*L/a)=0,lambda); |
или, в обычном виде,
> | 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); |
> | u[n](t,x):=T[n](t)*X[n](x); |
В результате общее решение имеет вид:
> | u(t,x):=Sum(u[n](t,x), n=1..infinity); |
Для определения коэффициентов и воспользуемся начальными условиями:
,
.
> | simplify(subs(t=0,u(t,x))=F(x)); simplify(subs(t=0,diff(u(t,x),t))=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); |
Наконец, выпишем общее решение а развернутом виде:
> | 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); |
ПРИМЕР 1
> | restart; |
Решить однородное уравнение
с однородными граничными условиями и начальными условиями
,
.
где функции и заданы в виде:
> | 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; |
> | plot(F(x),-0.15..1.15,-0.1..1.1, numpoints=400,color=blue,thickness=3); |
Для решения воспользуемся полученной в пункте 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; |
Коэффициенты разложения:
> | 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); |
Решение уравнения:
> | 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); |
> | 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); |
Представим полученные решения в виде двумерных анимированных графиков:
> | 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
Представим полученное решение в виде двумерных графиков для нескольких моментов времени:
> | 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]); |
ПРИМЕР 2
> | restart; |
Решить однородное уравнение
с однородными граничными условиями и начальными условиями
,
.
где функции и заданы в виде:
> | 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); |
> | plot(f(x),0..1,-0.1..1.1, numpoints=400, color=blue,thickness=3); |
Для решения воспользуемся полученной в пункте 1.2. формулой:
> | restart; |
> | F(x):=0; f(x):=x->piecewise(x<l1,0, x<l2,v0, x>L,0); |
Коэффициенты разложения:
> | 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); |
Решение уравнения:
> | 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); |
> | 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); |
Представим полученные решения в виде двумерных анимированных графиков:
> | 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
Представим полученное решение в виде двумерных графиков для нескольких моментов времени:
> | 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]); |
ПРИМЕР 3
> | restart; |
Решить однородное уравнение
с однородными граничными условиями и начальными условиями
,
.
где функции и заданы в виде:
> | 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; |
> | plot(F(x),-0.15..1.15,-0.1..1.1, numpoints=400, color=blue,thickness=3); |
Для решения воспользуемся полученной в пункте 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; |
Коэффициенты разложения:
> | 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); |
Решение уравнения:
> | 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); |
> | 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); |
Представим полученные решения в виде двумерных анимированных графиков:
> | 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
Представим полученное решение в виде двумерных графиков для нескольких моментов времени:
> | 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]); |
параболические уравнения
> | restart; |
> | with(PDETools): |
Задаем дифференциальное уравнение - уравнение теплопроводности.
> | PDE:=diff(u(x,t),t)-diff(u(x,t),x$2); |
Указываем правило, по которому будет произведена замена независимых переменных и функции.
> | tr:={x=eta*sqrt(tau),t=tau,u(x,t)=U(eta)}; |
С помощью функции dchange преобразуем дифференциальное уравнение.
> | PDEA:=dchange(tr,PDE,params=a,simplify); |
С помощью функции dsolve решаем полученное дифференциальное уравнение.
> | SOLD:=dsolve(PDEA); |
Выполняем обратное преобразование.
> | trback:={eta=x/sqrt(t),tau=t,U(eta)=u(x,t)}; |
> | SOLD1:=dchange(trback,SOLD); |
> | SOLD2:=subs(_C1=0,_C2=1,rhs(SOLD1)); |
> | u:=unapply(SOLD2,x,y); |
> | plot3d(u(x,t),x=0.0..1,t=0.0..1); |
> |
Теплопроводность в бесконечном стержне
Рассмотрим процесс распространения тепла в бесконечном стержне. Для этого решается однородное уравнение
с начальным условием
.
> | 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)); |
> | dsolve(diff(T(t),t)=_c[1]*T(t)); dsolve(diff(X(x),`$`(x,2))=_c[1]*X(x)/a^2); |
Сделаем замену постоянной разделения переменных:
= = -
> | dsolve(diff(T(t),t)=-lambda^2*T(t)*a^2); dsolve(diff(X(x),`$`(x,2))=-lambda^2*X(x)); |
В результате общее решение имеет вид:
> | u(t,x):=(C1*sin(lambda*x)+C2*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); |
В результате решение линейного обнородного уравнения можно представить в виде суперпозиции решений, зависящих от параметра :
> | u(t,x):=int(u[lambda](t,x), lambda=-infinity..infinity); |
Для определения коэффициентов и воспользуемся начальными условиями:
> | u_0(t,x):=eval(subs(t=0, u(t,x)))=f(x); |
Это выражение соответсвует разложению функции в интеграл Фурье:
> | f(x)=(1/(2*Pi))*int(int(f(xi)*cos(lambda*(xi-x)),xi=-infinity..infinity),lambda=-infinity..infinity); |
Значит, коэффициенты и выражаются:
> | 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); |
> | 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)); |
Полученное выражение можно преобразовать.
Для этого рассмотрим интеграл:
> | 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))); |
> | 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)= subs(v=(x-xi)/a/t^(1/2),1/a/t^(1/2)*Pi^(1/2)*exp(-1/4*v^2)); |
В результате решение примет вид:
> | u(t,x):=(1/(2*a*sqrt(Pi*t)))*int(f(xi)*exp(-1/4*(x-xi)^2/a^2/t),xi = -infinity .. infinity); |
ПРИМЕР 1
> | restart; |
Решить однородное уравнение
с начальным условияем
,
где функция задана в виде:
> | a:=1;L:=1;alpha:=1;l:=L/3; f(xi):=u0*exp(-gamma^2*xi^2); |
> | u0:=1;gamma:=0.5; plot(f(xi), xi=-15..15, color=red,thickness=3); |
Error, attempting to assign to `gamma` which is protected
Для решения воспользуемся полученной в пункте 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); |
> | u0:=1;beta:=0.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
Представим полученные решения в виде двумерных анимированных графиков:
> | animate(plot,[u(t,x),x=-15..15], t=0.0001..60, frames=30,thickness=3); |
Представим полученное решение в виде двумерных графиков для нескольких моментов времени:
> | 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); |
ПРИМЕР 2
> | restart; |
Решить однородное уравнение
с начальным условияем
,
где функция задана в виде:
> | 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); |
> | plot(f(x),-10..10,-0.1..1.1, numpoints=400,color=blue,thickness=3); |
> | restart; f(xi):=xi->piecewise(xi<-L,0, xi<0,alpha*(1+xi/L),xi<L,alpha*(1-xi/L), x>L,0); |
Для решения воспользуемся полученной в пункте 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)); |
> | 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
ПРИМЕР 3
> | restart; |
Решить однородное уравнение
с начальным условияем
,
где функция задана в виде:
> | a:=1;L:=2;alpha:=1; f(x):=x->piecewise(x<-L,0, x<L,alpha, x>L,0); |
> | plot(f(x),-10..10,-0.1..1.1, numpoints=400,color=blue,thickness=3); |
> | restart; |
> | f(xi):=xi->piecewise(xi<-L,0, xi<L,alpha, xi>L,0); |
Для решения воспользуемся полученной в пункте 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)); |
> | 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
Представим полученные решения в виде двумерных анимированных графиков:
> | animate(plot,[u(t,x),x=-15..15], t=0.0001..15, frames=30,thickness=3); |
Теплопроводность в полубесконечном стержне
Рассмотрим процесс распространения тепла в полубесконечном стержне. Для этого решается однородное уравнение
с начальным условием
и граничным условием:
1. Конец стержня в точке теплоизолирован:
.
или
2. Конец стержня в точке поддерживается при постоянной температуре:
> | restart; |
Однородное уравнение и его решение методом разделения переменных :
> | PDE:=diff(u(t,x),t)=a^2*diff(u(t,x),x,x); struc:=pdsolve(PDE,HINT=T(t)*X(x)); |
> | dsolve(diff(T(t),t)=_c[1]*T(t)); dsolve(diff(X(x),`$`(x,2))=_c[1]*X(x)/a^2); |
Сделаем замену постоянной разделения переменных:
= = -
> | dsolve(diff(T(t),t)=-lambda^2*T(t)*a^2); dsolve(diff(X(x),`$`(x,2))=-lambda^2*X(x)); |
В результате общее решение имеет вид:
> | u(t,x):=(C1*sin(lambda*x)+C2*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); |
В результате решение линейного обнородного уравнения можно представить в виде суперпозиции решений, зависящих от параметра :
> | u(t,x):=int(u[lambda](t,x), lambda=-infinity..infinity); |
Для определения коэффициентов и воспользуемся начальными условиями:
> | u_0(t,x):=eval(subs(t=0, u(t,x)))=f(x); |
Это выражение соответсвует разложению функции в интеграл Фурье:
> | f(x)=(1/(2*Pi))*int(int(f(xi)*cos(lambda*(xi-x)),xi=-infinity..infinity),lambda=-infinity..infinity); |
Значит, коэффициенты и выражаются:
> | 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); |
> | 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)); |
Error, (in depends/internal) too many levels of recursion
Полученное выражение можно преобразовать.
Для этого рассмотрим интеграл:
> | 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))); |
> | 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)= subs(v=(x-xi)/a/t^(1/2),1/a/t^(1/2)*Pi^(1/2)*exp(-1/4*v^2)); |
В результате решение примет вид:
> | u(t,x):=(1/(2*a*sqrt(Pi*t)))*int(f(xi)*exp(-1/4*(x-xi)^2/a^2/t),xi = -infinity .. infinity); |
В случае полубесконечного стержня необходимо учесть граничное условие в точке .
1 . Конец стержня в точке теплоизолирован:
.
В этом случае необходимо продолжить на отрицательную полуось четным образом:
= .
> | u_x(t,x):=diff(u(t,x),x); |
Сделаем замену переменной:
> | u0_x:=subs(x=0,u_x(t,x)); |
Здесь подинтегральная функция нечтна; поэтому интеграл равен нулю и граничное условие в точке выполнено.
При этом решение может быть записано в виде:
> | 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 . Конец стержня в точке поддерживается при постоянной температуре ( ):
.
Для решения этой задачи преобразуем граничное условие к однородному :
> | 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),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); |
Учитывая нечетность функции , получаем:
> | 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; |
где:
> | 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); |
Для вычисления этих интегралов сделаем замены:
, .
> | 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)); |
> | 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; |
> | Integr:=simplify(I1-I2); |
Таким образом, имеем:
> |
> | 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); |
ПРИМЕР 1
> | restart; |
Решить однородное уравнение
с граничным условием (конец стержня в точке теплоизолирован):
.
и начальным условияем
,
где функция задана в виде:
> | a:=1;l:=4;L:=6;alpha:=1; f(x):=x->piecewise(x<l,0, x<L,alpha, x>L,0); |
> | plot(f(x),0..10,-0.1..1.1, numpoints=400,color=blue,thickness=3); |
> | restart; f(xi):=xi->piecewise(xi<l,0, xi<L,alpha, xi>L,0); |
Для решения воспользуемся полученной в пункте 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)); |
> | 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
Представим полученные решения в виде двумерных анимированных графиков:
> | animate(plot,[u(t,x),x=0..15], t=0.00000001..12, frames=60,thickness=3); |
Представим полученное решение в виде двумерных графиков для нескольких моментов времени:
> | 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); |
ПРИМЕР 2
> | restart; |
Решить однородное уравнение
с граничным условием (конец стержня в точке поддерживается при постоянной температуре ( ):
и начальным условияем
,
где функция задана в виде:
> | T0:=0; a:=1;l:=4;L:=6;alpha:=1; f(x):=x->piecewise(x<l,T0, x<L,alpha+T0, x>L,0); |
> | plot(f(x),0..10,-0.1..1.1, numpoints=400,color=blue,thickness=3); |
> | restart; f(xi):=xi->piecewise(xi<l,T0, xi<L,alpha+T0, xi>L,0); |
Для решения воспользуемся полученной в пункте 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)); |
> | 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
Представим полученные решения в виде двумерных анимированных графиков:
> | animate(plot,[u(t,x),x=0..15, y=-0.1..1.1], t=0.0000001..12, frames=60,thickness=3); |
Представим полученное решение в виде двумерных графиков для нескольких моментов времени:
> | 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); |
Теплопроводность в конечном стержне
Рассмотрим процесс распространения тепла в полубесконечном стержне. Для этого решается однородное уравнение
с начальным условием
и граничными условиями:
( - коэффициент теплопроводности, и - коэффициенты теплообмена на концах стержня, и - темпетатуры на концах стержня).
> | restart; |
Однородное уравнение и его решение методом разделения переменных :
> | PDE:=diff(u(t,x),t)=a^2*diff(u(t,x),x,x); struc:=pdsolve(PDE,HINT=T(t)*X(x)); |
> | dsolve(diff(T(t),t)=_c[1]*T(t)); dsolve(diff(X(x),`$`(x,2))=_c[1]*X(x)/a^2); |
Сделаем замену постоянной разделения переменных:
= = -
> | dsolve(diff(T(t),t)=-lambda^2*T(t)*a^2); dsolve(diff(X(x),`$`(x,2))=-lambda^2*X(x)); |
В результате общее решение имеет вид:
> | u(t,x):=(C1*sin(lambda*x)+C2*cos(lambda*x))*exp(-lambda^2*a^2*t); |
> | restart; |
Начальное условие имеет вид:
:
Граничные условия имеют вид ( - коэффициент теплопроводности, и - коэффициенты теплообмена на концах стержня, и - темпетатуры на концах стержня)
> | 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)+kappa+sigma*x; |
Здесь и - постоянные коэффициенты.
> | u_x(t,x):=diff(u(t,x),x); |
> | 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*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}); |
В этом случае граничные условия для действительно примут вид однородных:
> | 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,x):=U(t,x)+kappa+sigma*x; subs(t=0,u(t,x)=f(x)); |
или
> | F(x)=f(x)-kappa-sigma*x; subs(t=0,U(t,x)=F(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):=(C1*sin(lambda*x)+C2*cos(lambda*x))*exp(-lambda^2*a^2*t); |
> | U_x(t,x):=diff(U(t,x),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))); |
> | 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); |
Отсюда имеем уравнение, определяющее :
> | 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); |
> | solve(k/h1/lambda = -(k-h2*G*lambda)/(G+h2*lambda), G); |
> | tan(lambda*L)=-k*lambda*(h1+h2)/(k-h1*lambda^2*h2); |
Рассмотрим несколько режимов.
1. Концы стержня в одинаковом режиме; концы стержня теплоизолированы:
> | restart; |
> | subs({h1=0, h2=0},tan(lambda*L) = -k*lambda*(h1+h2)/(k-h1*lambda^2*h2)); |
2. Концы стержня в одинаковом режиме; температуры на концах постоянны:
> | restart; limit(limit(tan(lambda*L) = -k*lambda*(h1+h2)/(k-h1*lambda^2*h2), h1=infinity), h2=infinity); |
Значит, при одинаковых режимах на концах стержня удовлетворяет уравнению:
.
Откуда получаем:
> | _EnvAllSolutions := true: solve(tan(lambda*L)=0,lambda); |
или, в обычном виде,
> | lambda=Pi*n/L; |
3. Концы стержня в разных режимах; один конец стержня теплоизолирован, температура на втором конце постоянна:
> | restart; limit(tan(lambda*L) = -k*lambda*(h1+h2)/(k-h1*lambda^2*h2), h1=0); |
При h2 --> имеем:
> | cot(lambda*L)=0; |
> | _EnvAllSolutions := true: solve(cot(lambda*L)=0,lambda); |
или, в обычном виде,
> | lambda=1/2*Pi*(1+2*n)/L; |
Для симметричного случая результат аналогичен.
Таим образом, общее решение для , соответствующее параметру имеет вид:
> | restart; 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); |
> | eval(subs(x=0,U_x[n](t,x)*k=0)); eval(subs(x=L,U_x[n](t,x)*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; |
Откуда:
> | U[n](t,x):=C2[n]*cos(lambda[n]*x)*exp(-lambda[n]^2*a^2*t); |
Общее решение имеемт вид:
> | U(t,x):=sum(U[n](t,x), n=0..infinity); |
> | eval(subs(t=0,U(t,x)=F(x))); |
Поэтому коэффициенты определяются согласно формулам преобразования Фурье:
> | 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); |
Таким образом, общее решение имеет вид:
> | u(t,x):=subs(F(xi)=f(xi),U(t,x)); |
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); |
> | eval(subs(x=0,U[n](t,x)*k=0)); eval(subs(x=L,U[n](t,x)*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; |
Откуда:
> | U[n](t,x):=C1[n]*sin(lambda[n]*x)*exp(-lambda[n]^2*a^2*t); |
Общее решение имеемт вид:
> | U(t,x):=sum(U[n](t,x), n=0..infinity); |
> | eval(subs(t=0,U(t,x)=F(x))); |
Поэтому коэффициенты определяются согласно формклам преобразования Фурье:
> | 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); |
Таким образом, общее решение имеет вид:
> | u(t,x):=U(t,x); |
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); |
> | eval(subs(x=0,U_x[n](t,x)*k=0)); eval(subs(x=L,U[n](t,x)*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; |
Откуда:
> | U[n](t,x):=C2[n]*cos(lambda[n]*x)*exp(-lambda[n]^2*a^2*t); |
Общее решение имеемт вид:
> | U(t,x):=sum(U[n](t,x), n=1..infinity); |
> | eval(subs(t=0,U(t,x)=F(x))); |
Поэтому коэффициенты определяются согласно формклам преобразования Фурье:
> | 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); |
Таким образом, общее решение имеет вид:
> | u(t,x):=U(t,x)+kappa+sigma*x; |
ПРИМЕР 1
> | restart; |
Решить однородное уравнение
с граничным условием первого типа и начальным условием
,
где функция задана в виде:
> | T0:=1; a:=1;L:=12; f(x):=x->piecewise(x<L/2,T0, x<L,0); |
> | plot(f(x),0..12,-0.1..1.1, numpoints=400,color=blue,thickness=3); |
> | restart; f(xi):=xi->piecewise(xi<L/2,T0, xi<L,0); |
Для решения воспользуемся полученной в пункте 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); |
Поскольку
при -->
при -->
Решение уравнения:
> | 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); |
> | 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
Представим полученные решения в виде двумерных анимированных графиков:
> | animate(plot,[u(t,x),x=0..12, y=-0.1..1.1], t=0.0001..30, frames=30,thickness=3); |
ПРИМЕР 2
> | restart; |
Решить однородное уравнение
с граничным условием второго типа и начальным условияем
,
где функция задана в виде:
> | a:=1;L:=12;T0:=1; f(x):=x->piecewise(x<L/2,2*T0*x/L,x<L,2*T0*(L-x)/L); |
> | plot(f(x),0..12,-0.1..1.1, numpoints=400,color=blue,thickness=3); |
> | restart; f(xi):=xi->piecewise(xi<L/2,2*T0*xi/L,xi<L,2*T0*(L-xi)/L); |
Для решения воспользуемся полученной в пункте 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)); |
Поскольку
при -->
при -->
-->
Решение уравнения:
> | 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); |
> | 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
Представим полученные решения в виде двумерных анимированных графиков:
> | animate(plot,[u(t,x),x=0..12, y=-0.1..1.1], t=0..15, frames=30,thickness=3); |
ПРИМЕР 3
> | restart; |
Решить однородное уравнение
с граничным условием третьего типа и начальным условияем
,
где функция задана в виде:
> | T0:=1; a:=1;L:=12; f(x):=x->piecewise(x<L,T0); |
> | plot(f(x),0..13,-0.1..1.1, numpoints=400,color=blue,thickness=3); |
> | restart; f(x):=x->piecewise(x<L,T0); |
Для решения воспользуемся полученной в пункте 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)*(-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
Представим полученные решения в виде двумерных анимированных графиков:
> | animate(plot,[u(t,x),x=0..12, y=-0.1..1.1], t=0.0001..30, frames=30,thickness=3); |
> |
> |
> |
> |