齐次弦振动方程的MATLAB解法

齐次弦振动方程的MATLAB解法
齐次弦振动方程的MATLAB解法

齐次弦振动方程的MATLAB 解法

【摘要】

弦振动问题是一个典型的波动方程的建立与求解问题。本文通过利用MATLAB 特有的方程求解与画图功能,有效地构造和求解了齐次弦振动方程。并通过图像,可以直观感受方程的解,从而加深对这一问题物理意义的理解。

【关键词】

振动方程 MATLAB 求解 数学物理方法

【正文】

在细弦上任意取微元分析其受力情况,通过Newton 定律建立细弦振动的运动方程,可以求得弦振动的泛定方程为2tt xx u a u =。

要得出振动方程的解,除了泛定方程外,我们还需要知道具体问题的初始条件与边界条件。在弦振动问题里,初始条件可以从初始位移和初始速度考虑,即:

00

()()t t

t u

x u x ?ψ==?=??=??

边界条件是描述物理问题在边界上受约束的状态,在弦振动方程里可以归结为三类边界问题:

(1) 第一类边界问题:0

0,0,x x L

u u

==== 称为固定端。

(2) 第二类边界问题:0()

0,,x x x L F t u

u SY

====

特别的,若()0F t =,0,x

x L

u ==称x L =为自由端。

(3) 第三类边界问题:第一类和第二类边界问题的线性组合。

一、 两端固定的弦振动问题

两端固定的弦振动方程的定解问题可表示如下:

2000,0,0

0,0(),()

tt xx x x L t t t u a u x L t u u u

x u x ?ψ====?=<<>?

==??==? 1、初始位移不为0,初始速度为0 不妨设:

734sin

,()()770,()l l x x x l otherwise π

??≤≤?=???

,()0x ψ=

(1)特征函数求解解 由d ’Alembert 公式:

1

(,)[()()]2

u x t x at x at ??=++-

从而我们可以得到方程的级数解:

n A =

()1

43[sin(7)sin(7)](7)77

1

43

[sin(7)sin(7)],7(7)77

n n n n n n n π

πππ

ππ------=-≠-

而我们知道,弦振动的泛定方程属于本征问题:

''00,0x x L X X X X λ==+=?

?

==? 它在两个边界上都有第一类其次边界条件,它的本征值与本征函数为:

222,sin ,1,2,3n n x n l l

ππλ==

将系数带入方程,级数中每一项都是一个驻波,定义子程序wfun.m 计算不同n 的求和各项,再用主程序jxj 将它们加起来,得到动画图形。

(MATLAB 代码见附录1(1))

(2)差分方程求解

利用差分方程同样可以求出问题的解。令,x i x t j t =?=?,将微分方程改写成差分方程,即有

,11,1,,,1()2(1)i l i l i l i j i j u c u u c u u ++--=++--

其中,

()()

2

22

t c a x ?=? 于是,初始条件可以表示为:

,1,21,11,1,11

[()2(1)]

2

i i i i i u u c u u c u ?

+-==++- 作图时,先画出()x ?的图形,然后再用x at +或x at -代替其中的x ,改变at 的值,就画出了不同时刻()x at ?+,()

x at ?-

的图形。

(MATLAB代码见附录1(2))解得的动态图形如下:

2、初始位移为0,初始速度不为0

设初始速度为:

34

1,()

