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