傅里叶谱方法求解基本偏微分方程—一维波动方程
一维波动方程
对于一根两端固定、没有受到任何外力的弦, 若只研究其中的一段, 在不太长的时间 里, 固定端来不及对这段弦产生影响, 则可以认为固定端是不存在的, 弦的长度为无限大。 这种无界 
    
     
      
       
        (
       
       
        −
       
       
        ∞
       
       
        <
       
       
        x
       
       
        <
       
       
        ∞
       
       
        )
       
      
      
       (-\infty<x<\infty)
      
     
    (−∞<x<∞) 弦的自由振动由式 
    
     
      
       
        (
       
       
        1
       
       
        )
       
      
      
       (1)
      
     
    (1) 描述。
 
     
      
       
        
         
         
          
           
            
             
              
               ∂
              
              
               2
              
             
             
              u
             
            
            
             
              ∂
             
             
              
               t
              
              
               2
              
             
            
           
           
            =
           
           
            
             a
            
            
             2
            
           
           
            
             
              
               ∂
              
              
               2
              
             
             
              u
             
            
            
             
              ∂
             
             
              
               x
              
              
               2
              
             
            
           
          
         
         
         
          
           (1)
          
         
        
       
       
         \frac{\partial^2 u}{\partial t^2}=a^2 \frac{\partial^2 u}{\partial x^2} \tag{1} 
       
      
     ∂t2∂2u=a2∂x2∂2u(1)
 如果保证数值计算的区间足够大, 在一定时间内, 弦的振动范围始终没有超出计算区间 (或可以近似地这么认为), 那么就能够放心地使用周期性边界条件。取 
    
     
      
       
        a
       
       
        =
       
       
        1
       
      
      
       a=1
      
     
    a=1, 初始 条件为:
 
     
      
       
        
         
         
          
           
            u
           
           
            
             u
            
            
             
              t
             
             
              =
             
             
              0
             
            
           
           
            =
           
           
            2
           
           
            sech
           
           
            
           
           
            (
           
           
            x
           
           
            )
           
           
            ,
           
           
            
             
             
              
               
                ∂
               
               
                u
               
              
              
               
                ∂
               
               
                t
               
              
             
             
              ∣
             
            
            
             
              t
             
             
              =
             
             
              0
             
            
           
           
            =
           
           
            0
           
          
         
         
         
          
           (2)
          
         
        
       
       
         u u_{t=0}=2 \operatorname{sech}(x),\left.\quad \frac{\partial u}{\partial t}\right|_{t=0}=0 \tag{2} 
       
      
     uut=0=2sech(x),∂t∂u
               t=0=0(2)
 在数学物理方法中, 无界弦的自由振动可由行波法求出解析解, 即达朗贝尔公式。 根据达朗贝尔公式, 从 
    
     
      
       
        t
       
       
        =
       
       
        0
       
      
      
       t=0
      
     
    t=0 开始, 
    
     
      
       
        u
       
      
      
       u
      
     
    u 的初始状态 
    
     
      
       
        2
       
       
        sech
       
       
        
       
       
        (
       
       
        x
       
       
        )
       
      
      
       2 \operatorname{sech}(x)
      
     
    2sech(x) 将分裂为两个 sech 形的波, 分别向两边以速度 
    
     
      
       
        a
       
      
      
       a
      
     
    a 传播出去, 即正行波和反行波。下面用傅里叶缙方法求解无界弦 的自由振动问题, 并与达朗贝尔公式的预测进行比较。首先引入函数 
    
     
      
       
        v
       
      
      
       v
      
     
    v 对式 
    
     
      
       
        (
       
       
        1
       
       
        )
       
      
      
       (1)
      
     
    (1) 进行降阶:
 
     
      
       
        
         
         
          
           
            {
           
           
            
             
              
               
                
                 
                  
                   ∂
                  
                  
                   u
                  
                 
                 
                  
                   ∂
                  
                  
                   t
                  
                 
                
                
                 =
                
                
                 v
                
               
              
             
            
            
             
              
               
                
                 
                  
                   ∂
                  
                  
                   v
                  
                 
                 
                  
                   ∂
                  
                  
                   t
                  
                 
                
                
                 =
                
                
                 
                  a
                 
                 
                  2
                 
                
                
                 
                  
                   
                    ∂
                   
                   
                    2
                   
                  
                  
                   u
                  
                 
                 
                  
                   ∂
                  
                  
                   
                    x
                   
                   
                    2
                   
                  
                 
                
               
              
             
            
           
          
         
         
         
          
           (3)
          
         
        
       
       
         \left\{\begin{array}{l} \frac{\partial u}{\partial t}=v \\ \frac{\partial v}{\partial t}=a^2 \frac{\partial^2 u}{\partial x^2} \end{array}\right. \tag{3} 
       
      
     {∂t∂u=v∂t∂v=a2∂x2∂2u(3)
 对上式等号两边做傅里叶变换, 化为偏微分方程组:
 
     
      
       
        
         
         
          
           
            {
           
           
            
             
              
               
                
                 
                  
                   ∂
                  
                  
                   
                    u
                   
                   
                    ^
                   
                  
                 
                 
                  
                   ∂
                  
                  
                   t
                  
                 
                
                
                 =
                
                
                 
                  v
                 
                 
                  ^
                 
                
               
              
             
            
            
             
              
               
                
                 
                  
                   ∂
                  
                  
                   
                    v
                   
                   
                    ^
                   
                  
                 
                 
                  
                   ∂
                  
                  
                   t
                  
                 
                
                
                 =
                
                
                 −
                
                
                 
                  a
                 
                 
                  2
                 
                
                
                 
                  k
                 
                 
                  2
                 
                
                
                 
                  u
                 
                 
                  ^
                 
                
               
              
             
            
           
          
         
         
         
          
           (4)
          
         
        
       
       
         \left\{\begin{array}{l} \frac{\partial \hat{u}}{\partial t}=\hat{v} \\ \frac{\partial \hat{v}}{\partial t}=-a^2 k^2 \hat{u} \end{array}\right. \tag{4} 
       
      
     {∂t∂u^=v^∂t∂v^=−a2k2u^(4)
这样就可以用 ode45 求解了, 详细代码如下:
主程序代码如下:
clear all; close all;
L=80;N=256;
x=L/N*[-N/2:N/2-1];
k=(2*pi/L)*[0:N/2-1 -N/2:-1].';
% 初始条件
u=2*sech(x);ut=fft(u);
vt=zeros(1,N);uvt=[ut vt];
% 求解
a=1;t=0:0.5:20;
[t,uvtsol]=ode45('wave1D',t,uvt,[],N,k,a);
usol=ifft(uvtsol(:,1:N),[],2);
% 画图
p=[1 11 21 41];
for n=1:4
    subplot(5,2,n)
    plot(x,usol(p(n),:),'k','LineWidth',1.5),xlabel x,ylabel u
    title(['t=' num2str(t(p(n)))]),axis([-L/2 L/2 0 2])
end
subplot(5,2,5:10)
waterfall(x,t,usol),view(10,45)
xlabel x,ylabel t,zlabel u,axis([-L/2 L/2 0 t(end) 0 2])
文件 wave1D.m 代码如下:
function duvt=wave1D(t,uvt,dummy,N,k,a)
ut=uvt(1:N);vt=uvt(N+[1:N]);
duvt=[vt;-a^2*(k).^2.*ut];
end
计算结果如图所示, 初始状态的波形分裂成两半, 并分别向 
    
     
      
       
        x
       
      
      
       x
      
     
    x 轴正方向和负方向 以速度 
    
     
      
       
        a
       
      
      
       a
      
     
    a 运动, 这和达朗贝尔公式给出的结论是一致的。
 



















