有驱动力的两端固定弦振动问题的差分方程数值计算

  • 格式:doc
  • 大小:102.50 KB
  • 文档页数:5

有驱动力的两端固定弦的差分方程数值计算
如果有驱动力,即使初始条件全部为0,弦也可以发生振动。

在没有阻力的情况下,随着时间的增加,振动还会越来越大。

下面就是一个典型的这类定解问题:
()()()()⎪⎪⎩

⎪⎨⎧====+=0
0000002
,x u ,,x u t ,l u ,t ,u t s i n l x c o s A u c u t
x x xx tt
ωπ
这个问题可以用傅里叶级数法,冲量定理法或格林函数法来求解,所得到的解析形式的解为: ()l x c o s t s i n l a l at sin l
a a
Al t ,x u πωππωπωπ⎪⎭⎫ ⎝⎛--=
22
221
下面的程序画出了这个弦振动的图形: close all ; clear all ; clc;
l=1;a=1;w=2;al=pi*a/l;A=1; x=0:0.05:1;
m=moviein(301); for k=0:300;
u=1/al/(w^2-al^2)*(w*sin(al*k*0.1)-al*sin(w*k*0.1))*cos(pi*x./l); plot(x,u);
axis([0 1 -0.5 0.5]); m(:,k+1)=getframe; end
movie(m,1);
我们用PDE 工具箱画这个解的图形。

先画一个狭长的区域,四个边界都设定成诺依曼边界条件,q=0,g=0。

方程选hyperbolic ,设成非齐次的,即f 选项中填入cos(pi*x/1.5).*sin(2*t),其中ω取2,其余系数为c=1,a=0,d=1。

初始化的网格作了两次细分。

在解方程的初始位移与初始速度都设为零,时间可以取0:0.1:5。

作图选项是Color ,Contour ,Height(3-D Plot),Animation ,所得图形如下图所示(列举出了几个):
0.5
1
1.5
-0.05
0.05
-0.03-0.02-0.0100.01
0.02
0.03
-0.025
-0.02-0.015-0.01-0.00500.005
0.01
0.015
0.02
0.025
0.5
1
1.5
-0.05
0.05
-0.50
0.5
Time=3.5 Color: u Height: u
-0.4
-0.3-0.2-0.1
00.1
0.20.30.4
0.5
1
1.5
-0.05
0.05
-1-0.5
0.5
1
-0.8
-0.6-0.4
-0.200.2
0.40.60.8
弦振动如果不仅有驱动力,而且有阻力,随着时间的增加,初始条件的影响会越来越小,直至形成一种稳定的驱动。

下面是定解问题:
()()()()⎪
⎪⎩⎪⎪⎨⎧====+-=0
0000
0022
,x u ,x u t ,l u ,t ,u t sin l
x cos A u u c u t x x
t xx tt
ωπλ 写出差分方程:
()()()⎥⎦
⎤⎢⎣⎡++--+++=
------+j i j ,i j ,i j ,i j ,i j ,i j ,i t sin l x cos dt A dtu u u c u u c dt u ωπλλ2
12111111211 初位移为零是01=,i u ;初速度为零表示为:
020
21=-=∂∂dt
u u t u ,i ,i ,i 由此得
[]0222
1111112=+-++=
-+,i ,i ,i ,i ,i u u u u dt
u λ
编好的差分方程的程序如下,这里取λ=4,A=200,ω=12。

close all ; clear all ; clc;
%有驱动力和阻尼的情况下的解 N=4000;dx=0.01;dt=0.0005; c=400*dt*dt/dx/dx; g=4;A=200;w=12; x=linspace(0,1,100)'; u(1:100,1)=0;%初位移为零
u(1:100,2)=0;%初速度为零
h=plot(x,u(:,1),'linewidth',5); set(h,'EraseMode','xor'); axis([0,1,-0.07,0.07]); for k=2:N;
set(h,'XData',x,'YData',u(:,2)); drawnow;
u(2:99,3)=2*u(2:99,2)-u(2:99,1)+c*(u(3:100,2)-2*u(2:99,2)+u(1:98,2)); u(2:99,3)=1/(1+g*dt)*(u(2:99,3)+g*dt.*u(2:99,1));
u(2:99,3)=u(2:99,3)+1/(1+g*dt)*(A*dt^2.*cos(pi*x(2:99))*sin(w*(k+1)*d t));
u(1,3)=u(2,3);u(100,3)=u(99,3);%加上边界条件 u(:,1)=u(:,2); u(:,2)=u(:,3); pause(0.001); end
运行之后的几个画面如下:
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9
1
-0.06
-0.04
-0.02
0.02
0.04
0.06
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9
1
-0.06
-0.04
-0.02
0.02
0.04
0.06
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9
1
-0.06
-0.04
-0.02
0.02
0.04
0.06。