MATLAB (Matrix Laboratory) vừa là một ngôn ngữ lập trình vừa là một phần mềm ứng dụng tính toán rất hiệu quả MATLAB cho phép tính toán số với ma trận, vẽ đồ thị hàm số hay biểu đồ thông tin, thực hiện thuật toán, tạo các giao diện người dùng và liên kết với những chương trình máy tính viết trên nhiều ngôn ngữ lập trình khác. MATLAB giúp đơn giản hóa việc giải quyết các bài toán tính toán kĩ thuật so với các ngôn ngữ lập trình truyền thống như C, C++, và Fortran. MATLAB là ngôn ngữ của tính toán khoa học.
Trang 1BẢNG PHÂN CÔNG NHIỆM VỤ NHÓM 6
Trang 2MỤC LỤC
Mở đầu
Chương 1: Giới thiệu Matlab
1.1 Khái niệm về Matlab
1.2 Ứng dụng của MatLab
1.3 Vẽ đồ thị trong Matlab
Chương 2: Lập trình phần tử hữu hạn 21
2.1.Tổng quan về 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
2
Trang 3Nhiều phần mềm ứng dụng ra đời dựa trên cơ sở phương pháp phần tử hữu hạn như: SAP, NASTRAN, ABAQUS,SAMCEF, MIDAS, ANSYS … Trong bản báo cáo này, chúng em sử dụng Matlab - một công cụ phần mềm có lợi thế trong kỹ thuật lập trình phần tử hữu hạn, đáp ứng được nhiều bài toán.
MATLAB là một môi trường tính toán số và lập trình, được thiết kế bởi công ty MathWorks
MATLAB (Matrix Laboratory) vừa là một ngôn ngữ lập trình vừa là một phần
mềm ứng dụng tính toán rất hiệu quả
MATLAB cho phép tính toán số với ma trận, vẽ đồ thị hàm số hay biểu đồ thông tin, thực hiện thuật toán, tạo các giao diện người dùng và liên kết với những
chương trình máy tính viết trên nhiều ngôn ngữ lập trình khác MATLAB giúp đơn giản hóa việc giải quyết các bài toán tính toán kĩ thuật so với các ngôn ngữ lập trình truyền thống như C, C++, và Fortran
MATLAB là ngôn ngữ của tính toán khoa học
Bản báo cáo của nhóm chúng em bao gồm các nội dung: 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ể Do trình
độ và thời gian nghiên cứu còn hạn chế nên những vấn đề mà nhóm tôi trình bày sẽkhông tránh khỏi thiếu sót Chúng em kính mong nhận được sự chỉ bảo, góp ý của thầy và các bạn để bài báo cáo được hoàn thiện hơn
3
Trang 4CHƯƠNG I: GIỚI THIỆU VỀ MATLAB
trận (matrix-based programming language)
Steve Bangert là người đã viết trình thông dịch cho MATLAB
Năm 1984, Jack Little kết hợp với Moler và Steve Bangert quyết định đưa MATLAB thành dự án thương mại - công ty The MathWorks ra đời thời gian này.Phiên bản đầu tiên MATLAB 1.0 ra dời năm 1984 viết bằng C cho MS-DOS PC
Ban đầu Matlab được phát triển để hỗ trợ sinh viên sử dụng hai thư
viện LINPACK và EISPACK dùng cho đại số tuyến tính (viết bằng Fortran) mà không cần biết lập trình Fortran
Năm 1986, MATLAB 2 ra đời trong đó hỗ trợ UNIX
Năm 1987, MATLAB 3 phát hành
Năm 1990 Simulink 1.0 được phát hành gói chung với MATLAB
Năm 1992 MATLAB 4 thêm vào hỗ trợ 2-D và 3-D đồ họa màu và các ma
trận truy tìm Năm này cũng cho phát hành phiên bản MATLAB Student
Edition(MATLAB ấn bản cho học sinh).
Năm 1993 MATLAB cho MS Windows ra đời Đồng thời công ty này có trang web là www.mathworks.com
Năm 1995 MATLAB cho Linux ra đời Trình dịch MATLAB có khả năng chuyển dịch từ ngôn ngữ MATLAB sang ngôn ngữ C cũng được phát hành trong dịp này
Năm 1996 MATLAB 5 bao gồm thêm các kiểu dữ liệu, hình ảnh hóa, bộ truy sửa lỗi (debugger), và bộ tạo dựng GUI
Năm 2000 MATLAB 6 cho đổi mới môi trường làm việc MATLAB, thay thếLINPACK và EISPACK bằng LAPACK và BLAS.[1]
Năm 2002 MATLAB 6.5 phát hành đã cải thiện tốc độ tính toán, sử dụng
4
Trang 5phương pháp dịch JIT (Just in Time) và tái hỗ trợ MAC.
Năm 2004 MATLAB 7 phát hành, có khả năng chính xác đơn và kiểu
nguyên, hỗ trợ hàm lồng nhau, công cụ vẽ điểm, và có môi trường phân tích số liệu tương tác
Đến tháng 12, 2008, phiên bản 7.7 được phát hành với SP3 cải thiện
Simulink cùng với hơn 75 sản phẩm khác
Năm 2009 cho ra đời 2 phiên bản 7.8 (R2009a) và 7.9 (R2009b)
Năm 2010 phiên bản 7.10 (R2010a) cũng đã được phát hành
Matlab được dùng rộng rãi trong giáo dục, phổ biến nhất là giải các bài toán
số trị (cả đại số tuyến tính lẫn giải tích) trong nhiều lĩnh vực kĩ thuật
1.2 Vài nét về thao tác trong Matlab
Các lệnh vẽ đồ họa trong matlab: matlab cung cấp một loạt hàm để vẽ biểu diễn
các vecto số liệu cũng như giải thích và in các đường cong này
Plot đồ họa 2-D với số liệu 2 trục vô hướng và tuyến tính
Plot3 đồ họa 3-D với số liệu 2 trục vô hướng và tuyến tính
Polar đồ họa trong hệ tọa độ cực
Loglog đồ họa với các trục logarit
Semilogx đồ họa với các trục x logarit và trục y tuyến tính
Semilogy đồ họa với trục y logarit và trục x tuyến tính
Plotyy đồ họa với trục y có nhãn ở bên trái và bên phải
Đặc tả màu và kích thước đường vẽ: Để đặt tả màu và kích thước
đường vẽ ta dùng các tham số sau:
Linewidth: độ rộng đường thẳng tính bằng điểm
5
Trang 6MarkerEdgeColor: màu của các cạnh của khối đánh dấu
MarkerFaceColor: màu của khối đánh dấu
MarkerSize: kích thước của khối đánh dấu
Các phép toán logic và quan hệ:
< = (> =) Một biểu thức nhỏ hơn (lớn hơn) hoặc bằng biểu thức khác
< ( > ) Một biểu thức nhỏ hơn (lớn hơn) biểu thức khác
Phép toán logic “not”
Trang 7Cond Số điều kiện của 1 ma trận
Bảng dấu:
BT Màu BT Ðánh dấu BT Kiểu nét vẽ
Trang 8• Lệnh và hàm sử dụng rất đơn giản
• Có thể xây dựng những hàm riêng cho những ứng dụng đặc biệt
• Cung cấp thư viện hàm đồ họa rất mạnh
• Cung cấp gói ứng dụng Simulink đầy đủ để mô phỏng
Nhìn chung, Matlab là công cụ hữu ích cho các thao tác tính toán như
ma trận, vectơ, tính tích phân, đạo hào, vẽ đồ thị,v.v… Các thao tác này là phần cơ bản trong phương pháp phần tử hữu hạn Sau đây chúng tôi xin giới thiệu tóm tắt các lệnh cơ bản trong 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 trong Matlab.
1.3.1 Các cách nhập ma trận trong Matlab.
Matlab cung cấp một vài phương tiện cho người sử dụng để tạo ra một
ma trận, mỗi phương tiện có những ưu điểm của nó và được sử dụng tùy theotừng yêu cầu bài toá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ừ những hàm có sẵn trong Matlab
a Nhập ma trận trực tiếp từ cửa sổ Command Winodow.
Trong môn học toán cao cấp chúng ta đã biết nhập một ma trận như sau: A=
Đây là một ma trận có số hàng m=3 và số cột n=3 Để nhập ma trận trên trong Matlab ta nhập trực tiếp như sau:
Từ dòng nhắc lệnh trong cửa sổ command Window ta nhập
>> A=[2,7,0;4,8,6;5,3,1] và nhấn Enter sẽ cho kết quả là:
Trang 9Ta có thể nhập một ma trận bằng cửa sổ soạn thảo M-file, mở cửa sổ này
bằng cách vào File New M-file Một cửa số soạn thảo sẽ được thực hiện ra
cho phép bạn soạn thảo dưới dạng text, do là cửa sổ soạn thảo dạng text cho nênbạn có thể 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ự như trong cửa sổ command window sau đó lưu vào file như sau:
Ví dụ: A=[2,7,0;4,8,6;5,3,1]; %không có dấu chấm phẩy sẽ in ra kết quả
Cũng tương tư như trên nếu số phần tử trên một hàng quá nhiều thì ta có thể xuống dòng
>> A=[1,2,3,4, 5,6,7,8,9];
Sau khi kết thúc soạn thảo ta lưu vào tên_file
Để thực thi các lệnh nhập trong M-file ta dùng lệnh sau trong command window như sau:
Trang 10>> ten_file;
c Nhập ma trận từ những hàm có sẵn trong Matlab.
Matlab có một thư viện các hàm cho phép tạo ma trận Sau đây là một số hàm:
- ones(m,n) tạo ma trận kích thước m x n, với các phần tử đều bằng 1, ones(m) tạo
ma trận vuông cấp m, với các phần tử đều nhau là 1
- zeros(m,n) tạo ma trận kích thước m x n, với các phần tử đều bằng 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
Trang 11Ma trận chuyển vị: Để tìm chuyển vị của ma trận A, chúng ta nhập:
là hàng đầu tiên của ma trận A
Cộng ma trận: Cộng hai ma trận được thực hiện như sau:
Trang 12Chú ý rằng, C là một ma trận mới, không còn là tổng của hai ma trận A và B
Nhân hai ma trận: Tích hai ma trận A và B được thực hiện như sau:
Trang 13S : biểu thức lấy tích phân
v : tên biến lấy tích phân
a,b : khoảng lấy tích phân
Trang 14Tính
2
2 2 0
Cú pháp: Plot(tên biến, tên hàm)
Ý nghĩa: Vẽ đồ thị hàm 1 biến bằng cách nối các điểm dữ liệu
Các bước vẽ:
Bước 1 : Khai báo biến
Bước 2 : Chia miền đồ thị
biến, tên hàm)
CHÚ Ý
:
Điểm 14
Trang 15dữ liệu càng nhiều (hay chia khoảng càng nhỏ) thì hình vẽ càng đúng với đồ thị hàm số liên tục (đường cong trơn liên tục)
• Cách 1 : x=[ xmin: bước : xmax]
Ví dụ: x=[-10:1:10]
Nghĩa là x chạy từ -10 đến 10 bước 1 (bước nhỏ)
• Cách 2 : linespace(điểm đầu,điểm cuối,số điểm cần vẽ)
Ví dụ : x=linspace(-10,10,100)
Nghĩa là Chia x từ -10 đến 10 thành 100 điểm
Plot(real(y),imag(y))
Với real (y) là phần thực, imag(y) là phần ảo
2 Đặt tiêu đề, tạo nhãn, vẽ lưới cho đồ thị :
Title(‘tên đồ thị’) : tạo tiêu đề đồ thị
Xlabel(‘nhãn trục x’) : tạo nhãn cho trục x
Ylabel(‘nhãn trục y’) : tạo nhãn cho trục y
Trang 16linespec Tùy chỉnh các đối tượng của đồ thị ngoài cách dùng các lệnh, có thể tùy chỉnh trực tiếp trên đồ thị bằng cách sau :
Tại cửa sổ Figure
Click vào View trên thanh công cụ
Chọn Property Editor
Chọn đối tượng cần tùy chỉnh và thay đổi
16
Trang 184 Vẽ nhiều đồ thị trên cùng một trục tọa độ
• Cách 1: plot(tên biến, tên hàm 1,tên biến, tên hàm 2)
Trang 20 legend('y=sin(x)','y=cos(x)')
6 Vẽ nhiều đồ thị trong cùng
1 cửa sổ
Trong đó : -
m : số hàng được chia
- n : số cột được chia
- p : vùng hiển thị của đồ thị
Trang 2121
Trang 22CHƯƠNG 2: LẬP TRÌNH PHẦN TỬ HỮU HẠN
2.1 Tổng quan về lập trình phần tử hữu hạn
Trình bày cách viết các chương trình trong môi trường Matlab để giảiphương trình vi phân tuyến tính cấp hai bằng phương pháp phần tử hữu hạn.Tìmhiểu các bước cơ bản trong lập trình phần tử hữu hạn, sau đó minh họa các bướcnày thông qua một ví dụ cụ thể
Một cách tổng quát, có thể tóm tắt các bước lập trình giải phương trình viphân bằng phương pháp phần tử hữu hạn như sau:
1 Đọc dữ liệu đầu vào và xây dựng cơ sở dữ liệu để lưu thông tin các phần tử hữu hạn
2 Tính toán ma trận và vector trên mỗi phần tử hữu hạn
3 Lắp ghép các ma trận và vector phần tử để nhận được ma trận toàn cục A và vector toàn cục F
4 Tích hợp điều kiện biên vào ma trận A và vector F để nhận được hệ phương trìnhtuyến tính = �
5 Giải hệ phương trình tuyến tính để nhận được nghiệm xấp xỉ U
2.2 Thực hành lập trình.
Cho PTVP cấp 2 tuyến tính hệ số không phải là hàm hằng cùng với điều kiện biên Dirichlet hoặc Newman hoặc điều kiện hỗn hợp
1 Giải phương trình tìm nghiệm chính xác
2 Viết công thức nghiệm yếu
Trang 23Ta có: (*)
⟺
⟺Xét PTTN: (1)
Ngiệm tổng quát của phương trình đã cho tìm được dưới dạng:
Xử lí điều kiện biên:
2 Công thức nghiệm yếu:
Trang 243 Ma trận và vector phần tử:
a) Tính chính xác ma trận và vec tơ trên phần tử thứ i:
Từ công thức nghiệm yếu ta có được ma trận trên phần tử thứ i là:
Trang 27e=[1:n;2:n+1]; %ma trận cơ 2×n chứa
thông tin các 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)
27
Trang 28%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);(-
%Tinh chinh xác ma tran va veto toan cuc
% Kich thuoc ma tran e
Trang 29ĐỒ THỊ SO SÁNH
n=3 n=5
29
Trang 30e=[1:n;2:n+1]; %ma trận cơ 2×n chứa
thông tin các 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[Ae1 Fe1]=element1_matrice(x1,x2)
%Ma tran phan tu thu i
x1)),(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
30
Trang 31% Kich thuoc ma tran e
Trang 32%dieu kien bien u(1)=0 va u(2)=1
ĐỒ THỊ SO SÁNH
32
Trang 33KẾT LUẬN
MatLab là chương trình hỗ trợ rất mạnh về Toán, tất cả các phép toán về
Ma trận, vẽ đồ thị, ngoại suy, nội suy
+ Được tích hợp sẵn rất nhiều các toolbox và các hàm tính toán phức tạp, ta chỉ việc áp dụng
+ Thời gian tính toán tương đối nhanh (nếu biết tối ưu chương trình: MatLab tính toán dựa trên dạng Matrận nên nếu biết đưa các vòng lặp về dạng Matrận sẽrút ngắn được nhiều về thời gian tính toán)
+ Có thể tự học, tự mày mò để áp dụng (MatLab có rất nhiều Toolbox do nó hỗ trợ cho rất nhiều lĩnh vực khác nhau, tùy theo nhu cầu của bản thân mà ta tìm hiểu phần nào cần thiết, đừng để bị choáng trước sự "khổng lồ" của MatLab)
+ Muốn thành thạo sử dụng MATLAB bạn cần phải tự mình gõ các câu lệnh và xem kết quả câu lệnh, mắc lỗi và tìm cách sửa lỗi Cách học "trial and error" này theo tôi là cách tốt nhất để học lập trình Thời gian và công sức bạn bỏ ra bao nhiêu sẽ mang lại cho bạn nhiều kiến thức bấy nhiêu
+ Tài liệu về MATLAB hiện nay đã có rất nhiều, cả tiếng Việt và tiếng Anh Để
sử dụng MATLAB, không nhất thiết phải đọc nhiều sách Bạn hãy chọn một cuốn bất kì liên quan đến lĩnh vực ứng dụng của MATLAB mà bạn quan tâm để đọc, làm theo các ví dụ và suy nghĩ Tài liệu quan trọng nhất chính là Help của MATLAB, nếu như bạn có khả năng tự học tốt, Help là tài liệu duy nhất bạn cần
và nó đã có sẵn khi cài MATLAB
Xét cho cùng MATLAB chỉ là công cụ để thực hiện ý tưởng, MATLAB có thể cho ta kết quả nhưng nó không thay ta suy nghĩ, không mang cho ta kiến thức Nắm chắc kiến thức chuyên môn là chìa khóa để sử dụng MATLAB có hiệu quả
Trang 34TÀ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 bản thông tin và 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