Aaltoyhtälö
K3/P3 to 8.12.05
Alustukset
> | restart: |
> | with(plots): setoptions3d(orientation=[-120,50],axes=box): |
Warning, the name changecoords has been redefined
> | read("e:\\ns05.mpl"); |
> |
Normaalimoodit
> | u:=(n,x,t)->cos(c*n*Pi*t/L)*sin(n*Pi*x/L); |
> | L:=2: c:=3: |
> | plot3d(u(1,x,t),x=0..L,t=0..5,axes=boxed); |
> | kuvax:=(n,t)->plot(u(n,x,t),x=0..L): |
> | kuvax(1,0); |
> | h:=0.05: N:=30: |
> | display(seq(kuvax(1,t),t=[seq(j*h,j=0..N)]),insequence=true); |
> | h:=0.02: N:=30: |
> | display(seq(kuvax(3,t),t=[seq(j*h,j=0..N)]),insequence=true); |
> | N:=60:h:=0.01:display(seq(kuvax(5,t),t=[seq(j*h,j=0..N)]),insequence=false); |
> | plot3d(u(3,x,t),x=0..L,t=0..1,axes=boxed,grid=[20,70]); |
Muuttujien erottelulla saatava ratkaisukaava
Otetaan seuraavaa esimerkkiä varten vain tapaus, jossa alkunopeus =0.
> | restart: |
> | with(plots): setoptions3d(orientation=[-120,50],axes=box): |
Warning, the name changecoords has been redefined
> | read("e:\\ns05.mpl"); |
> | un:=cos(c*n*Pi*t/L)*sin(n*Pi*x/L); |
> | usarja:=Sum(B[n]*un,n=1..infinity); |
> | Bn:=(2/L)*int(f(x)*sin(n*Pi*x/L),x=0..L); |
Esim : (KRE Exa 1 s. 593) Komiomainen alkupoikkeutus ilman alkunopeutta.
> | L:=2: f:=x->piecewise(0<x and x < 1,x,1<x and x < 2,2-x); |
> | Bn; |
> | Bn:=trigsiev(Bn,n); |
> | seq(Bn,n=1..10); |
> | usumma:=(x,t,N)->add(Bn*un,n=1..N); |
> | usumma(x,t,10); |
> | c:=2:animate(usumma(x,t,10),x=0..L,t=0..2,frames=50); |
> | plot3d(usumma(x,t,10),x=0..L,t=0..2); |
Ratkaisu voidaan esittää ilman sarjaa käyttämällä f-funktion paritonta 2L-jaksoista laajennusta f* (ftahti).
> | ftahti:=JJ(paritonjatko(f),-L..L); |
> | plot(ftahti,-4..4); |
> | u:=(x,t)->1/2*(ftahti(x-c*t)+ftahti(x+c*t)); |
> | uoikea:=(x,t)->1/2*(ftahti(x-c*t)); |
> | uvasen:=(x,t)->1/2*(ftahti(x+c*t)); |
> | oikea:=t->plot(uoikea(x,t),x=0..L,color=blue); |
> | vasen:=t->plot(uvasen(x,t),x=0..L,color=red); |
> | koko:=t->plot(u(x,t),x=0..L,color=black); |
> | koko(0.1); |
> | display(oikea(0.1),vasen(0.1),koko(0.1)); |
> | VOK:=t->display(oikea(t),vasen(t),koko(t)); |
> | N:=40: h:=0.1:display(seq(VOK(t),t=[seq(k*h,k=0..N)]),insequence=true); |
> |
> |