上一篇實現了二維熱傳導方程數值解,這里我們計算波動方程數值解。
波動方程是一種雙曲型偏微分方程。
這里依然用差分法計算。
一維波動方程如下:
寫成差分形式:
整理一下就能得到u(i+1,j)。
matlab代碼如下:
clear all;close all;clc; t = 2; %時間范圍,計算到2秒 x = 1; %空間范圍,0-1米 m = 320; %時間方向分320個格子 n = 64; %空間方向分64個格子 ht = t/(m-1); %時間步長dt hx = x/(n-1); %空間步長dx u = zeros(m,n); %設置邊界條件 i=2:n-1; xx = (i-1)*x/(n-1); u(1,2:n-1) = sin(2*pi*xx); u(2,2:n-1) = sin(2*pi*xx); %根據推導的差分公式計算 for i=2:m-1 for j=2:n-1 u(i+1,j) = ht^2*(u(i,j+1)+u(i,j-1)-2*u(i,j))/hx^2 + 2*u(i,j)-u(i-1,j); end end %畫出數值解 [x1,t1] = meshgrid(0:hx:x,0:ht:t); mesh(x1,t1,u)
結果如下: