Nhiề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
Trang 1MỤC LỤC
Mở đầu 3
Chương 1: Giới thiệu Matlab 4
1.1 Khái niệm về Matlab 4
1.2 Ứng dụng của MatLab 5
1.3 Vẽ đồ thị trong Matlab 7
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
Trang 2Nhiề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 đơngiả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
Trang 3CHƯƠNG I: GIỚI THIỆU VỀ MATLAB
thiết kế hệ thống điều khiển, hệ thống hộp công cụ (tool box), mô phỏng Jack
xây dựng MATLAB trở thành mô hình ngôn ngữ lập trình trên cơ sở ma
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 DOS PC
MS-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]
Trang 4Năm 2002 MATLAB 6.5 phát hành đã cải thiện tốc độ tính toán, sử dụng
phươ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
MarkerEdgeColor: 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ệ:
Trang 5Lệnh Giải thích
= = Hai biểu thức bằng nhau
= Hai biểu thức không bằng nhau
< = (> =) 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 “and”
Phép toán logic “not”
| Phép toán logic “or”
Trang 6< tam giác hướng
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
Trang 7- 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à:
Ta 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ên bạn
có thể soạn thảo từ file word sau đó sau đó copy vào cửa sổ M-file Để nhập ma
Trang 8trậ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>> A(1,:)
ans =
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:
Chú ý 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 11S : biểu thức lấy tích phân
v : tên biến lấy tích phân
Trang 12a,b : khoảng lấy tích phân
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ị
Trang 13 Bước 3 : Nhập hàm
Bước 4 : plot(tên biến, tên hàm)
CHÚ Ý
:
Điểm
dữ liệu càng nhiều (hay chia khoảngcà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
Trang 14 CHÚ Ý : Nếu y là hàm phức thì ta có cú pháp:
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 15 CHÚ Ý: Để biết được nhiều dạng hơn ta làm như sau Helpàplotàấn vào
chữ linespec 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ụ
Trang 164 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 186 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ị
Ý nghĩa : Chia đồ thị thành các vùng để vẽ nhiều đồ thị trong cùng 1
Trang 20CHƯƠ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
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 22( x +1) vdx
Trang 23Lấy TPTP số hạng đầu tiên ta được (đặt U= x
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 24b) Tính gần đúng ma trận và vec tơ trên phần tử thứ i
Trang 31e=[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
%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 33y=(68*x/93+56/(93*x^4)-2/(3*x)-2/(3*x^2));
plot(p,u,'-sb',x,y,'black');
legend('u1','u2');
e=[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
%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))];
Trang 34%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
%Tinh chinh xác ma tran va veto toan cuc
% Kich thuoc ma tran e
Trang 35legend('u1','u2');
ĐỒ THỊ SO SÁNH
Trang 36
KẾ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 37TÀ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