1. Trang chủ
  2. » Luận Văn - Báo Cáo

giới thiệu về phần mềm matlab, tóm tắt một số lệnh cơ bản trong matlab nhằm phục vụ cho lập trình phần tử hữu hạn và thực hiện lập trình phần tử hữu hạn để giải bài toán cụ thể

37 246 4

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 37
Dung lượng 722,44 KB

Nội dung

MỤC LỤC Mở đầu Chương 1: Giới thiệu Matlab 1.1 Khái niệm Matlab 1.2 Ứng dụng MatLab 1.3 Vẽ đồ thị Matlab Chương 2: Lập trình phần tử hữu hạn .21 2.1 Tổng quan lập trình phần tử hữu hạn 21 2.2 Thực hành lập trình 21 Kết luận 36 Tài liệu tham khảo 37 MỞ ĐẦU Ngày nay, nhiều phương pháp tính số phát triển mạnh mẽ trở thành công cụ hữu hiệu khơng thể thiếu giải tốn Khoa học – Kỹ thuật ( phương pháp sai phân hữu hạn, phương pháp phần tử hữu hạn, phương pháp phần tử biên,…) Trong đó, phương pháp phần tử hữu hạn trở thành công nghệ phần mềm phổ biến hiệu Nhiều phần mềm ứng dụng đời dựa sở phương pháp phần tử hữu hạn như: SAP, NASTRAN, ABAQUS,SAMCEF, MIDAS, ANSYS … Trong báo cáo này, chúng em sử dụng Matlab - công cụ phần mềm có lợi kỹ thuật lập trình phần tử hữu hạn, đáp ứng nhiều tốn MATLAB mơi trường tính tốn số lập trình, thiết kế cơng ty MathWorks MATLAB (Matrix Laboratory) vừa ngơn ngữ lập trình vừa phần mềm ứng dụng tính tốn hiệu MATLAB cho phép tính tốn số với ma trận, vẽ đồ thị hàm số hay biểu đồ thông tin, thực thuật toán, tạo giao diện người dùng liên kết với chương trình máy tính viết nhiều ngơn ngữ lập trình khác MATLAB giúp đơn giản hóa việc giải tốn tính tốn kĩ thuật so với ngơn ngữ lập trình truyền thống C, C++, Fortran MATLAB ngôn ngữ tính tốn khoa học Bản báo cáo nhóm chúng em bao gồm nội dung: giới thiệu phần mềm Matlab, tóm tắt số lệnh Matlab nhằm phục vụ cho lập trình phần tử hữu hạn thực lập trình phần tử hữu hạn để giải tốn cụ thể Do trình độ thời gian nghiên cứu hạn chế nên vấn đề mà nhóm tơi trình bày khơng tránh khỏi thiếu sót Chúng em kính mong nhận bảo, góp ý thầy bạn để báo cáo hoàn thiện CHƯƠNG I: GIỚI THIỆU VỀ MATLAB 1.1 Lịch sử phát triển Matlab MATLAB, nguyên sơ viết ngôn ngữ Fortran, 1980 phận dùng nội Đại học Stanford Năm 1983, Jack Little, người học MIT Stanford, viết lại MATLAB ngơn ngữ C xây dựng thêm thư viện phục vụ cho thiết kế hệ thống điều khiển, hệ thống hộp công cụ (tool box), mô Jack xây dựng MATLAB trở thành mơ hình ngơn ngữ lập trình sở ma trận (matrix-based programming language) Steve Bangert người viết trình thơng dịch cho MATLAB Năm 1984, Jack Little kết hợp với Moler Steve Bangert định đưa MATLAB thành dự án thương mại - công ty The MathWorks đời thời gian Phiên MATLAB 1.0 dời năm 1984 viết C cho MSDOS PC Ban đầu Matlab phát triển để hỗ trợ sinh viên sử dụng hai thư viện LINPACK EISPACK dùng cho đại số tuyến tính (viết Fortran) mà khơng cần biết lập trình Fortran Năm 1986, MATLAB đời hỗ trợ UNIX Năm 1987, MATLAB phát hành Năm 1990 Simulink 1.0 phát hành gói chung với MATLAB Năm 1992 MATLAB thêm vào hỗ trợ 2-D 3-D đồ họa màu ma trận truy tìm Năm cho phát hành phiên MATLAB Student Edition(MATLAB ấn cho học sinh) Năm 1993 MATLAB cho MS Windows đời Đồng thời cơng ty có trang web www.mathworks.com Năm 1995 MATLAB cho Linux đời Trình dịch MATLAB có khả chuyển dịch từ ngôn ngữ MATLAB sang ngôn ngữ C phát hành dịp Năm 1996 MATLAB bao gồm thêm kiểu liệu, hình ảnh hóa, truy sửa lỗi (debugger), tạo dựng GUI Năm 2000 MATLAB cho đổi môi trường làm việc MATLAB, thay LINPACK EISPACK LAPACK BLAS.[1] Năm 2002 MATLAB 6.5 phát hành cải thiện tốc độ tính tốn, sử dụng phương pháp dịch JIT (Just in Time) tái hỗ trợ MAC Năm 2004 MATLAB phát hành, có khả xác đơn kiểu nguyên, hỗ trợ hàm lồng nhau, cơng cụ vẽ điểm, có mơi trường phân tích số liệu tương tác Đến tháng 12, 2008, phiên 7.7 phát hành với SP3 cải thiện Simulink với 75 sản phẩm khác Năm 2009 cho đời phiên 7.8 (R2009a) 7.9 (R2009b) Năm 2010 phiên 7.10 (R2010a) phát hành Matlab dùng rộng rãi giáo dục, phổ biến giải toán số trị (cả đại số tuyến tính lẫn giải tích) nhiều lĩnh vực kĩ thuật 1.2 Vài nét thao tác Matlab Các lệnh vẽ đồ họa matlab: matlab cung cấp loạt hàm để vẽ biểu diễn vecto số liệu giải thích in đường cong Plot đồ họa 2-D với số liệu trục vơ hướng tuyến tính Plot3 đồ họa 3-D với số liệu trục vô hướng tuyến tính Polar đồ họa hệ tọa độ cực Loglog đồ họa với trục logarit Semilogx đồ họa với trục x logarit trục y tuyến tính Semilogy đồ họa với trục y logarit trục x tuyến tính Plotyy đồ họa với trục y có nhãn bên trái bên phải Đặc tả màu kích thước đường vẽ: Để đặt tả màu kích thước đường vẽ ta dùng tham số sau: Linewidth: độ rộng đường thẳng tính điểm MarkerEdgeColor: màu cạnh khối đánh dấu MarkerFaceColor: màu khối đánh dấu MarkerSize: kích thước khối đánh dấu Các phép tốn logic quan hệ: Lệnh Giải thích == Hai biểu thức = Hai biểu thức không < = (> =) ) & Một biểu thức nhỏ (lớn hơn) biểu thức khác Một biểu thức nhỏ (lớn hơn) biểu thức khác Phép toán logic “and” Phép toán logic “not” | Phép toán logic “or” Các hàm ma trận: Lệnh inv Det Rank Giải thích Ma trận nghịch đảo ma trận Định thức ma trận Hạng ma trận Cond Eye(n) Trace Zeros(n,m) Bảng dấu: BT b g r c m y k w Số điều kiện ma trận Ma trận đơn vị cấp n Tổng phần tử đường chéo ma trận Ma trận khơng cỡ n × m Màu xanh da trời xanh đỏ BT O X Ðánh dấu chấm vòng tròn dấu x BT : - Kiểu nét vẽ nét liền nét chấm nét gạch chấm xanh da trời nhạt đỏ tím vàng đen trắng + dấu + nét đứt * S D ∧ dấu hoa thị hình vng hình thoi tam giác hướng xuống tam giác hướng lên tam giác hướng phải tam giác hướng trái ∨ < > P H 1.3 năm cánh sáu cánh • Ứng dụng Matlab Thư viện dựng sẵn to lớn phong phú nhiều lĩnh vực • Giải vấn đề cách số học • Matlab ứng dụng thuật tốn kiểm chứng nên kết đáng tin cậy • Lệnh hàm sử dụng đơn giản • Có thể xây dựng hàm riêng cho ứng dụng đặc biệt • Cung cấp thư viện hàm đồ họa mạnh • Cung cấp gói ứng dụng Simulink đầy đủ để mơ Nhìn chung, Matlab cơng cụ hữu ích cho thao tác tính tốn ma trận, vectơ, tính tích phân, đạo hào, vẽ đồ thị,v.v… Các thao tác phần phương pháp phần tử hữu hạn Sau xin giới thiệu tóm tắt lệnh Matlab nhằm phục vụ cho việc lập trình phần tử hữu hạn 1.4 Ma trận Matlab 1.3.1 Các cách nhập ma trận Matlab Matlab cung cấp vài phương tiện cho người sử dụng để tạo ma trận, phương tiện có ưu điểm sử dụng tùy theo yêu cầu tốn Nói chung Matlab cung cấp ba phương tiện - Nhập ma trận trực tiếp từ cửa sổ Command Window - Nhập ma trận từ m-file - Nhập ma trận từ hàm có sẵn Matlab a Nhập ma trận trực tiếp từ cửa sổ Command Winodow Trong mơn học tốn cao cấp biết nhập ma trận sau: A= Đây là5 một3 ma1trận có số hàng m=3 số cột n=3 Để nhập ma trận Matlab ta nhập trực tiếp sau: Từ dòng nhắc lệnh cửa sổ command Window ta nhập >> A=[2,7,0;4,8,6;5,3,1] nhấn Enter cho kết là: A= A Hoặc >> A = 8 = Trong trường hợp số phần tử hàng q dài ta xuống dịng dấu ba chấm … Ví dụ: >> A=[1,2,3,4, ,5,6,7,8,9] A=1 b Nhập ma trận từ m-file Ta nhập ma trận cửa sổ soạn thảo M-file, mở cửa sổ cách vào File New M-file Một cửa số soạn thảo thực cho phép bạn soạn thảo dạng text, cửa sổ soạn thảo dạng text bạn soạn thảo từ file word sau sau copy vào cửa sổ M-file Để nhập ma trận ta soạn thảo tương tự cửa sổ command window sau lưu vào file sau: Ví dụ: A=[2,7,0;4,8,6;5,3,1]; %khơng có dấu chấm phẩy in kết Cũng tương tư số phần tử hàng nhiều ta xuống dịng >> A=[1,2,3,4, 5,6,7,8,9]; Sau kết thúc soạn thảo ta lưu vào tên_file Để thực thi lệnh nhập M-file ta dùng lệnh sau command window sau: >> ten_file; c Nhập ma trận từ hàm có sẵn Matlab Matlab có thư viện hàm cho phép tạo ma trận Sau số hàm: - ones(m,n) tạo ma trận kích thước m x n, với phần tử 1, ones(m) tạo ma trận vuông cấp m, với phần tử - zeros(m,n) tạo ma trận kích thước m x n, với phần tử 0, zeros(m) tạo ma trận vuông cấp m - eyes(m) tạo ma trận đơn vị cấp m Ví dụ: >>ones(2,3) ans = 1 1 >> eye(2) ans = 1 >> zeros(2,3) ans = 0 0 0 1.3.2 Một số phép tính ma trận Kích cỡ ma trận: Kích cỡ ma trận kiểm tra với lệnh sau: >> A=[2,7,0;4,8,6;5,3,1] A= >> size(A) ans = 3 Ma trận chuyển vị: Để tìm chuyển vị ma trận A, nhập: >> A' ans = Các hàng cột: Matlab cung cấp phép toán hàng cột ma trận Biểu thức sau: >> A=[2,7,0;4,8,6;5,3,1] A= >> A(:,3) ans = cột thứ ba ma trận A Thêm nữa, lệnh >> A(1,:) ans = hàng ma trận A Cộng ma trận: Cộng hai ma trận thực sau: >> A=[2,7,0;4,8,6;5,3,1] A= 10 Ma trận vector phần tử: a) Tính xác ma trận vec tơ phần tử thứ i: Từ công thức nghiệm yếu ta có ma trận phần tử thứ i là: • • Fi = Với = ; = - ; =1+ • • b) Tính gần ma trận vec tơ phần tử thứ i Để tính gần ma trận vecto phần tử ta dùng qui tắc:  QUY TẮC HÌNH THANG HAI ĐIỂM:  với ⟺ ⟺ Đặt ; ; Áp dụng quy tắc hình thang hai điểm, ta có:     Vậy:  Đặt 23 Vậy:  QUY TẮC SIMPSON BA ĐIỂM : với Đặt Áp dụng quy tắc Simpson ba điểm, ta có:  Tính  = = =  = , với : = • = = • = = = Vậy :  = Tính 24 = • = = Với: = • = = Vậy :  QUY TẮC GAUSS GEGENDRE MỘT ĐIỂM:  với ⟺ ⟺ Đặt ; Áp dụng quy tắc Gauss-Gegendre điểm, ta có:  +6  với Vậy: +6 25  với Vậy: • • • • • MÃ CHƯƠNG TRÌNH Syms x x1 x2; H1=(x2-x)/(x2-x1); H2=(x-x1)/(x2-x1); A= int((-x^4)/4*[diff(H1,x);diff(H2,x)]*[diff(H1,x) diff(H2,x)],x,x1,x2)+ int((-x^2)*[H1;H2]*[diff(H1,x) diff(H2,x)],x,x1,x2); F= =int((x+1)*[H1;H2],x,x1,x2); Lập trình giải tập FEM TÍNH CHÍNH XÁC B1: ĐỌC DỮ LIỆU ĐẦU VÀO VÀ CHIA MIỀN BÀI TẬP THÀNH CÁC PHẦN TỬ HỮU HẠN function[p e]=gen_mesh(a,b,n) h=(b-a)/n; p=a:h:b; %vecto cỡ 1×(n+1) chứa tọa độ điểm chia e=[1:n;2:n+1]; %ma trận 2×n chứa thơng tin phần tử hữu hạn end B2: TÍNH TOÁN MA TRẬN VÀ VECTO CHO MỖI PHẦN TỬ HỮU HẠN function[Ae Fe]=element_matrice(x1,x2) 26 %Ma tran phan tu thu i Ae=[(1/12*x2^5-1/3*x2^2*x1^3+1/2*x2*x1^4-1/4*x1^5)/ (-hi^2), (-1/12*x2^4*x1+1/12*x2*x1^4)/(-hi^2);(1/12*x2^4*x1+1/12*x2*x1^4)/(-hi^2), (1/4*x2^51/2*x2^4*x1+1/3*x2^3*x1^2-1/12*x1^5)/(-hi^2)]; %Vecto phan tu thu i Fe=[(x2^2/6+x1*x2/6-x1^2/3+x2/2-x1/2);(x2^2/3x1*x2/6-x1^2/6+x2/2-x1/2)]; end B3: LẮP GHÉP CÁC MA TRẬN VÀ VECTO PHẦN TỬ ĐỂ NHẬN ĐƯỢC MA TRẬN A VÀ VECTO F TOÀN CỤC function [A F]=Global_matrix(a,b,n) %Tinh chinh xác ma tran va veto toan cuc % Kich thuoc ma tran e n=size(e,2); % Dinh nghia ma tran toan cuc A A=zeros(n+1,n+1); % Dinh nghia vecto toan cuc F F=zeros(n+1,1); for i=1:n id1=e(1,i;); id2=e(2,i); x1=p(id1); x2=p(id2); [Ae Fe]=element_matrice(x1,x2); %Ghep cac ma tran va vecto phan tu vao ma tran va vec to toan cuc A([id1 id2],[id1 id2])=A([id1 id2],[id1 id2])+Ae; F([id1 id2])=F([id1 id2])+Fe; end B4: TÍCH HỢP ĐIỀU KIỆN BIÊN 27 function[u]=Solver(A,F) N=size(F,1); %xu ly dieu kien bien A(1,:)=0; A(1,1)=1; F(1)=0; A(N,:)=0; A(N,N)=1; F(N)=1; %Giai he phuong trinh tuyen tinh u=A\F; end B5: GIẢI HỆ PHƯƠNG TRÌNH Ở B4 TA NHẬN ĐƯỢC NGHIỆM XẤP XỈ %(-x^4/4u''+x^3u'=x+1 (1,2) %dieu kien bien u(1)=0 va u(2)=1 % sinh mesh a=1;b=2; n=input(‘Nhap n = ‘); [p e]=gen_mesh(a,b,n); %tinh ma tran va vecto toan cuc [A F]=Global_matrice(a,b,n); %tinh nghiem xap xi [u]=Solver(A,F); %ve thi x=[1:1/n:2]; y=(68*x/93+56/(93*x^4)-2/(3*x)-2/(3*x^2)); plot(p,u,'-sb',x,y,'black'); legend('u1','u2'); ĐỒ THỊ SO SÁNH n=3 n=5 28 TÍNH GẦN ĐÚNG B1: ĐỌC DỮ LIỆU ĐẦU VÀO VÀ CHIA MIỀN BÀI TẬP THÀNH CÁC PHẦN TỬ HỮU HẠN function[p e]=gen_mesh(a,b,n) h=(b-a)/n; p=a:h:b; %vecto cỡ 1×(n+1) chứa tọa độ điểm chia e=[1:n;2:n+1]; %ma trận 2×n chứa thơng tin phần tử hữu hạn end B2: TÍNH TỐN MA TRẬN VÀ VECTO CHO MỖI PHẦN TỬ HỮU HẠN function[Ae1 Fe1]=element1_matrice(x1,x2) %Ma tran phan tu thu i Ae1=[(-5*x1^4-x2^4+8*x1^3*x2-4*x1^2*x2^2)./(8*(x2x1)),(x1^4+x2^4)./(8*(x2-x1));(x1^4+x2^4)./(8*(x2-x1)), (-5*x2^4-x1^4+8*x2^3*x1-4*x2^2*x1^2)./(8*(x2-x1))]; %Vecto phan tu thu i Fe1=[(x1*x2-x1^2+x2-x1)./2;(x2^2-x1*x2+x2-x1)./2]; end B3: LẮP GHÉP CÁC MA TRẬN VÀ VECTO PHẦN TỬ ĐỂ NHẬN ĐƯỢC MA TRẬN A VÀ VECTO F TOÀN CỤC function [A1 F1]=Global1_matrice(a,b,n) %Tinh chinh xác ma tran va veto toan cuc 29 % Kich thuoc ma tran e n=size(e,2); % Dinh nghia ma tran toan cuc A A1=zeros(n+1,n+1); % Dinh nghia vecto toan cuc F F1=zeros(n+1,1); for i=1:n id1=e(1,i;); id2=e(2,i); x1=p(id1); x2=p(id2); [Ae1 Fe1]=element1_matrice(x1,x2); %Ghep cac ma tran va vecto phan tu vao ma tran va vec to toan cuc A1([id1 id2],[id1 id2])=A1([id1 id2],[id1 id2]) +Ae1; F1([id1 id2])=F1([id1 id2])+Fe1; end B4: TÍCH HỢP ĐIỀU KIỆN BIÊN function[u1]=Solver1(A1,F1) N=size(F1,1); %xu ly dieu kien bien A1(1,:)=0; A1(1,1)=1; F1(1)=0; A1(N,:)=0; A1(N,N)=1; F1(N)=1; %Giai he phuong trinh tuyen tinh U1=A1\F1; End B5: GIẢI HỆ PHƯƠNG TRÌNH Ở B4 TA NHẬN ĐƯỢC NGHIỆM GẦN ĐÚNG %(-x^4/4)u''+x^3u'-x^2u=x+1 (1,2) 30 %dieu kien bien u(1)=0 va u(2)=1 % sinh mesh a=1;b=2; n=input(‘Nhap n = ‘); [p e]=gen_mesh(a,b,n); %tinh ma tran va vecto toan cuc [A1 F1]=Global1_matrice(a,b,n); %tinh nghiem xap xi [u1]=Solver1(A1,F1); %ve thi x=[1:1/n:2]; y=(68*x/93+56/(93*x.^4)-2/(3*x)-2/(3*x.^2)); plot(p,u1,'-sb',x,y,'black'); legend('u1','u2'); ĐỒ THỊ SO SÁNH n=3 n=5 31 KẾT LUẬN MatLab chương trình hỗ trợ mạnh Tốn, tất phép toán Ma trận, vẽ đồ thị, ngoại suy, nội suy + Được tích hợp sẵn nhiều toolbox hàm tính tốn phức tạp, ta việc áp dụng + Thời gian tính tốn tương đối nhanh (nếu biết tối ưu chương trình: MatLab tính tốn dựa dạng Matrận nên biết đưa vòng lặp dạng Matrận rút ngắn nhiều thời gian tính tốn) + Có thể tự học, tự mày mị để áp dụng (MatLab có nhiều Toolbox hỗ trợ cho nhiều lĩnh vực khác nhau, tùy theo nhu cầu thân mà ta tìm hiểu phần cần thiết, đừng để bị choáng trước "khổng lồ" MatLab) + Muốn thành thạo sử dụng MATLAB bạn cần phải tự gõ câu lệnh xem kết câu lệnh, mắc lỗi tìm cách sửa lỗi Cách học "trial and error" theo cách tốt để học lập trình Thời gian cơng sức bạn bỏ mang lại cho bạn nhiều kiến thức nhiêu + Tài liệu MATLAB có nhiều, tiếng Việt tiếng Anh Để sử dụng MATLAB, không thiết phải đọc nhiều sách Bạn chọn liên quan đến lĩnh vực ứng dụng MATLAB mà bạn quan tâm để đọc, làm theo ví dụ suy nghĩ Tài liệu quan trọng Help MATLAB, bạn có khả tự học tốt, Help tài liệu bạn cần có sẵn cài MATLAB Xét cho MATLAB công cụ để thực ý tưởng, MATLAB cho ta kết khơng thay ta suy nghĩ, không mang cho ta kiến thức Nắm kiến thức chun mơn chìa khóa để sử dụng MATLAB có hiệu TÀI LIỆU THAM KHẢO [1] Phương pháp phần tử hữu hạn, TS.Phạm Quí Mười (Chủ biên) – TS Phan Đức Tuấn, Nhà xuất thơng tin truyền thơng [2] Giáo trình phương pháp tính, TS.Nguyễn Phú Vinh (Chủ biên) [3] Một số tài liệu tham khảo khác ... dung: giới thiệu phần mềm Matlab, tóm tắt số lệnh Matlab nhằm phục vụ cho lập trình phần tử hữu hạn thực lập trình phần tử hữu hạn để giải tốn cụ thể Do trình độ thời gian nghiên cứu cịn hạn chế... tác phần phương pháp phần tử hữu hạn Sau chúng tơi xin giới thiệu tóm tắt lệnh Matlab nhằm phục vụ cho việc lập trình phần tử hữu hạn 1.4 Ma trận Matlab 1.3.1 Các cách nhập ma trận Matlab Matlab... 2: LẬP TRÌNH PHẦN TỬ HỮU HẠN 2.1 Tổng quan lập trình phần tử hữu hạn Trình bày cách viết chương trình mơi trường Matlab để giải phương trình vi phân tuyến tính cấp hai phương pháp phần tử hữu hạn. Tìm

Ngày đăng: 10/06/2019, 23:25

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w