(Luận văn thạc sĩ) Tìm nghiệm phương trình đạo hàm riêng bằng phương trình sai phân(Luận văn thạc sĩ) Tìm nghiệm phương trình đạo hàm riêng bằng phương trình sai phân(Luận văn thạc sĩ) Tìm nghiệm phương trình đạo hàm riêng bằng phương trình sai phân(Luận văn thạc sĩ) Tìm nghiệm phương trình đạo hàm riêng bằng phương trình sai phân(Luận văn thạc sĩ) Tìm nghiệm phương trình đạo hàm riêng bằng phương trình sai phân(Luận văn thạc sĩ) Tìm nghiệm phương trình đạo hàm riêng bằng phương trình sai phân(Luận văn thạc sĩ) Tìm nghiệm phương trình đạo hàm riêng bằng phương trình sai phân(Luận văn thạc sĩ) Tìm nghiệm phương trình đạo hàm riêng bằng phương trình sai phân(Luận văn thạc sĩ) Tìm nghiệm phương trình đạo hàm riêng bằng phương trình sai phân(Luận văn thạc sĩ) Tìm nghiệm phương trình đạo hàm riêng bằng phương trình sai phân(Luận văn thạc sĩ) Tìm nghiệm phương trình đạo hàm riêng bằng phương trình sai phân(Luận văn thạc sĩ) Tìm nghiệm phương trình đạo hàm riêng bằng phương trình sai phân(Luận văn thạc sĩ) Tìm nghiệm phương trình đạo hàm riêng bằng phương trình sai phân(Luận văn thạc sĩ) Tìm nghiệm phương trình đạo hàm riêng bằng phương trình sai phân
ĐẠI HỌC THÁI NGUYÊN TRƯỜNG ĐẠI HỌC KHOA HỌC - NGUYỄN DUY TIN TÌM NGHIỆM PHƯƠNG TRÌNH ĐẠO HÀM RIÊNG BẰNG PHƯƠNG TRÌNH SAI PHÂN LUẬN VĂN THẠC SĨ TOÁN HỌC THÁI NGUYÊN - 2019 ĐẠI HỌC THÁI NGUYÊN TRƯỜNG ĐẠI HỌC KHOA HỌC - NGUYỄN DUY TIN TÌM NGHIỆM PHƯƠNG TRÌNH ĐẠO HÀM RIÊNG BẰNG PHƯƠNG TRÌNH SAI PHÂN Chuyên ngành: Toán ứng dụng Mã số : 46 01 12 LUẬN VĂN THẠC SĨ TOÁN HỌC NGƯỜI HƯỚNG DẪN KHOA HỌC TS NGUYỄN THỊ NGỌC OANH THÁI NGUYÊN - 2019 Mục lục Trang Danh sách hình vẽ Lời nói đầu Chương Một số kiến thức 1.1 Toán tử sai phân 1.2 Tính tổng 12 1.3 Biến đổi z 17 Chương Giải phương trình đạo hàm riêng phương trình sai phân 19 2.1 Rời rạc hóa phương trình đạo hàm riêng 19 2.2 Nghiệm phương trình đạo hàm riêng 27 2.3 Ví dụ số 35 2.3.1 Phương trình parabolic tuyến tính chiều 35 2.3.2 Phương trình parabolic tuyến tính chiều 39 Phụ lục 60 Danh sách hình vẽ 2.1 Mơ hình phương trình truyền nhiệt 21 2.2 Lưới điểm đạt từ trục ban đầu 22 2.3 Lưới điểm đạt không với giá trị biên 22 2.4 Mơ hình phương pháp ẩn 25 2.5 Mơ hình phương trình Laplace 27 2.6 Nghiệm xấp xỉ Ví dụ 2.5 37 2.7 Nghiệm xác Ví dụ 2.5 38 2.8 Sai số Ví dụ 2.5 38 2.9 Nghiệm xấp xỉ Ví dụ 2.6 39 2.10 Nghiệm xác Ví dụ 2.6 40 2.11 Sai số Ví dụ 2.6 40 2.12 Nghiệm xấp xỉ Ví dụ 2.7 43 2.13 Nghiệm xác Ví dụ 2.7 43 2.14 Sai số Ví dụ 2.7 44 Lời nói đầu Sử dụng phương trình sai phân để giải số phương pháp phổ biến hữu hiệu nghiên cứu mơ hình tốn học liên quan tới vấn đề khoa học, kỹ thuật, kinh tế nhiễu lĩnh vực khác thực tiễn, ta tìm thấy nhiều ví dụ cụ thể Chương tài liệu [2] Phương pháp đề xuất từ nửa cuối năm 40 kỷ trước ngày khẳng định vai trò quan trọng giải tích ứng dụng đặc biệt quan trọng việc nghiên cứu nghiệm số phương trình đạo hàm riêng [1, 3] Luận văn trình bày số kiến thức liên quan tới phương trình sai phân áp dụng phương trình sai phân tìm nghiệm số phương trình đạo hàm riêng tuyến tính Luận văn chia làm hai chương Chương chương mở đầu, trình bày kiến thức liên quan tới phương trình sai phân như: Định nghĩa tính chất tốn tử sai phân; định nghĩa tính chất tổng bất định; biến đổi z giải phương trình sai phân Nội dung Chương tham khảo chủ yếu hai tài liệu [1, 2] Chương nghiên cứu ứng dụng phương trình sai phân vào việc tìm nghiệm số phương trình đạo hàm riêng Chương trình bày bước rời rạc toán, nghiệm rời rạc đồng thời có ví dụ số minh họa thơng qua ngơn ngữ lập trình MATLAB Nội dung chương tham khảo chủ yếu hai tài liệu [1, 3] Sau thời gian học tập rèn luyện Trường Đại học Khoa học – Đại học Thái Nguyên, biết ơn kính trọng, em xin gửi lời cảm ơn chân thành đến Ban Giám hiệu, Phòng Đào tạo, Khoa Toán - Tin Trường Đại học Khoa học – Đại học Thái Nguyên thầy cô nhiệt tình hướng dẫn, giảng dạy tạo điều kiện thuận lợi giúp đỡ em suốt trình học tập, nghiên cứu hồn thiện đề tài luận văn Thạc sĩ Đặc biệt, em xin bày tỏ lòng biết ơn sâu sắc tới Tiến sĩ Nguyễn Thị Ngọc Oanh, người trực tiếp hướng dẫn, giúp đỡ em trình thực đề tài Xin chân thành cảm ơn gia đình, bạn bè đồng nghiệp tạo điều kiện giúp đỡ, động viên nghiên cứu hoàn thiện đề tài Em xin trân trọng cảm ơn! Thái Nguyên, ngày 01 tháng 11 năm 2019 Học viên Nguyễn Duy Tin Chương Một số kiến thức Trong chương chúng tơi trình bày số kiến thức liên quan tới định nghĩa tính chất tốn tử sai phân, tổng bất định biến đổi z 1.1 Toán tử sai phân Định nghĩa 1.1 Cho y(t) hàm biến thực t, toán tử sai phân ∆ xác định ∆y(t) = y(t + 1) − y(t) Ví dụ 1.1 Phương pháp Euler xấp xỉ nghiệm toán ban đầu x (t) = f (t, x(t)), (1.1) x(t0 ) = x0 , (1.2) đạt cách thay x (t) x(t + h) − x(t) Ta có h x(t + h) − x(t) = f (t, x(t)) h hay x(t + h) = x(t) + hf (t, x(t)) Ta sử dụng dạng thuận tiện cho phương trình sai phân này, đặt xn = x(t0 + nh), n = 0, 1, 2, , phương trình viết lại dạng sau xn+1 = xn + hf (t, xn (t)), n = 0, 1, 2, x0 biết Xét toán tử sai phân với bước lưới h > z(s + h) − z(s) Đặt y(t) = z(th), z(s + h) − z(s) = z(th + h) − z(th) = y(t + 1) − y(t) = ∆y(t) Sai phân cấp cao định nghĩa hợp thành tốn tử sai phân Sai phân cấp hai định nghĩa sau ∆2 y(t) = ∆(∆y(t)) = ∆(y(t + 1) − y(t)) = (y(t + 2) − y(t + 1)) − (y(t + 1) − y(t)) = y(t + 2) − 2y(t + 1) + y(t) Sai phân cấp n xây dựng theo công thức quy nạp sau ∆n y(t) = y(t + n) − ny(t + n − 1) + n (−1)k = k=0 n k n(n − 1) y(t + n − 2) + · · · + (−1)n y(t) 2! y(t + n − k) (1.3) Định nghĩa 1.2 Toán tử "dịch chuyển" định nghĩa sau Ey(t) = y(t + 1) Nếu I toán tử đồng nhất, tức Iy(t) = y(t) ta có ∆ = E − I Các tính chất toán tử ∆ cho định lý sau (1.4) Định lý 1.1 Toán tử sai phân ∆ thỏa mãn tính chất sau a ∆m (∆n y(t)) = ∆m+n y(t) với số nguyên dương m n b ∆(y(t) + z(t)) = ∆y(t) + ∆z(t) c ∆(Cy(t)) = C∆y(t) d ∆(y(t)z(t)) = y(t)∆z(t) + Ez(t)∆y(t) z(t)∆y(t) − y(t)∆z(t) y(t) = e ∆ z(t) z(t)Ez(t) Chứng minh a Ta chứng minh quy nạp theo m, đẳng thức hiển nhiên với m = Giả sử đẳng thức với m = k, ta chứng minh tới m = k + Thật ∆k+1 (∆n y(t)) = ∆k (∆(∆n y(t))) = ∆k (∆n+1 y(t))) = ∆k+n+1 y(t) b Ta có ∆(y(t) + z(t)) = y(t + 1) + z(t + 1) − y(t) − z(t) = y(t + 1) − y(t) + z(t + 1) − z(t) = ∆y(t) + ∆z(t) c Ta có ∆(Cy(t)) = Cy(t + 1) − Cy(t) = C y(t + 1) − y(t) = C∆y(t) d Ta có ∆(y(t)z(t)) = y(t + 1)z(t + 1) − y(t)z(t) = y(t + 1)z(t + 1) − y(t)z(t + 1) + y(t)z(t + 1) − y(t)z(t) = z(t + 1)∆y(t) + y(t)∆z(t) = y(t)∆z(t) + Ez(t)∆y(t) e Ta có ∆ y(t + 1) y(t) y(t) = − z(t) z(t + 1) z(t) y(t + 1)z(t) − z(t + 1)y(t) = z(t)z(t + 1) y(t + 1)z(t) − y(t)z(t) − z(t + 1)y(t) − y(t)z(t) = z(t)Ez(t) z(t)∆y(t) − y(t)∆z(t) = z(t)Ez(t) Định lý 1.2 Cho a số Khi a ∆at = (a − 1)at b ∆ sin at = sin a2 cos a(t + 12 ) c ∆ cos at = −2 sin a2 sin a(t + 12 ) d ∆ log at = log(1 + 1t ) e ∆ log Γ(t) = log t, Γ(t) xác định sau ∞ e−z z t−1 dz Γ(t) = Chú ý 1.1 Hàm Γ(t) thỏa mãn tính chất Γ(t + 1) = t Γ(t) Thật vậy, ta có ∞ e−z z t dz Γ(t + 1) = = ∞ [−e−z z t ]∞ ∞ (−e−z )tz t−1 dz − e−z z t−1 dz = tΓ(t) =t Chứng minh a Ta có ∆at = at+1 − at = (a − 1)at 47 for o=2:(M+1) for r=2:o % tao ma tran A va vec to b A=zeros(N+1,N+1); b=zeros(N+1,1); A(1,1)=1; A(N+1,N+1)=1; b(1)=g1(r); b(N+1)=g2(r); for i=2:N A(i,i)=c; A(i,i-1)=-a; A(i,i+1)=-a; b(i)=dxˆ2*f(i,r)+U(i,r-1)*dxˆ2/dt; end U(:,o)=A; ¯ end end %%%%%%%%%% Ve hinh close all figure;set(gca,’Fontsize’,15); surf(Uex);title(’Nghiem chinh xac’); figname = [exa,’_exact.eps’]; print(’-depsc2’,figname); % nghiem xap xi bai toan thuan figure;set(gca,’Fontsize’,15); surf(U);title(’Nghiem xap xi’); figname = [exa,’_approx.eps’]; print(’-depsc2’,figname); % sai so tung diem figure;set(gca,’Fontsize’,15); 48 surf(U-Uex);title(’Sai so tung diem’); figname = [exa,’_err.eps’]; print(’-depsc2’,figname); %%%%%%%%%% Chuong trinh chay clear all; % Cac tham so (co the thay doi) exa = ’exa3_1’; % ten vi du epsilon=1e-2; a=1; T=0.1; N=50; % so khoang chia tren truc x M=25; % so khoang chia tren truc y dx=1/N; % buoc luoi tren truc x dt=T/M; % buoc luoi tren truc y NoiseLevel = 0.01; x=[0:N]*dx; Nx=length(x); t=[0:M]*dt; Nt=length(t); %%%%%% VI DU % % % u0=sin(2*pi*x’); f=(1+4*piˆ2)*u0*exp(t); g1=zeros(1,M+1); % g2=zeros(1,M+1); % Uex=u0*exp(t); %%%%%% VI DU f=ones(N+1,1)*exp(-t); g1=zeros(1,M+1); g2=exp(-t)*cos(1)-exp(-t); u0=cos(x)’-ones(N+1,1); Uex=cos(x)’*exp(-t)-ones(N+1,1)*exp(-t); % goi chuong trinh U=direct_proble_final(a,T,M,N,u0,g1,g2,f); 49 % sai so L_2 disp(’sai so theo chuan L_2’) err2=norm(U-Uex)/sqrt(N+1) displayresult_final % Chương trình MATLAB giai bai toan bien Dirichlet chieu heateq2d_dir_exa3.m function U = heateq2d_dir(Coeff,f,g,phix_l,phix_u,phiy_l,phiy_u,dispars) % Solve the 2D Dirichlet problem for parabolic equation in a rectangle % dT(x,y,t)/dt - d/dx(ax(x,y,t)dT/dx) - d/dy(ay(x,y,t) dT/dy) = f(x,y,t) % Xl < x < Xu; Yl < y < Yu; < t < te % T(x,y,0) = g(x,y) % T(Xl,y,t) = phix_l(y,t) % T(Xu,y,t) = phix_u(y,t) % T(x,Yl,t) = phiy_l(x,t) % T(x,Yu,t) = phiy_u(x,t) % % Algorithm: component-by-component finite difference splitting scheme for % a uniform grid (second order accuracy in t, x and y) % % Discretization of the domain: % Xl = x_0 < x_ = dx < < x_Nx+1 = Xu; (Nx+2 grid points) % Yl = y_0 < y_1 = dy < < y_Ny+1 = Yu; (Ny+2 grid points) % = t_0 < t_1 = dt < < t_Nt = te; (Nt + grid points) % dt/2 = t*_1 < t*_2 = 3/2dt < < t*_Nt = te - dt/2; (Nt middle points) % % INPUT: % Coeff: a structure variable of the coefficient values: % Coeff.ax = a(x_i+dx/2,y_j,t_n+dt/2): (Nx+1) x Ny x Nt matrix 50 % If the coefficient does not depend on t, it is of the size (Nx+1)*Ny*1 % Coeff.ay = a(x_i,y_j+dy/2,t_n+dt/2): Nx x (Ny+1) x Nt matrix % Coeff.a: Nx x Ny x Nt matrix % f = f(i,j,n) = f(x_i,y_j,t_n+dt/2): Nx x Ny x Nt matrix % g = g(i,j) % phi = phi(j,n) = phi(y_j,t_n+dt/2): Ny x Nt matrix = g(x_i,y_j): Nx x Ny matrix of the initial condition % dispars: discretization parameters, a structure of the form: % dispars.dx % dispars.dy % dispars.dt % dispars.Nx % dispars.Ny % dispars.Nt % OUTPUT: U: the solution to the problem %******************** % — Calculate the coefficient matrices: [A1,A2] = coefmat2d_dir(Coeff,dispars); % — Calculate the right hand side vector: F = zeros(dispars.Nx, dispars.Ny, dispars.Nt); F(:,:,:) = f; F(1,:,:) = F(1,:,:) + Coeff.ax(1,:,:).*phix_l/dispars.dxˆ2; F(dispars.Nx,:,:) = F(dispars.Nx,:,:) + Coeff.ax(end,:,:).*phix_u/dispars.dy ˆ2; F(:,1,:) = F(:,1,:) + Coeff.ay(:,1,:).*phiy_l/dispars.dxˆ2; F(:,dispars.Ny,:) = F(:,dispars.Ny,:) + Coeff.ay(:,end,:).*phiy_u/dispars.dy ˆ2; dispars1 = dispars; dispars1.Nx = [dispars.Nx,dispars.Ny]; % — Splitting scheme: tic U = splitting2d(A1,A2,F,dispars1,g); toc 51 %%%%%%%%%% Ve hinh displayresult.m close all %eval([’load ’ exa]); % % % nghiem chinh xac tai thoi diem cuoi figure; set(gca,’Fontsize’,15); surfl(T(:,:,dispars.Nt+1)); set(gca,’xtick’,1:20:dispars.Nx); set(gca,’xticklabel’,x(1:20:end)-0.01); set(gca,’ytick’,1:20:dispars.Ny); set(gca,’yticklabel’,y(1:20:end)-0.01); xlabel(’x_1’); ylabel(’x_2’); zlabel(’T(x,1)’); title(’Nghiem chinh xac tai t=1’); axis([0 50 50 -0.2 0.7]); figname = [exa,’_exact.eps’]; print(’-depsc2’,figname); % % % Nghiem xap xi figure; set(gca,’Fontsize’,15); surfl(U(:,:,dispars.Nt+1)); set(gca,’xtick’,1:20:dispars.Nx); set(gca,’xticklabel’,x(1:20:end)-0.01); set(gca,’ytick’,1:20:dispars.Ny); set(gca,’yticklabel’,y(1:20:end)-0.01); xlabel(’x_1’); ylabel(’x_2’); zlabel(’T(x,1)’); title(’Nghiem xap xi tai t=1’); axis([0 50 50 -0.2 0.7]); figname = [exa,’ _ approx.eps’]; 52 print(’-depsc2’,figname); % % % Sai so tung diem: figure; set(gca,’Fontsize’,15); surfl(U(:,:,end) - T(:,:,end)); set(gca,’xtick’,1:20:dispars.Nx); set(gca,’xticklabel’,x(1:20:end)-0.01); set(gca,’ytick’,1:20:dispars.Ny); set(gca,’yticklabel’,y(1:20:end)-0.01); xlabel(’x_1’); ylabel(’x_2’); title(’Sai so tai t=1’); axis([0 50 50 -0.01 0.05]); figname = [exa,’_error.eps’]; print(’-depsc2’,figname); %%%%%%%%%% Chuong trinh chay % % heateq2d_dir.m close all clear % ======== Cac tham so co the thay doi: exa = ’exa3_1’; % Ten vi du, ket qua cua moi vi du se duoc ghi mot folder voi ten dispars.dx = 0.02; % Kich thuoc luoi sai phan dispars.dy = 0.02; dispars.dt = 0.02; Lx = 1; % Kich thuoc cua mien can tinh Ly = 1; Te = 1; % Khoang thoi gian % Noise level: NoiseLevel = 0.01; % ===================================== % Mot so tham so de tinh toan, ko can sua x = (0:dispars.dx:Lx)’; x = x(2:end); % exclude the boundary points 53 y = (0:dispars.dy:Ly); y = y(2:end); t = (0:dispars.dt:Te); t1 = t(1:end-1) + dispars.dt/2; % the middle points dispars.Nx = length(x); dispars.Ny = length(y); dispars.Nt = length(t1); % ===================================== % Nghiem chinh xac, dk bien, THAY DOI theo tung vi du % The coefficient matrices: a = 1e-2; % He so phu thuoc thoi gian, phai tinh toan lai ham f!!! Coeff.ax = zeros(dispars.Nx+1,dispars.Ny,dispars.Nt); Coeff.ay = zeros(dispars.Nx,dispars.Ny+1,dispars.Nt); Coeff.a = zeros(dispars.Nx,dispars.Ny,dispars.Nt); for idt = 1:dispars.Nt Coeff.ax(:,:,idt) =2*a*(1-0.5*(1-t1(idt))*ones(dispars.Nx +1,dispars.Nx) *cos(15*pi*x)*cos(15*pi*y)); Coeff.ay(:,:,idt) =a*(1-0.5*(1-t1(idt))*cos(15*pi*x)*cos(15*pi*y) *ones(dispars.Ny,dispars.Ny+1)); Coeff.a(:,:,idt) = x.ˆ2*ones(1,dispars.Ny) + ones(dispars.Nx,1)*y.ˆ2 + 2*x*ones(1,dispars.Ny)*t1(idt) + 1; end % % initial condition: g = sin(pi*x)*sin(pi*y); % % right hand vector: f = zeros(dispars.Nx,dispars.Ny,dispars.Nt); for idt = 1:dispars.Nt f(:,:,idt) = -g/2.*(1-6*a*piˆ2*(1-t1(idt)/2)*(1-1/2*(1-t1(idt)) *cos(15*pi*x)*cos(15*pi*y)) 54 -Coeff.a(:,:,idt)*(2-t1(idt))) -15/2*a*piˆ2*(1-t1(idt))*(1-t1(idt)/2)*(2*(cos(pi*x)*sin(pi*y)) *(sin(15*pi*x)*cos(15*pi*y))+(sin(pi*x)*cos(pi*y)) *(cos(15*pi*x)*sin(15*pi*y))); end % % the boundary conditions: phix_l = 0; phix_u = 0; phiy_l = 0; phiy_u = 0; % %exact solution: T = zeros(dispars.Nx,dispars.Ny,dispars.Nt+1); for n = 1:dispars.Nt+1 T(:,:,n) = g/2*(2 - t(n)); end % ================== % Solution of problem: U = heateq2d_dir(Coeff,f,g,phix_l,phix_u,phiy_l,phiy_u,dispars) % mo phong du lieu displayresult triangular_linearsystem2.m function U = triangular_linearsystem2(A,f) % Function U = trinagular_linearsystem is used to solve a % linear system with a triangular matrix % Ax = f; % NOTE: A is a 3xM matrix of three diagonals M = length(f); Eps = zeros(1,M-1); g = Eps; Eps(1) = - A(3,1)/A(2,1); 55 g(1) = f(1)/A(2,1); % calculate intermediate values: Eps and g for k=2:M-1; var = A(1,k)*Eps(k-1) + A(2,k); Eps(k) = -A(3,k)/var; g(k) = (f(k) - A(1,k)*g(k-1))/var; end % Calculate the SOL SOL = zeros(M,1); SOL(M) = (f(M) - A(1,M)*g(M-1))/(A(1,M)*Eps(M-1) + A(2,M)); for k=M-1:-1:1 SOL(k) = Eps(k)* SOL(k+1) + g(k); end U = SOL; coefmat2d _ dir function [A1,A2] = coefmat2d_dir(Coeff,dispars) % calculate the coefficient matrices of the splitting scheme for Dirichlet % problem for parabolic equation % input: % Coeff: a structured variable containing fields: % Coeff.ax = a(x_i+dx/2,y_j,t_n+dt/2): (Nx+1) x Ny x Nt ma- trix % If the coefficient does not depend on t, it is of the size (Nx+1)*Ny*1 % Coeff.ay = a(x_i,y_j+dy/2,t_n+dt/2): Nx x (Ny+1) x Nt ma- trix % dispars: discretization parameters, a structure of the form: % dispars.dx % dispars.dy % dispars.dt 56 % dispars.Nx % exclude the boundary points % dispars.Ny % exclude the boundary points % dispars.Nt % OUTPUT: coefficient matrices A1 and A2 % ======================================== if ∼ isfield(Coeff,’a’) Coeff.a = zeros(dispars.Nx,dispars.Ny,1); end % % calculate A1: N = size(Coeff.ax); if length(N) < % if the coefficient does not depend on t N = [N 1]; end % A1 = zeros(3,dispars.Nx,N(2),N(3)); for n = 1:N(3) % time index for j = 1:N(2) A1(1,2:dispars.Nx,j,n) = -Coeff.ax(2:N(1)-1,j,n); A1(3,1:dispars.Nx-1,j,n) = -Coeff.ax(2:N(1)-1,j,n); A1(2,:,j,n) = -(A1(1,:,j,n) + A1(3,:,j,n)) + reshape(Coeff.a(:,j,n)*dispars.dx ˆ2/2,1,dispars.Nx); A1(2,1,j,n) = A1(2,1,j,n) + Coeff.ax(1,j,n); A1(2,dispars.Nx,j,n) = A1(2,dispars.Nx,j,n) + Coeff.ax(N(1),j,n); end end A1 = A1/dispars.dxˆ2; % N = size(Coeff.ay); if length(N) < % if the coefficient does not depend on t N = [N 1]; end % % A2: 57 A2 = zeros(3,dispars.Ny,N(1),N(3)); for n = 1:N(3) for j = 1:N(1) A2(1,2:dispars.Ny,j,n) = -Coeff.ay(j,2:N(2)-1,n); A2(3,1:dispars.Ny-1,j,n) = -Coeff.ay(j,2:N(2)-1,n); A2(2,:,j,n) = -(A2(1,:,j,n) + A2(3,:,j,n)) + Coeff.a(j,:,n)*dispars.dy ˆ2/2; A2(2,1,j,n) = A2(2,1,j,n) + Coeff.ay(j,1,n); A2(2,dispars.Ny,j,n) = A2(2,dispars.Ny,j,n) + Coeff.ay(j,N(2),n); end end A2 = A2/dispars.dyˆ2; splitting2d function U = splitting2d(A1,A2,F,DisPar,g) % Solving the system of ODEs: % dU(t)/dt + [A1(t) + A2(t)]U(t) = F(t), < t< te % U(0) = g % with positive semi-definite coefficient matrices by the splitting scheme: % U(n+1) = A(n)U(n) + B(n)F(n), n = 0, 1, , Nt-1 % U(0) = g % where % U(n) = U(t_n) % A(n) = T1(n)*T2(n)*T2(n)*T1(n) % B(n) = dt*T1(n)*T2(n) % Ti(n) = [E + dt/4*Ai(t_n+dt/2)]ˆ-1[E - dt/4*Ai(t_n+dt/2)] % F(n) = F(t_n+dt/2) % % INPUT: % A1: 3*Nx*Ny*Nt or 3*Nx*1*Nt or 3*Nx*Ny*1 or 3*Nx*1*1 matrix 58 of the above % coefficient matrix % A2: 3*Ny*Nx*Nt or 3*Ny*1*Nt or 3*Ny*Nx*1 or 3*Ny*1*1 matrix % F: Nx*Ny*Nt matrix of the right hand side vector % DisPar: discretization parameters % g: Nx*Ny matrix of the initial condition % ************************************************************ % ************************************************************ A1 = A1*DisPar.dt/4; A2 = A2*DisPar.dt/4; F = F*DisPar.dt; N1 = size(A1); if length(N1) < N1 = [N1, 1, 1]; end N2 = size(A2); if length(N2) < N2 = [N2, 1, 1]; end % B1 = A1; B2 = A2; B1(2,:,:,:) = B1(2,:,:,:) + 1; B2(2,:,:,:) = B2(2,:,:,:) + 1; % U = zeros(DisPar.Nx(1),DisPar.Nx(2),DisPar.Nt+1); U(:,:,1) = g; % the initial condition % % the loop: each loop consists of solving systems V = U(:,:,1); for n = 1:DisPar.Nt 59 n1 = min(N1(4),n); % for the coefficient matrices % the first system: for j = 1:DisPar.Nx(2) j1 = min(j,N1(3)); b = V(:,j) - [0; A1(1,2:DisPar.Nx(1),j1,n1)’.*V(1:DisPar.Nx(1)1,j)] - A1(2,:,j1,n1)’.*V(:,j) - [A1(3,1:DisPar.Nx(1)-1,j1,n1)’.*V(2:DisPar.Nx(1),j); 0]; V(:,j) = triangular_linearsystem2(B1(:,:,j1,n1),b); end % the second system: for i = 1:DisPar.Nx(1) i1 = min(i,N2(3)); b = V(i,:) - [0,A2(1,2:DisPar.Nx(2),i1,n1).*V(i,1:DisPar.Nx(2)-1)] - A2(2,:,i1,n1).*V(i,:) - [A2(3,1:DisPar.Nx(2)-1,i1,n1).*V(i,2:DisPar.Nx(2)),0]; V(i,:) = triangular_linearsystem2(B2(:,:,i1,n1),b’)’; end % the middle sum: % V(:,1) = V(:,1) + F(n); % F depends only on t!!! F(:,:,n); V = V + F(:,:,n); % the general case of F % the third system: for i = 1:DisPar.Nx(1) i1 = min(i,N2(3)); b = V(i,:) - [0,A2(1,2:DisPar.Nx(2),i1,n1).*V(i,1:DisPar.Nx(2)-1)] - A2(2,:,i1,n1).*V(i,:) - [A2(3,1:DisPar.Nx(2)-1,i1,n1).*V(i,2:DisPar.Nx(2)),0]; V(i,:) = triangular_linearsystem2(B2(:,:,i1,n1),b’)’; end % the fourth system: 60 for j = 1:DisPar.Nx(2) j1 = min(j,N1(3)); b = V(:,j) - [0; A1(1,2:DisPar.Nx(1),j1,n1)’.*V(1:DisPar.Nx(1)1,j)] - A1(2,:,j1,n1)’.*V(:,j) - [A1(3,1:DisPar.Nx(1)-1,j1,n1)’.*V(2:DisPar.Nx(1),j); 0]; V(:,j) = triangular_linearsystem2(B1(:,:,j1,n1),b); end U(:,:,n+1) = V; end 61 Tài liệu tham khảo [1] Ronald E Mickens (2015), Difference equations: Theory, Applications and Advance Topics, Chapman and Hall/CRC Third Edition [2] Walter G Kelley and Allan C Peterson (2001), Difference equations: An introduction with applications, Harcourt/Academic press Second Edition [3] Lloyd N Trefethen and David Bau III, Numerical Linear Algebra, SIAM, 1997 ... số phương trình đạo hàm riêng [1, 3] Luận văn trình bày số kiến thức liên quan tới phương trình sai phân áp dụng phương trình sai phân tìm nghiệm số phương trình đạo hàm riêng tuyến tính Luận văn. .. Chương Giải phương trình đạo hàm riêng phương trình sai phân 2.1 Rời rạc hóa phương trình đạo hàm riêng Các phương trình đạo hàm riêng phương trình sai phân liên quan đến hàm hai nhiều biến độc... Luận văn trình bày lại trình sử dụng phương trình sai phân để giải số tìm nghiệm phương trình đạo hàm riêng, cụ thể phương trình truyền nhiệt tuyến tính chiều hai chiều nhờ ngơn ngữ lập trình