Ví dụ 4.1 Xét tốn sau ut − uxx = (1+ 4π 2)et sin(2π x), < x < 1, t > 0, t ≥ 0, u(0,t) = u(1,t) = 0, u(x,0) = sin(2π x), ≤ x ≤ a) Viết dạng sai phân hữu hạn tốn trên, đạo hàm cấp theo biến t xấp xỉ công thức sai phân lùi đạo hàm cấp theo biến x xấp xỉ công thức sai phân trung tâm b) Cho khoảng chia theo x M = 20 , khoảng chia theo t N = 800 Viết chương trình Matlab tính gần u(x,1) so sánh với nghiệm xác Giải a) Đặt f (x,t) = (1+ 4π 2)et sin(2π x) , ϕ (x) = sin(2π x) Cho T > Chọn M , N ∈ ¥ * Chia đoạn [0,1] thành M đoạn M +1 điểm chia xi = (i − 1)h, i = 1, M + 1, với h = M Chia đoạn [0,T ] thành N đoạn N + điểm chia tj = ( j − 1)k, j = 1, N + 1, với k = T N Gọi ui , j = u(xi ,tj ) giá trị gần nghiệm điểm nút (xi ,tj ) u(x,0) = ϕ (x), ≤ x ≤ ⇒ ui ,1 = u(xi ,t1) = ϕ (xi ), i = 1, M + u(0,t) = 0, t ≥ ⇒ u1, j = u(x1,tj ) = 0, j = 2, N + u(1,t) = 0, t ≥ ⇒ uM +1, j = u(xM +1,tj ) = 0, j = 2, N + u (x ,t ) ≈ u(xi −1,tj ) − 2u(xi ,tj ) + u(xi +1,tj ) = ui −1, j − 2ui , j + ui +1, j , xx i j h2 h2 ut (xi ,tj ) ≈ u(xi ,tj ) − u(xi ,tj −1) k = ui , j − ui , j −1 k , ut − uxx = f (x,t), < x < 1, t > ⇒ ui , j − ui , j −1 k − ui −1, j − 2ui , j + ui +1, j h2 = f (xi ,tj ) h2 ⇒ ui , j − ui , j −1 − ui −1, j − 2ui , j + ui +1, j = h2 f (xi ,tj ) k ( ) ( ) h2 −h2 ⇒ ui −1, j − + ÷ui , j + ui+1, j = ui , j −1 − h2 f (xi ,tj ), i = 2, M , j = 2, N + k k Vậy, dạng sai phân hữu hạn toán −h2 ui , j −1 − h2 f (xi ,tj ), i = 2, M , j = 2, N + 1, ui −1, j + λ ui , j + ui +1, j = k h2 ui ,1 = ϕ (xi ), i = 1, M + 1, với λ = − + ÷ k u = 0, j = 2, N + 1, 1, j u M +1, j = 0, j = 2, N + 1, b) Với j từ đến N+1, ta cho i nhận giá trị từ đến M, ta hệ phương trình AU j = Bj , 1 1 0 A( M +1)×(M +1) = M 0 0 0 0 0 0 ÷ u1, j λ 0 0÷ ÷ u ÷ ÷ λ 0 0 2, j ÷ ÷ M M M M M M M÷, (U j )( M +1)ì1 = M ữ, uM , j ữ 0 λ 0÷ ÷ ÷ 0 λ 1÷ uM +1, j ÷ 0 0 1÷ ÷ −h u − h2 f (x ,t ) ÷ 2, j −1 j k ÷ ÷ − h ÷ u − h f (x3,tj ) k 3, j −1 ÷ ÷ Bj = M ( M +1)ì1 ữ h ÷ k uM −1, j −1 − h f (xM −1,tj ) ÷ ÷ −h u ÷ − h f ( x , t ) M , j − M j k ÷ ÷ ÷ ( ) Hơn nữa, dễ dàng tìm nghiệm xác tốn ucx(x,t) = et sin(2π x) Chương trình MATLAB: %Tạo file f.m function a=f(x,t) a=(1+4*(pi^2))*exp(t)*sin(2*pi*x); %Tạo file phi.m function a=phi(x) a=sin(2*pi*x); %Tạo file ucx.m function a=ucx(x,t) a=exp(t)*sin(2*pi*x); %Tạo file Vd4_1spl.m clc clear all M=20; N=800; h=1/M; k=1/N; lamda=-(2+(h^2)/k); %Tao cac diem nut X=[0:M]*h; T=[0:N]*k; U=zeros(M+1,1); %Tu dieu kien dau for i=1:(M+1) U(i)=phi(X(i)); end %Tinh gan dung u(x,1) for j=2:(N+1) %Tao ma tran A B A=zeros(M+1,M+1); B=zeros(M+1,1); A(1,1)=1; A(M+1,M+1)=1; B(1)=0; B(M+1)=0; for i=2:M A(i,i-1)=1; A(i,i)=lamda; A(i,i+1)=1; B(i)=-((h^2)/k)*U(i)-(h^2)*f(X(i),T(j)); end %Giai he AU=B U=A\B; end %Xuat cac gia tri gan dung u(x,1) U %Xuat cac gia tri cua nghiem chinh xac ucx(x,1) Ucx=zeros(M+1,1); for i=1:(M+1) Ucx(i)=ucx(X(i),1); end Ucx %Ve U, Ucx plot(X,U,'r ') hold on syms x ezplot(ucx(x,1),[0,1]) xlabel('x') ... B=zeros(M+1,1); A(1,1)=1; A(M+1,M+1)=1; B(1)=0; B(M+1)=0; for i=2:M A(i,i-1)=1; A(i,i)=lamda; A(i,i+1)=1; B(i) =-( (h^2)/k)*U(i )-( h^2)*f(X(i),T(j)); end %Giai he AU=B U=AB; end %Xuat cac gia tri gan... a=ucx(x,t) a=exp(t)*sin(2*pi*x); %Tạo file Vd4_1spl.m clc clear all M=20; N=800; h=1/M; k=1/N; lamda =-( 2+(h^2)/k); %Tao cac diem nut X=[0:M]*h; T=[0:N]*k; U=zeros(M+1,1); %Tu dieu kien dau for i=1:(M+1)