(()77

0,

l l

x

x

otherwise

ψ

?

≤≤

?

=?

??

(1)特征函数求解

通过求本征函数与本征值的方法我们可以得到方程的解析解:

1

sin sin

n

n

n a n

u B t x

l l

ππ

=

=∑

其中系数,

22

234

(cos cos)

77

n

l

B na na

n a

π

=

-,类似的,用函数计算级数中的各项,再在主函数中调用便可得解。

(MATLAB代码见附录2(1))

(2)差分方程求解

类似于问题1,我们还可以采用差分方程求解,不过需要注

意的是,题目中的初始条件应表示为:

,2

i

u t

ψ

=?。

(MATLAB代码见附录2(2))解得的动画图形如下:

【总结】

通过运用MATLAB构造和求解齐次弦振动方程,绘制了相关图像,直观感受了方程解,加深了对其物理意义的理解。借助于计算机来做计算和研究的过程涉及到建立模型,选择方法,语言编程和结果分析。通过此次问题的探究,培养和训练了自学能力和操作能力,获益匪浅。

【参考文献】

1、李明奇田太心《数学物理方程》电子科技大学出版社

2010

2、彭芳麟《数学物理方程的MATLAB解法与可视化》清华大

学出版社 2004

3、彭芳麟《计算物理基础》高等教育出版社 2010

4、谢进李大美《MATLAB与计算方法实验》武汉大学出

版社 2009

【附录】

附录1

(1)

function jxj

N=50

t=0:0.005:2.0;

x=0:0.001:1;

ww=wfun(N,0);

ymax=max(abs(ww));

h=plot(x,ww);

axis([0,1,-ymax,ymax])

sy=[];

for n=2:length(t)

ww=wfun(N,t(n));

set(h,'ydata',ww);

drawnow;

sy=[sy,sum(ww)];

end

function wtx=wfun(N,t)

x=0:0.001:1; a=1; wtx=0;

for I=1:N

if I~=7

wtx=wtx+((sin(pi*(7-I)*4/7)-sin(pi*(7-I)*3/7))... /(7-I)/pi-(sin(pi*(7+I)*4/7)-sin(pi*(7+I)*3/7))...

/(7+I)/pi)*cos(I*pi*a*t).*sin(I*pi*x);

else

wtx=wtx+1/7*cos(I*pi*a*t).*sin(I*pi*x);

end

end

(2)

N=4010; dx=0.0024;

dt=0.0005; c=dt*dt/dx/dx;

x=linspace(0,1,420);

u(1:420,1)=0;

u(181:240,1)=sin(pi*x(181:240)*7);

u(2:419,2)=u(2:419,1)+c/2*(u(3:420,1)-2*u(2:419,1)

+u(1:418,1));

h=plot(x,u(:,1),'linewidth',2);

axis([0,1,-1,1]);

set(h,'EraseMode','xor','MarkerSize',18);

for k=2:N

set(h,'XData',x,'YData',u(:,2));

drawnow;

pause(0.1)

u(2:419,3)=2*u(2:419,2)-u(2:419,1)+c*(u(3:420,2)..

.

-2*u(2:419,2)+u(1:418,2));

u(2:419,1)=u(2:419,2);

u(2:419,2)=u(2:419,3);

end

附录2

(1)

function psi

N=50;

t=0:0.005:2.0; x=0:0.001:1;

ww=psi1fun1(N,0);

h=plot(x,ww,'linewidth',2);

axis([0,1,-0.1,0.1]);

sy=[];

for n=2:length(t)

ww=psi1fun1(N,t(n));

set(h,'ydata',ww);

drawnow;

pause(1.5)

sy=[sy,sum(ww)];

end

function wtx=psi1fun1(N,t)

x=0:0.001:1; a=1; wtx=0;

for k=1:N

Bk=2/(k*k*pi*pi)*(cos(3*k*pi/7)-cos(4*k*pi/7));

wtx=wtx+Bk*sin(k*pi*t)*sin(k*pi*x);

end

(2)

clear

N=4025; dx=0.0024;

dt=0.0005; c=dt*dt/dx/dx;

x=linspace(0,1,420);

u(1:420,1)=0;

u(180:240,2)=dt*0.5;

h=plot(x,u(:,1),'linewidth',2);

axis([0,1,-1,1]);

set(h,'EraseMode','xor','MarkerSize',18);

for k=2:N

set(h,'XData',x,'YData',u(:,2));

drawnow;

pause(0.01)

u(2:419,3)=2*u(2:419,2)-u(2:419,1)+c*(u(3:420,2)... -2*u(2:419,2)+u(1:418,2));

u(2:419,1)=u(2:419,2);

u(2:419,2)=u(2:419,3);

end

相关主题
相关文档
最新文档