Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 106 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
106
Dung lượng
3,06 MB
Nội dung
_ MỤC LỤC MỤC LỤC LỜI MỞ ĐẦU CHƯƠNG 1: GIỚI THIỆU CHUNG VỀ NGÔN NGỮ MATLAB 1.1 Giới thiệu Matlab 1.2 Hệ thống Matlab 1.3 Vòng lặp For 1.4 Siêu tệp M_File, nguyên hàm 1.5 Giao diện đồ họa 13 1.6 Đồ họa không gian ba chiều 16 1.6.1 Đồ thị đường thẳng 16 1.6.2 Đồ thị bề mặt lưới 16 1.6.3 Thao tác với đồ thị 17 1.6.4 Các đặc điểm khác đồ thị không gian ba chiều 18 1.6.5 Bảng màu 19 1.6.6 Sử dụng bảng màu 20 1.6.7 Sử dụng màu để thêm thông tin 20 1.6.8 Hiển thị bảng màu 20 1.6.9 Thiết lập thay đổi bảng màu 21 CHƯƠNG : TỔNG QUAN VỀ PHƯƠNG TRÌNH SAI PHÂN 22 2.1 Bài toán có trị ban đầu 22 2.1.1 Phát biểu toán 22 2.1.2 Lưới sai phân 22 2.1.3 Hàm lưới 23 2.1.4 Đạo hàm lưới 23 2.1.5 Quy ước viết vô bé 23 2.1.6 Công thức Taylor 23 2.1.7 Liên hệ đạo hàm hàm lưới 24 2.1.8 Phương pháp Euler 25 2.1.9 Phương pháp Euler ẩn 26 2.1.10 Phương pháp Crank – Nicolson 26 2.1.11 Chú ý 27 2.2 Bài toán biên 29 2.2.1 Bài toán vi phân 29 2.2.2 Lưới sai phân 29 2.2.3 Hàm lưới 30 2.2.4 Đạo hàm lưới 30 2.2.5 Phương pháp sai phân 30 2.2.6 Giải toán sai phân phương pháp truy đuổi 31 2.2.7 Sự ổn định toán sai phân 34 2.2.8 Sự xấp xỉ 36 2.2.9 Sự hội tụ 37 2.2.10 Sai số tính toán: 39 2.2.11 Trường hợp điều kiện biên loại ba 39 CHƯƠNG 3: PHƯƠNG PHÁP SAI PHÂN GIẢI BÀI TOÁN TRUYỀN NHIỆT MỘT CHIỀU .42 3.2 Lưới sai phân hàm lưới 43 3.2.1 Lưới sai phân 43 3.2.2 Hàm lưới 45 3.3 Xấp xỉ đạo hàm 45 _ _ 3.4 Phương pháp sai phân 46 3.4.1 Xây dựng phương pháp 46 3.4.2 Bài toán sai phân sai số 47 3.4.3 Sự xấp xỉ 48 3.4.4 Sự ổn định 48 3.4.5 Sự hội tụ 49 3.4.6 Thí dụ 50 3.5 Phương pháp sai phân ẩn 50 3.5.1 Xây dựng phương pháp 50 3.5.2 Bài toán sai phân sai số 52 3.5.3 Sự xấp xỉ 52 3.5.4 Sự ổn định 53 3.5.5 Sự hội tụ 53 3.5.6 Thí dụ 54 3.6 Một số kết thử nghiệm 55 3.6.1 Phương pháp sai phân 55 3.6.2 Phương pháp sai phân ẩn 56 CHƯƠNG 4: PHƯƠNG PHÁP SAI PHÂN GIẢI BÀI TOÁN TRUYỀN NHIỆT DỪNG HAI CHIỀU 57 4.2 Lưới sai phân hàm lưới 59 4.2.1 Lưới sai phân 59 4.2.2 Hàm lưới 59 4.3 Bài toán sai phân 59 4.3.1 Xây dựng toán sai phân 59 4.3.2 Sự xấp xỉ 61 4.3.3 Nguyên lý cực đại 61 4.3.4 Một số hệ 62 4.3.5 Sự ổn định 65 4.3.6 Bài toán sai phân sai số 66 4.3.7 Sự hội tụ sai số 67 4.3.8 Về sai số tính toán 67 4.3.9 Giải toán sai phân phương thức Seidel codãn 68 4.4 Kết thử nghiệm 71 CHƯƠNG 5: PHƯƠNG PHÁP SAI PHÂN GIẢI BÀI TOÁN TRUYỀN NHIỆT NHIỀU CHIỀU .71 5.1 Bài toán truyền nhiệt miền chữ nhật 71 5.1.1 Phát biểu toán 71 5.1.2 Lưới sai phân 72 5.1.3 Hàm lưới đạo hàm lưới 73 5.1.4 Phương pháp sai phân 75 5.1.5 Phương pháp sai phân ẩn 76 5.2 Phương pháp luân phương ẩn 77 5.2.1 Xây dựng phương pháp 77 5.2.2 Cách giải toán sai phân (5.12) - (5.16) 78 5.2.3 Bài toán sai phân sai số 78 5.2.4 Sự ổn định 79 5.2.5 Sự xấp xỉ 82 5.2.6 Sự hội tụ 83 KẾT LUẬN 84 TÀI LIỆU THAM KHẢO .85 PHỤ LỤC 86 _ _ LỜI MỞ ĐẦU Ngày với phát triển không ngừng khoa học công nghệ máy tính đóng vai trò thiếu sống xã hội loài người Trong thực tiễn có nhiều tượng khoa học kỹ thuật dẫn đến toán biên phương trình vật lý toán Việc giải toán đến đáp số số yêu cầu quan trọng Một số trường hợp, công việc thật đơn giản nhờ vào nghiệm tường minh toán dạng công thức sơ cấp, tích phân chuỗi hàm Nhưng đại đa số trường hợp khác, đặc biêt toán có hệ số biến thiên, toán phi tuyến, toán miền việc tìm nghiệm tường minh phức tạp, Trong trường hợp việc tính nghiệm phải dựa vào phương pháp giải gần như: Phương pháp sai phân phương pháp phần tử hữu hạn Phương pháp sai phân phương pháp áp dụng rộng rãi nhiều lĩnh vực khoa học kỹ thuật Nội dung đưa toán cần xét việc giải hệ thức, hệ thức liên hệ giá trị hàm số điểm khác nhau, hàm số đối số nguyên Với thành tựu máy tính nay, thời gian giải toán vi phân tính giây, hay “có thể so sánh với thời gian viết vế phải” Người ta dùng phương pháp sai phân để xét chứng minh tồn nghiệm toán vi phân Với lý trên, em chọn đề tài: “Phương pháp sai phân ứng dụng giải số toán biên phương trình truyền nhiệt” nhằm tìm hiểu phương pháp sai phân, ứng dụng phương pháp để cài đặt chương trình giải số toán biên phương trình truyền nhiệt Bố cục đồ án gồm năm chương: Chương 1: Giới thiệu chung ngôn ngữ Matlab Chương 2: Tổng quan phương pháp sai phân _ _ Chương 3: Phương pháp sai phân giải phương trình truyền nhiệt chiều Chương 4: Phương pháp sai phân giải phương trình truyền nhiệt dừng hai chiều Chương 5: Phương pháp sai phân giải phương trình truyền nhiệt nhiều chiều Đồ án thực khoa Công Nghệ Thông Tin–Đại học Thái Nguyên Trong trình thực đề tài không tránh khỏi thiếu xót hạn chế định Em mong nhận bảo thầy cô giáo, ý kiến đóng góp bạn để chương trình hoàn thiện Em xin chân thành cảm ơn khoa Công Nghệ Thông Tin, môn Khoa Học Máy Tính, thầy cô giáo, bạn đặc biệt thầy Nguyễn Đình Dũng, người trực tiếp hướng dẫn giúp đỡ em hoàn thành đồ án Em xin chân thành cảm ơn! _ _ CHƯƠNG GIỚI THIỆU CHUNG VỀ NGÔN NGỮ MATLAB 1.1 Giới thiệu Matlab MatLab phần mềm chuyên dụng chạy môi trường Windows hãng MathWork sản xuất cung cấp Có thể coi MatLab ngôn ngữ tính toán, kỹ thuật Nó tích hợp công cụ mạnh phục vụ tính toán, lập trình, thiết kế, mô phỏng,… môi trường dễ sử dụng toán lời giải biểu diễn theo ký hiệu toán học quen thuộc Các ứng dụng điển hình: - Toán học tính toán - Phát triển thuật toán - Tạo mô hình, mô - Khảo sát, phân tích số liệu - Đồ hoạ khoa học kỹ thuật - Phát triển ứng dụng, gồm xây dựng giao diện người dùng đồ hoạ GUI Matlab hệ thống tương tác mà phần tử liệu mảng mà không cần khai báo kích thước Điều cho phép giải nhiều toán kỹ thuật , đặc biệt toán liên quan đến ma trận vector Matlab (Matrix Laboratory) Ban đầu Malab viết để phục vụ cho việc tính toán ma trận Trải qua thời gian dài, phát triển thành công cụ hữu ích, ngôn ngữ tính toán kỹ thuật Trong môi trường đại học, công cụ chuẩn cho khoá học mở đầu cao cấp toán học, khoa học kỹ thuật Trong công nghiệp, công cụ lựa chọn cho việc phân tích, phát triển nghiên cứu hiệu suất cao Malab cung cấp họ giải pháp theo hướng chuyên dụng hoá gọi Toolbox Các toolbox cho phép người sử dụng học áp dụng kỹ thuật chuyên dụng cho cho lĩnh vực Toolbox tập hợp toàn diện hàm Matlab (M-File) cho phép mở rộng môi trường Matlab để giải lớp _ _ toán cụ thể Các lĩnh vực có sẵn toolbox bao gồm: xử lý tín hiệu, hệ thống điều khiển, logic mờ, mô phỏng,… 1.2 Hệ thống Matlab Hệ thống Matlab gồm thành phần chính: - Ngôn ngữ Matlab: ngôn ngữ ma trận, mảng cấp cao với câu lệnh, hàm, cấu trúc liệu, vào/ ra, tính lập trình hướng đối tượng Nó cho phép lập trình ứng dụng từ nhỏ đến ứng dụng lớn phức tạp - Môi trường làm việc Matlab: Đây công cụ phương tiện mà ta sử dụng lập trình Nó bao gồm phương tiện cho việc quản lý biến không gian làm việc Workspace xuất nhập liệu, gỡ rối,… - Xử lý đồ họa: Đây hệ thống đồ hoạ Matlab Nó bao gồm lệnh cao cấp cho trực quan hoá liệu hai chiều ba chiều, xử lý ảnh, ảnh động,… Nó cung cấp lệnh cấp thấp cho phép ta tuỳ biến giao diện đồ họa xây dựng giao diện đồ hoạ mạnh hoàn chỉnh ứng dụng Matab - Thư viện toán học Matlab: Đây tập hợp khổng lồ thuật toán tính toán từ hàm sin, cos,… tới hàm nghịch đảo ma trận, tìm trị riêng ma trận,… - Giao diện chương trình ứng dụng Matlab API (Application program Interface): Đây thư viện cho phép viết chương trình C Fortran tương thích với Matlab, Simulink, chương trình kèm với Matlab, hệ thống tương tác với việc mô hệ động học phi tuyến Nó chương trình đồ hoạ sử dụng chuột để thao tác cho phép mô hình hoá hệ thống cách vẽ sơ đồ khối hình Nó làm việc với hệ thống tuyến tính, hệ thống phi tuyến, hệ thống liên tục theo thời gian, hệ gián đoạn theo thời gian,… 1.3 Vòng lặp For MATLAB có phiên riêng vòng lặp “DO” “FOR” tìm thấy ngôn ngữ máy tính Nó cho phép câu lệnh, nhóm lệnh, lặp lại số lần cố định trước Ví dụ: For i=1:n, x(i) = 0, end _ _ Gán vào n phần tử đầu x Nếu n nhỏ lệnh hợp pháp, câu lệnh bên không thực Nếu x chưa có, có n phần tử không gian thêm vào tự động phân phối Có thể có tổ hợp vòng lặp thường thụt vào để dễ đọc For i = : m For j = : n A (i,j) = / (i + j - 1); End End A Dấu chấm phẩy cuối câu lệnh bên vòng lặp để hủy việc in lặp hình, lệnh A sau vòng lặp hiển thị kết cuối Một điểm quan trọng là: vòng lặp for phải gắn với từ khóa end Nếu nhập vào lệnh: For i = : n, x(i) = Thì hệ thống kiên nhẫn chờ nhập lệnh lại thân vòng lặp Không có xảy đánh vào end Một ví dụ khác, giả sử: t = -1 Và muốn phát sinh ma trậnVandermonde, ma trận có cột lũy thừa phần tử t _ _ A= -1 -1 0 0 1 1 1 81 27 625 125 25 Ở vòng lặp kép rõ ràng n = max (size(t)) for j = : n for i = : n A(i,j) = t(i) ^ (n-j); end end Nhưng vòng lặp đơn với phép toán vectơ có ý nghĩa minh họa cho vấn đề vòng lặp for chạy A(:,n) = ones(n,1); For j = n-1 : -1 : A(:,j) = t * A(:,j+1); End Dạng tổng quát vòng lặp for là: For v = expression Statements End expression ma trận, MATLAB, cột ma trận gán cột vào biến v lệnh statements thực Một cách rõ ràng việc hoàn thành công việc là: _ _ E = expression; [ m,n ] = size (E); For j = : n v = E (:,j); Statements End Thông thường expression loại m:n, m:i:n, ma trận có dòng, cột đơn giản đại lượng vô hướng Trong trường hợp đặc biệt này, vòng lặp for giống vòng lặp “FOR” hay “DO” ngôn ngữ lập trình khác 1.4 Siêu tệp M_File, nguyên hàm MATLAB thường dùng chế độ dòng lệnh; nhập dòng lệnh đơn MATLAB thực hiển thị kết MATLAB có khả thực dãy lệnh lưu tệp Hai chế độ tạo thành môi trường thông dịch Các tệp chứa lệnh MATLAB gọi siêu tệp M-file chúng có tên mở rộng “.m” Ví dụ tên tệp csdl.m chứa lệnh MATLAB để tính hàm csdl Một M-file gồm dãy lệnh chuẩn MATLAB, chứa tham chiếu đến M-file khác, M-file gọi đệ quy đến Kiểu thứ M-file dãy dài tùy ý lệnh Các tệp gọi tệp nguyên Kiểu thứ hai M-file cung cấp khả mở rộng MATLAB, gọi tệp hàm, chúng cho phép hàm thêm vào hàm có Nhiều tính MATLAB nhận từ khả để tạo hàm mới, để giải toán người dùng định Cả hai kiểu M-file, nguyên hàm, tệp văn ASCII bình thường, tạo cách dùng trình soạn thảo văn hay trình xử lý từ tùy chọn _ _ Tệp nguyên Khi nguyên gọi, MATLAB thực lệnh tệp, thay cho việc đợi nhập từ bàn phím Các lệnh tệp nguyên thực toàn cục liệu vùng làm việc Các nguyên thường hữu ích cho việc vận hành phân tích, giải toán, thực công việc đòi hỏi nhiều lệnh mà trở nên cồng kềnh chế độ tương tác Ví dụ: Giả sử lệnh MATLAB % Một M-file để tính số Fibonnaci f = [1 1]; i = 1; While f(i) + f(i+1) < 1000 f (i+2) = f(i) + f(i+1); i = i + 1; end plot (f) Được chứa tệp tên Fibonnaci.m Vào lệnh Fibonnaci làm cho MATLAB thực lệnh, tính 16 số Fibonnaci tạo hình vẽ Sau thực tệp xong, biến lại vùng làm việc Các chương trình mẫu MATLAB ví dụ tốt cho cách sử dụng M-file để thực nhiều nhiệm vụ phức tạp Tên nguyên statup.m tự động thi hành MATLAB gọi Các vật lý, thừa số chuyển đổi kỹ thuật, thứ khác muốn định nghĩa trước vùng làm việc đặt tệp Trên hệ thống mạng nhiều người dùng, có nguyên tên matlab.m dành riêng để dùng cho quản lý hệ thống Nó dùng để cài đặt định nghĩa thông điệp rộng rãi Tệp hàm Nếu dòng thứ M-file chứa từ “function”, tệp tệp hàm Một hàm khác với nguyên truyền đối số, biến định nghĩa, thực bên tệp cục hàm không thao tác toàn cục _ 10 _ B(dem+0)=0; for i=1:N-1 B(dem+i)=gama; end; C(dem+0)=1; for i=1:N-1 C(dem+i)=1+2*gama; end; C(dem+N)=1; F(dem+0)=v(dem+0,dem+j+1); for i=1:N-1 F(dem+i)=v(dem+i,dem+j)+ht*ff(dem+i,dem+j+1); end; F(dem+N)=v(dem+N,dem+j+1); phi=truyduoi(A,B,C,F,N); for i=0:N v(dem+i,dem+j+1)=phi(dem+i); end; end; function eval2=eval2(fxt,a,b) syms x syms t ft=subs(fxt,x,a); eval2=subs(ft,t,b); function phi=truyduoi(a,b,c,F,n) _ 92 _ dem=1; alfa(dem+1)=b(dem+0)/c(dem+0); beta(dem+1)=F(dem+0)/c(dem+0); for i=1:n-1; alfa(dem+i+1)=b(dem+i)/(c(dem+i)-alfa(dem+i)*a(dem+i)); end; for i=1:n-1; beta(dem+i+1)=(a(dem+i)*beta(dem+i)+F(dem+i))/(c(dem+i)alfa(dem+i)*a(dem+i)); end; phi(dem+n)=(a(dem+n)*beta(dem+n)+F(dem+n))/(c(dem+n)alfa(dem+n)*a(dem+n)); for i=1:n; phi(dem+n-i)=alfa(dem+n-i+1)*phi(dem+n-i+1)+beta(dem+n-i+1); end; Bài toán trình truyền nhiệt dừng hai chiều % Nhập liệu function initialize_gui(fig_handle, handles) clc data.txta=0; data.txtb=pi; data.txtc=0; data.txtd=pi; data.txtN=20; data.txtM=20; data.txte=0.1; _ 93 _ data.txtlamda=1; data.txtga='0'; data.txtgb='0'; data.txtgc='sin(x)'; data.txtgd='-sin(x)'; data.txtf='-2*sin(x)*cos(y)'; data.txtndung='sin(x)*cos(y)'; setappdata(fig_handle, 'metricdata',data); set(handles.txta,'String', data.txta); set(handles.txtb,'String',data.txtb); set(handles.txtc,'String', data.txtc); set(handles.txtd,'String', data.txtd); set(handles.txtN,'String', data.txtN); set(handles.txtM,'String', data.txtM); set(handles.txte,'String', data.txte); set(handles.txtlamda,'String', data.txtlamda); set(handles.txtga,'String',data.txtga); set(handles.txtgb,'String',data.txtgb); set(handles.txtgc,'String',data.txtgc); set(handles.txtgd,'String',data.txtgd); set(handles.txtf,'String',data.txtf); set(handles.txtndung,'String',data.txtndung); % Chức tính toán function cmdtinh_Callback(hObject, eventdata, handles) clc; _ 94 _ data = getappdata(gcbf, 'metricdata'); a=data.txta; b=data.txtb; c=data.txtc; d=data.txtd; ga=data.txtga; gb=data.txtgb; gc=data.txtgc; gd=data.txtgd; f=data.txtf; ndung=data.txtndung; N=data.txtN; M=data.txtM; e=data.txte; lamda=data.txtlamda; t=1; v=seidelcodan(a,b,c,d,ga,gb,gc,gd,f,N,M,e,lamda) X=linspace(a,b,N+1); Y=linspace(c,d,M+1); if data.txtndung ~='0' for i=0:N for j=0:M ndungxy(t+i,t+j)=eval2(ndung,X(t+i),Y(t+j)); end; end; _ 95 _ saiso=abs(ndungxy-v); saisomax=max(max(saiso)); set(handles.txtsaiso,'String', saisomax); end; [X0 Y0]=meshgrid(Y,X); mesh(X0,Y0,v); s=num2str(v,4.8); set(handles.lstkq,'String', s); box on % Seidel co dãn function v=seidelcodan(a,b,c,d,ga,gb,gc,gd,fxy,N,M,e,lamda); syms x y; h=(b-a)/N k=(d-c)/M gama=(h/k)^2 t=1; for i=0:N for j=0:M epsilon(t+i,t+j)=eps; end; end; X=linspace(a,b,N+1); Y=linspace(c,d,M+1); for i=0:N for j=0:M _ 96 _ f(t+i,t+j)=eval2(fxy,X(t+i),Y(t+j));%Ham ve phai end; end; v=zeros(N+1,M+1);%Xap xi dau la ma tran khong for j=0:M v(t+0,t+j)=subs(ga,y,Y(t+j));%Bien trai v(t+N,t+j)=subs(gb,y,Y(t+j));%Bien phai end; for i=0:N v(t+i,t+0)=subs(gc,x,X(t+i));%Bien duoi v(t+i,t+M)=subs(gd,x,X(t+i));%Bien tren end; u=v; for j=1:M-1 for i=1:N-1 v(t+i,t+j)=(1/(2*(1+gama)))*(gama*v(t+i,t+j-1)+v(t+i1,t+j)+u(t+i+1,t+j)+gama*u(t+i,t+j+1)-h*h*f(t+i,t+j)); v(t+i,t+j)=lamda*v(t+i,t+j)+(1-lamda)*u(t+i,t+j); end; end; saiso=abs(v-u)./(abs(v)+epsilon); saisomax=max(max(saiso)); while saisomax>e u=v; for j=1:M-1 _ 97 _ for i=1:N-1 v(t+i,t+j)=(1/(2*(1+gama)))*(gama*v(t+i,t+j-1)+v(t+i1,t+j)+u(t+i+1,t+j)+gama*u(t+i,t+j+1)-h*h*f(t+i,t+j)); v(t+i,t+j)=lamda*v(t+i,t+j)+(1-lamda)*u(t+i,t+j); end; end; saiso=abs(v-u)./(abs(v)+epsilon); saisomax=max(max(saiso)); end; function eval2=eval2(fxy,a,b) syms x syms y fy=subs(fxy,x,a); eval2=subs(fy,y,b); Bài toán truyền nhiệt nhiều chiều % Nhập liệu function initialize_gui(fig_handle, handles) clc; data.txta=0; data.txtb=1; data.txtc=0; data.txtd=1; data.txtT=1; data.txtN=4; data.txtM=4; _ 98 _ data.txtP=4; data.txtnn=2; data.txtga='sin(y+t)'; data.txtgb='sin(y+t+1)'; data.txtgc='sin(x+t)'; data.txtgd='sin(x+t+1)'; data.txtg0='sin(x+y)'; data.txtfxyt='cos(x+y+t)+2*sin(x+y+t)'; setappdata(fig_handle, 'metricdata',data); set(handles.txta,'String', data.txta); set(handles.txtb,'String',data.txtb); set(handles.txtc,'String', data.txtc); set(handles.txtd,'String',data.txtd); set(handles.txtT,'String', data.txtT); set(handles.txtN,'String', data.txtN); set(handles.txtM,'String', data.txtM); set(handles.txtP,'String', data.txtP); set(handles.txtnn,'string',data.txtnn); set(handles.txtga,'String',data.txtga); set(handles.txtgb,'String',data.txtgb); set(handles.txtgc,'String',data.txtgc); set(handles.txtgd,'String',data.txtgd); set(handles.txtg0,'String',data.txtg0); set(handles.txtfxyt,'String',data.txtfxyt); % Chức tính toán _ 99 _ clc dem = 1; data = getappdata(gcbf, 'metricdata'); a=data.txta; b=data.txtb; c=data.txtc; d=data.txtd; T=data.txtT; ga=data.txtga; gb=data.txtgb; gc=data.txtgc; gd=data.txtgd; g0=data.txtg0; fxyt=data.txtfxyt; N=data.txtN; M=data.txtM; P=data.txtP; nn=data.txtnn; ndung=data.txtndung; v=tnnhieuchieu_span(a,b,c,d,T,ga,gb,gc,gd,g0,fxyt,N,M,P,nn) x=linspace(a,b,N+1); y=linspace(c,d,M+1); t=linspace(0,T,P+1); if data.txtndung ~='0' for j=0:M _ 100 _ for i=0:N ndungxyt(dem+i,dem+j)=eval3xyt(ndung,x(dem+i),y(dem+j),t(dem+nn)); end; end; saiso=abs(ndungxyt-v); saisomax=max(max(saiso)); set(handles.txtsaiso,'String', saisomax); end; [x0 y0]=meshgrid(y,x); mesh(x0,y0,v); s=num2str(v,4.8); set(handles.lstkq,'String', s); box on % Luân phương ẩn function v=tnnhieuchieu_span(a,b,c,d,T,ga,gb,gc,gd,g0,fxyt,N,M,P,nn); syms x y t; to=T/P h=(b-a)/N k=(d-c)/M r=to/(h*h); s=to/(k*k); dem=1; xx=linspace(a,b,N+1); yy=linspace(c,d,M+1); tt=linspace(0,T,P+1); _ 101 _ %Tinh bien v tai thi diem dau for i=0:N for j=0:M v(dem+i,dem+j)=eval2xy(g0,xx(dem+i),yy(dem+j)); end; end; %Tinh v o tai thoi diem 0 for n=0:nn-1 n %Giai he o lop thu n+1/2 clear A B C F phi for j=1:M-1 v12(dem+0,dem+j)=eval2yt(ga,yy(dem+j),tt(dem+n)+to/2); v12(dem+N,dem+j)=eval2yt(gb,yy(dem+j),tt(dem+n)+to/2); A(dem+N)=0; for i=1:N-1 A(dem+i)=r/2; end; B(dem+0)=0; for i=1:N-1 B(dem+i)=r/2; end; C(dem+0)=1; for i=1:N-1 C(dem+i)=1+r; _ 102 _ end; C(dem+N)=1; F(dem+0)=eval2yt(ga,yy(dem+j),tt(dem+n)+to/2); for i=1:N-1 F(dem+i)=0.5*s*v(dem+i,dem+j-1)+(1s)*v(dem+i,dem+j)+0.5*s*v(dem+i,dem+j+1)+0.5*to*eval3xyt(fxyt,xx(dem+i),yy( dem+j),tt(dem+n)+to/2); end; F(dem+N)=eval2yt(gb,yy(dem+j),tt(dem+n)+to/2); phi=truyduoi(A,B,C,F,N); for i=0:N v12(dem+i,dem+j)=phi(dem+i); end; end; %Giai he o lop thu n+1 clear A B C F phi for i=1:N-1 v(dem+i,dem+0)=eval2xt(gc,xx(dem+i),tt(dem+n+1)); v(dem+i,dem+M)=eval2xt(gd,xx(dem+i),tt(dem+n+1)); A(dem+N)=0; for j=1:M-1 A(dem+j)=s/2; end; B(dem+0)=0; for j=1:M-1 B(dem+j)=s/2; _ 103 _ end; C(dem+0)=1; for j=1:M-1 C(dem+j)=1+s; end; C(dem+M)=1; F(dem+0)=eval2xt(gc,xx(dem+i),tt(dem+n+1)); for j=1:M-1 F(dem+j)=0.5*r*v12(dem+i-1,dem+j)+(1r)*v12(dem+i,dem+j)+0.5*r*v12(dem+i+1,dem+j)+0.5*to*eval3xyt(fxyt,xx(dem+i ),yy(dem+j),tt(dem+n)+to/2); end; F(dem+M)=eval2xt(gd,xx(dem+i),tt(dem+n+1)); phi=truyduoi(A,B,C,F,M); for j=0:M v(dem+i,dem+j)=phi(dem+j); end; end; for j=0:M v(dem+0,dem+j)=eval2yt(ga,yy(dem+j),tt(dem+n+1)); v(dem+N,dem+j)=eval2yt(gb,yy(dem+j),tt(dem+n+1)); end; for i=0:N v(dem+i,dem+0)=eval2xt(gc,xx(dem+i),tt(dem+n+1)); v(dem+i,dem+M)=eval2xt(gd,xx(dem+i),tt(dem+n+1)); end; _ 104 _ end; function phi=truyduoi(a,b,c,F,n) dem=1; alfa(dem+1)=b(dem+0)/c(dem+0); beta(dem+1)=F(dem+0)/c(dem+0); for i=1:n-1; alfa(dem+i+1)=b(dem+i)/(c(dem+i)-alfa(dem+i)*a(dem+i)); end; for i=1:n-1; beta(dem+i+1)=(a(dem+i)*beta(dem+i)+F(dem+i))/(c(dem+i)alfa(dem+i)*a(dem+i)); end; phi(dem+n)=(a(dem+n)*beta(dem+n)+F(dem+n))/(c(dem+n)alfa(dem+n)*a(dem+n)); for i=1:n; phi(dem+n-i)=alfa(dem+n-i+1)*phi(dem+n-i+1)+beta(dem+n-i+1); end; function eval2xy=eval2xy(fxy,a,b) syms x syms y fy=subs(fxy,x,a); eval2xy=subs(fy,y,b); function eval2xt=eval2xt(fxt,a,b) syms x syms t ft=subs(fxt,x,a); _ 105 _ eval2xt=subs(ft,t,b); function eval2yt=eval2yt(fyt,a,b) syms y syms t ft=subs(fyt,y,a); eval2yt=subs(ft,t,b); function eval3xyt=eval3xyt(fxyt,a,b,c) syms x syms y syms t fyt=subs(fxyt,x,a); ft=subs(fyt,y,b); eval3xyt=subs(ft,t,c); _ 106 [...]... đó phụ thuộc liên tục vào vế phải của phương trình sai phân và điều kiện biên, nghĩa là khi vế phải của phương trình sai phân và điều kiện biên thay đổi ít thì nghiệm cũng thay đổi ít Bất đẳng thức (2.32) nói lên ý nghĩa đó, ta gọi nó là bất đẳng thức ổn định của bài toán (2.24) – (2.25) Định lý :Bài toán sai phân (2.24) - (2.25) là bài toán ổn định Chứng minh Ở trên bài toán sai phân (2.24) – (2.25)... Ở đây khi đã biết vi muốn tính ra vi 1 ta chỉ phải tính giá trị của biểu thức ở vế phải của (2.10), chứ không phải giải một phương trình đại số nào Vì lẽ đó phương pháp sai phân (2.10), (2.11) thuộc loại phương pháp sai phân hiện Nó cũng có tên là phương pháp Euler hiện 2.1.9 Phương pháp Euler ẩn Nếu trong (2.1) ta thay u ' xi bởi u xi thì (2.6) cho: u xi u xi u xi 1 u ' xi ... caxis(‘auto’) sẽ hồi phục giá trị mặc định của cmin và cmax CHƯƠNG 2 TỔNG QUAN VỀ PHƯƠNG TRÌNH SAI PHÂN 2.1 Bài toán có trị ban đầu 2.1.1 Phát biểu bài toán Cho khoảng x 0 , X Tìm hàm u u x xác định tại x 0 , X và thỏa mãn: u ' f x, u x0 x X u x 0 (2.1) (2.2) Trong đó f x, u là một hàm số cho trước và là một số cho trước Giả sử bài toán (2.1), (2.2) có nghiệm u u x đủ... N (2.31) Định nghĩa: Nói bài toán sai phân (2.24) – (2.25) là bài toán ổn định nếu nó có nghiệm duy nhất với mọi vế phải và điều kiện biên, đồng thời nghiệm thỏa mãn: _ 34 _ v M1 f , M 1 const (2.32) Ý nghĩa của bài toán ổn định là : Bài toán sai phân có nghiệm duy nhất, đồng... phân này thuộc loại phương pháp sai phân ẩn Nó cũng có tên là phương phápCrank - Nicolson ẩn 2.1.11 Chú ý Để có phương pháp Euler hiện ta bỏ đã qua vô cùng bé bậc hai Oh 2 ở (2.9) Để có phương pháp Euler ẩn ta đã bỏ qua vô cùng bé bậc hai Oh 2 ở (2.12) Để có phương pháp Crank - Nicolson ta đã bỏ qua vô cùng bé bậc ba Oh 3 ở (2.14) Nhận xét đó khiến ta hi vọng rằng phương pháp Crank - Nicolson... suy ra (2.19) và (2.20) 2.2 Bài toán biên 2.2.1 Bài toán vi phân Cho hai số a và b với Tìm hàm u u x xác định tại a x b thỏa mãn ' Lu ku ' qu f x , u a , a xb (2.21) u b (2.22) Trong đó k k x , q q x , f x là những hàm số đủ trơn thỏa mãn: 0 c0 k x c1 , c0 , c1 const, qx 0 (2.23) Còn , là những số cho trước Giả sử bài toán (2.21)... thức (1.10) cho phép tính vi 1 khi đã biết v i Dựa vào (1.2) ta đặt thêm v0 điều kiện: (2.11) Thì hai công thức (2.10), (2.11) cho phép tính ra tất cả các Phương pháp tính bằng (2.10), (2.11) gọi là phương pháp Euler Sau khi đã có v i ta xem v i là gần đúng của u xi Phương pháp Euler là phương pháp sai phân đơn giản nhất để giải gần đúng bài toán (2.1), (2.2) Ở đây khi đã biết vi muốn tính ra... tính ra v i ta phải giải phương trình đại số (2.13) đối với ẩn số v i Vì lẽ đó phương pháp sai phân này thuộc loại phương pháp sai phân ẩn Nó cũng có tên là phương pháp Euler ẩn 2.1.10 Phương pháp Crank – Nicolson _ 26 _ Nếu áp dụng (2.7) ta có: u xi1 u xi u ' xi 1 2 O h 2... đủ trơn trên a, b Chú ý: Đây chính là bài toán biên của phương trình elip một chiều Nó mô tả hiện tượng truyền nhiệt dừng trong một thanh vật chất mà nhiệt độ ở hai đầu mút của thanh được ấn định trước 2.2.2 Lưới sai phân Ta chia đoạn a, b thành N đoạn con bằng nhau, mỗi đoạn con dài h b a N bởi các điểm xi a ih, i 0,1, N Mỗi điểm xi gọi là một nút lưới, h gọi là bước lưới Tập: ... và thay u xi bởi v i xem là gần đúng của u xi , ta được: v i vi 1 h f x i , vi (2.13) Công thức (2.13) cho phép tính v i khi đã biết vi 1 Thêm điều kiện (2.11) thì các công thức (2.13), (2.11) cho phép tính ra tất cả các vi Phương pháp tính vi bằng (2.13), (2.11) lại là phương pháp sai phân khác Ở đây khi đã biết vi 1 muốn tính ra v i ta phải giải phương trình đại số (2.13) đối với