Chương 1: TỔNG QUAN VỀ PHƯƠNG PHÁP PHẦN TỬ HỮU HẠN 1.1. Khái quát phương pháp phần tử hữu hạn 1.1.1. Khái niệm: Phương pháp phần tử hữu hạn là phương pháp số gần đúng để giải các bài toán được mô tả bởi các phương trình vi phân đạo hàm riêng trên miền xác định có hình dạng và điều kiện biên bất kỳ mà nghiệm chính xác không thể tìm được bằng phương pháp giải tích. 1.1.2. Cơ sở phương pháp: Cơ sở của phương pháp này là làm rời rạc hóa miền xác định của bài toán, bằng cách chia nó thành nhiều miền con (phần tử). Các phần tử này được liên kết với nhau tại các điểm nút chung. Trong phạm vi của mỗi phần nghiệm được chọn là một hàm số nào đó được xác định thông qua các giá trị chưa biết tại các điểm nút của phần tử gọi là hàm xấp xỉ thoả mãn điều kiện cân bằng của phần tử. Tập tất cả các phần tử có chú ý đến điều kiện liên tục của sự biến dạng và chuyển vị tại các điểm nút liên kết giữa các phần tử. Kết quả đẫn đến một hệ phương trình đại số tuyến tính mà ẩn số chính là các giá trị của hàm xấp xỉ tại các điểm nút. Giải hệ phương trình này sẽ tìm được các giá trị của hàm xấp xỉ tại các điểm nút của mỗi phần tử, nhờ đó hàm xấp xỉ hoàn toàn được xác định trên mỗi một phần tử.
Trang 1ĐẠI HỌC ĐÀ NẴNG TRƯỜNG ĐẠI HỌC SƯ PHẠM
KHOA TOÁN HỌC
BẢN BÁO CÁO PHƯƠNG PHÁP PHẦN TỬ
HỮU HẠN
Giảng viên: xxx Sinh viên thực hiện: xxx
Đà Nẵng, ngày tháng năm
Trang 2BẢNG PHÂN CÔNG NHIỆM VỤ
hiểu sơ lược về phương pháp phần tử hữu hạn vàmatlab
ma trận và vectơ phần tử của bài toán
trình vẽ đồ thị của bài toán
nghiệm yếu, lập trình
thường, vòng lặp for, tích phân trong matlab
Trang 3MỤC LỤC
BẢNG PHÂN CÔNG NHIỆM VỤ 1
MỞ ĐẦU 3
Chương 1: TỔNG QUAN VỀ PHƯƠNG PHÁP PHẦN TỬ HỮU HẠN 4
1.1 Khái quát phương pháp phần tử hữu hạn 4
1.1.1 Khái niệm: 4
1.1.2 Cơ sở phương pháp: 4
1.1.3 Bản chất toán học 4
1.1.4 Ứng dụng: 4
1.2 Bài toán minh họa: 5
1.3 Nhận xét: 10
Chương 2: GIẢI BÀI TOÁN BẰNG MATLAB 11
2.1 Khái quát về MATLAB 11
2.1.1 Giới thiệu về MATLAB 11
2.1.2 Tổng quan về cấu trúc dữ liệu của Matlab, các ứng dụng 11
2.2 Hướng dẫn các chức năng chính dùng trong giải bài tập 12
2.2.1 Biến 12
2.2.2 Các hàm toán học thông thường 13
2.2.3 Tính tích phân: 15
2.2.4 Vòng lặp for 17
2.2.5 Ma Trận-các phép toán về ma trận 18
2.2.6 Định nghĩa m-file và hàm trong MATLAB 23
2.2.7 Vẽ đồ thị trong MATLAB 26
2.3 Giải bài tập bằng MATLAB: 41
2.4 Nhận xét: 46
TÀI LIỆU THAM KHẢO 48
Trang 4MỞ ĐẦU
Ngày nay, với sự tiến bộ của công nghệ thông tin, việc ứng dụng máy tính vàoviệc giải quyết các bài toán kỹ thuật đã trở nên gần gũi Để có thể ứng dụng máy tính,
ta cần phải mô phỏng các ứng xử của hệ thật, chuyển chúng thành các hệ phương trình,
sử dụng tốc độ và độ tin cậy của máy tính để giải các hệ phương trình này.Trong tínhtoán kết cấu, ta có thể dùng nhiều phương pháp khác nhau: phương pháp lực, phươngpháp chuyển vị, phương pháp Phần tử hữu hạn (PTHH) Trong đó, phương pháp phần
tử hữu hạn, với sự trợ giúp của máy tính, đang được ứng dụng rộng rãi trong các bàitoán kỹ thuật Một trong những ưu điểm của phương pháp phần tử hữu hạn là chươngtrình máy tính để tìm nghiệm xấp xỉ có thể được phát triển dễ dàng cho các loại bàitoán khác nhau Đặc biệt, bất kỳ một miền có hình dạng phức tạp với các điều kiện chotrước có thể xử lý được một cách dễ dàng khi dùng phương pháp phần tử hữu hạn
Trong bài báo cáo này, trên cơ sở phương pháp phần tử hữu hạn và MATLAB,nhóm chúng em đặt mục đích xây dựng bài toán phương trình vi phân tuyến tính cấp 2
và giải bài toán như tìm nghiệm chính xác, tính toán ma trận và vectơ phần tử Kếtquả số của các phương pháp trên được biểu diễn bằng đồ thị và kết hợp so sánh
Do trình độ có hạn và thời gian còn hạn chế, bài báo cáo không thể tránh khỏithiếu sót Chúng em mong nhận được sự góp ý của thầy cô và các bạn để bài báo cáocủa nhóm em được hoàn thiện hơn
Trang 5Chương 1: TỔNG QUAN VỀ PHƯƠNG PHÁP PHẦN TỬ HỮU HẠN 1.1 Khái quát phương pháp phần tử hữu hạn
1.1.1 Khái niệm:
Phương pháp phần tử hữu hạn là phương pháp số gần đúng để giải các bài toán
pháp giải tích
1.1.2 Cơ sở phương pháp:
cách chia nó thành nhiều miền con (phần tử) Các phần tử này được liên kết với nhautại các điểm nút chung Trong phạm vi của mỗi phần nghiệm được chọn là một hàm sốnào đó được xác định thông qua các giá trị chưa biết tại các điểm nút của phần tử gọi
ý đến điều kiện liên tục của sự biến dạng và chuyển vị tại các điểm nút liên kết giữacác phần tử Kết quả đẫn đến một hệ phương trình đại số tuyến tính mà ẩn số chính làcác giá trị của hàm xấp xỉ tại các điểm nút Giải hệ phương trình này sẽ tìm được cácgiá trị của hàm xấp xỉ tại các điểm nút của mỗi phần tử, nhờ đó hàm xấp xỉ hoàn toànđược xác định trên mỗi một phần tử
1.1.3 Bản chất toán học
Phương pháp phần tử hữu hạn (PPPTHH) được sử dụng để giải gần đúng bàitoán phương trình vi phân từng phần (PTVPTP) và phương trình tích phân, ví dụnhư phương trình truyền nhiệt Lời giải gần đúng được đưa ra dựa trên việc loại bỏphương trình vi phân một cách hoàn toàn (những vấn đề về trạng thái ổn định), hoặcchuyển PTVPTP sang một phương trình vi phân thường tương đương mà sau đó đượcgiải bằng cách sử dụng phương pháp sai phân hữu hạn, vân vân
PPPTHH không tìm dạng xấp xỉ của hàm trên toàn miền xác định V của nó màchỉ trong những miền con Ve (phần tử) thuộc miền xác định của hàm.Trong PPPTHHmiền V được chia thành một số hữu hạn các miền con, gọi là phần tử Các miền nàyliên kết với nhau tại các điểm định trước trên biên của phần tử được gọi là nút Cáchàm xấp xỉ này được biểu diễn qua các giá trị của hàm (hoặc giá trị của đạo hàm) tạicác điểm nút trên phần tử Các giá trị này được gọi là các bậc tự do của phần tử vàđược xem là ẩn số cần tìm của bài toán
1.1.4 Ứng dụng:
Phương pháp phần tử hữu hạn thường được dùng trong các bài toán Cơ học (cơhọc kết cấu, cơ học môi trường liên tục) để xác định trường ứng suất và biến dạng củavật thể
Ngoài ra phương pháp phần tử hữu hạn cũng được dùng trong vật lý học để giảicác phương trình sóng, như trong vật lý plasma, các bài toán về truyền nhiệt, động lựchọc chất lóng trường điện từ
Trang 61.2 Bài toán minh họa:
Trang 75 5 '' ' 0 (1)
6
dx x
Trang 81 2 5
5
5
1( ) ( )
Trang 9i
x i
i
i
x i
i
i
x i
Trang 10Vectơ phần tử thứ i
1 1
1 1
1 3 2
Trang 111 1
1
1 1
i i i
i i i i
phương trình xấp xỉ với phương trình cần được nghiên cứu, nhưng đó là ổn định sốhọc (numerically stable), nghĩa là những lỗi trong việc nhập dữ liệu và tính toán trunggian không chồng chất và làm cho kết quả xuất ra xuất ra trở nên vô nghĩa Có rấtnhiều cách để làm việc này, tất cả đều có những ưu điểm và nhược điểm PPPTHH là
sự lựa chọn tốt cho việc giải phương trình vi phân từng phần trên những miền phức tạp(giống như những chiếc xe và những đường ống dẫn dầu) hoặc khi những yêu cầu về
độ chính xác thay đổi trong toàn miền Ví dụ, trong việc mô phỏng thời tiết trên TráiĐất, việc dự báo chính xác thời tiết trên đất liền quan trọng hơn là dự báo thời tiết chovùng biển rộng, điều này có thể thực hiện được bằng việc sử dụng phương pháp phần
tử hữu hạn
Việc tính toán ma trận và vectơ phần tử, tính gần đúng đối với số mũ lớn rấtkhó khăn nếu tính toán bằng tay, dễ nhầm lẫn
Trang 12Chương 2: GIẢI BÀI TOÁN BẰNG MATLAB
2.1 Khái quát về MATLAB
2.1.1 Giới thiệu về MATLAB
- MATLAB là viết tắt của Matrix Laboratory , là một bộ phần mềm toán họccủa hãng Mathworks để lập trình , tính toán số và có tính trực quan rất cao
- MATLAB làm việc chủ yếu với ma trận Ma trận cỡ mxn là bảng chữ nhậtgồm mxn số được sắp xếp thành m hàng và n cột MATLAB có thể làm việc với nhiềukiểu dữ liệu khác nhau Với chuỗi kí tự MATLAB cũng xem là một dãy các kí tự hay
là dãy mã số của các ký tự
- MATLAB dùng để giải quyết các bài toán về giải tích số, xử lý tín hiệu số, xử
lý đồ họa, … mà không phải lập trình cổ điển
Hiện nay, MATLAB có đến hàng ngàn lệnh và hàm tiện ích Ngoài các hàm càisẵn trong chính ngôn ngữ, MATLAB còn có các lệnh và hàm ứng dụng chuyên biệttrong các Toolbox, đểmở rộng môi trường MATLAB nhằm giải quyết các bài toánthuộc các phạm trù riêng Các Toolbox khá quan trọng và tiện ích cho người dùng nhưtoán sơ cấp, xử lý tín hiệu số, xử lý âm thanh, ma trận thưa, logic mờ,…
2.1.2 Tổng quan về cấu trúc dữ liệu của Matlab, các ứng dụng
• Kiểu double kiểu này là kiểu thông dụng nhất của các biến trong Matlab
• Kiểu Sparse
• Kiểu uint8, uint8, uint16, uint64
• Kiểu char ví dụ “Hello”
Trang 13• Các khoá học về toán học.
• Các kỹ sư, các nhà nghiên cứu khoa học
2.2 Hướng dẫn các chức năng chính dùng trong giải bài tập
2.2.1 Biến
Giống như những ngôn ngữ lập trình khác, MATLAB có những quy định riêng
về tên biến Trước tiên tên biến phải là một từ, không có chứa dấu cách, và tên biến phải có những quy định tuân thủ như sau:
Quy định về tên biến
Tên biến có phân biệt chữ hoa chữ thường
Ví dụ: Iterms, itErms, và ITERMS là các biến khác nhau
Tên biến có thể chứa nhiều nhất 31 kí tự, còn các kí tự sau kí tự thứ 31 bị lờ đi
Ví dụ: howaboutthisveriablename
Tên biến bắt đầu phải là chữ cái, tiếp theo có thể là chữ số, số gạch dưới
Ví dụ: how_about_this veriable_name,X51483, a_b_c_d_e
Kí tự chấm câu không được phép dùng vì nó có ý nghĩa đặc biệt
Cùng với những quy định trên, MATLAB có những biến đặc biệt trong bảng sau:
Chúng ta có thể tạo một biến của MATLAB, và chúng ta có thể gán lại giá trịcho một hoặc nhiều biến
Trang 142.2.2 Các hàm toán học thông thường
Các hàm toán học của MATLAB được liệt kê trong bảng dưới đây, chúng đều
có chung một cách gọi hàm như ví dụ dưới đây:
Bảng các hàm :
Các hàm thông thường
Trang 162y3 =
3y4=
Int(f,v) Sử dụng đối tượng symbolic v như là biến của tích phân,
Ví du: Tạo các biến symbolic sau
Syms a b theta x y n x1 u
Trang 17Bảng thể hiện kết quả tích phân của một số hàm
Định nghĩa tích phân còn được thể hiện như sau
Int(f,a,b)
Hoặc int (f,v,a,b)_% Tính tích phân f theo biến v từ a đến bMột số ví dụ
Trang 18Các câu lệnh giữa hai trạng thái for và end được thực hiện một lần cho tất cảcác cột của mảng (array) Tại mỗi lần lặp lại, x được gán cho phần tử cột tiếp theo nhưtrong suốt n lần của vòng lặp, x = array(:,n).
Trang 192.2.5 Ma Trận-các phép toán về ma trận
a Khái niệm :
- Trong MATLAB dữ liệu để đưa vào xử lý dưới dạng ma trận
- Tên ma trận có thể gồm 31 ký tự Bắt đầu phải bằng chữ cái sau đó có thể là
số, chữ cái, các ký tự đặc biệt Tên đặt bênn trái dấu bằng, bên phải dấu bằng là cácphần tử của ma trận
- Bao quanh các phần tử của ma trận bằng dấu ngoặc vuông
- Các phần tử trong ma trận được cách nhau bởi ký tự trống hoặc dấu phẩy ( , )
- Kết thức một hàng trong ma trận bởi dấu ( ;)
c Các cách để nhập một ma trận
- Liệt kê trực tiếp: VD >> A = [ 1 2 3; 4 5 6; 7 8 9]
Trang 20>> B = [1 2 3;
4 5 6;
7 8 9 ]
- Nhập thông qua lệnh Dùng lệnh input
>> input (‘ Nhap gia tri cho ma tran C =’)
Nhap gia tri cho ma tran C = [ 1 3 4; 4 5 7; 7 5 8]
Ans =
3 4
4 5 7
7 5 8
Chú ý khi kết thúc một câu lệnh có thể dùng dấu (;) hoặc không dùng dấu (;)
- Nếu dùng dấu (;) câu lệnh được thực hiện nhưng kết quả không hiện ra mànhình
- Nếu không dùng dấu (;) câu lệnh được thực hiện và kết quả được hiện ra mànhình
- Trong cả 2 trường hợp trên sau khi câu lẹnh được thực hiện kết quả đều đượclưu vào trong bộ nhớ và có thẻ sử dụng cho các câu lệnh tiếp theo
Trang 21d XỬ LÝ TRONG MA TRẬN:
d.1 Tạo vectơ từ ma trận
Công thức tổng quát: Biến = giới hạn đầu : bước chạy : giới hạn cuối
Giới hạn đầu, giới hạn cuối, bước chạy: là các số thực
Bước chạy có thể dương hoặc âm
Vd Tạo 1 vectơ t chạy từ 0 đến 0.6 với bước chạy tiến là 0.1
Chú ý: Trong trường hợp giới hạn trên, giới hạn dưới là các số nguyên và
bước chạy bằng 1 thì ta không cần đưa bước chạy vào trong biểu thức
Trang 24e.3 Ma trận ma phương Magic:
Tổng tất cả giá trị các phần tử trên hàng = Tổng tất cả giá trị các phần tử trên cột =Tổng tất cả giá trị các phần tử trên đường chéo của ma trận
script file , hoặc đơn giản là M_file Danh từ “script” để chỉ rằng thực tế MATLAB
đọc từ file kịch bản tìm thấy trong file Danh từ “M_file” để chỉ rằng tên script file đóphải kết thúc bằng phần mở rộng là ‘.m’ như ví dụ example1.m
Để tạo một script M_file, chọn File New M-file M-file New M-file New M-file Thủ tục này sẽ tạo ra mànhình soạn thảo, và bạn có thể đánh được các lệnh của MATLAB trong đó Ví dụ dướiđáy là các lệnh trong ví dụ ước lượng chiều cao ngôi nhà ơ trước :
Trang 25Chúng ta có thể ghi và lưu giữ file bằng cách chọn Save từ bảng chọn file Khi
bạn ghi lên file chú ý phải đánh tên file trùng với tên hàm (example) không cần đánhvào phần mở rộng MATLAB tự gán vào cho nó Khi đó từ dấu nhắc ta có thể đánh:
b Hàm trong MATLAB
Việc xây dựng hàm cũng được thực hiện tương tự như m-file Tuy nhiên, đốivới hàm ta cần quan tâm đến các tham số truyền cho hàm và các kết quả trả về sau khithực hiện Các điểm cần lưu ý:
◄ Tên hàm phải được đặt trùng với tên file lưu trữ
◄ Phải có từ khóa function ở dòng đầu tiên.
◄Thân chương trình không bắt đầu bằng từ khóa Begin và không kết thúc bằng
từ khóa End như ngôn ngữ lập trình Pascal
◄ Trong một hàm có thể xây dựng nhiều hàm con (điều này không có trong
script file) Kết thúc hàm con phải có từ khóa end (điều này không cần trong hàm
‘cha’)
◄Danh sách tên kết quả và tham số đầu vào được cách nhau bằng dấu phẩy.Cấu trúc của hàm như sau
Trang 261 Xây dựng hàm gptb2 để giải phương trình bậc hai ax2+bx+c=0 Nội dung hàm như sau:
function [x1,x2]=gptb2(a,b,c)
% Giai phuong trinh bac hai ax^2+bx+c=0
% [x1,x2]=gptb2(a,b,c)
% Trong do: x1,x2 nghiem thuc hoac phuc
% a,b,c la 3 he so cua phuong trinh
Trang 27Sau khi lưu file này với tên gptb2.m, thử kiểm chứng kết quả:
Như bạn đã thấy ở ví dụ trước đó, phần lớn các câu lệnh để vẽ đồ thì trong mặt
phẳng đều là lệnh plot Lệnh plot này sẽ vẽ đồ thì cảu một mảng dữ liệu trong một hệ
trục thích hợp, và nối các điểm bằng đường thẳng Dưới đây là một ví dụ mà bạn đãthấy trước đó :
>>x=linspace(0,2*pi,30);
>>y=sin(x);
>>plot(x,y)
Ví dụ này tạo 30 điểm dữ liệu trong đoạn 0 x 2 theo chiều ngang đồ thị, và tạo
một vector y khác là hàm sine của dữ liệu chưa trong x Lệnh plot mở ra một cửa sổ đồ
họa gọi điểm, và đồ thị được tạo thành bởi việc nối các điểm này bằng đường nét liền.Các thang chia số và dấu được tự động cập nhật vào, nếu như cửa sổ figure đã tồn tại,
plot xóa cửa sổ hiện thời và thay vào đó là cửa sổ mới.
Bây giờ cùng vẽ hàm sin(e) và cosin(e) tren cùng một đồ thị
Trang 28>>z = cos(x);
>>plot(x,y,x,z)
Ví dụ này cho thấy bạn có thể vẽ nhiều hơn một đồ thị trên cùng một hình vẽ,
bạn chỉ việc đa thêm vào plot một cặp đối số, plot tự động vẽ đồ thị thứ hai bằng màu
khác nhau trên màn hình Nhiều đường cong có thể vẽ một lúc nếu như bạn cung cấp
đủ các cặp đối số cho lệnh plot.
Nếu như một trong các đối số là ma trận và đối số còn lại là vector, thì lệnh plot
sẽ vẽ tương ứng mỗi cột của ma trận với vector đó:
>>W = [y;z] % xây dựng một ma trận sine và cosine
>> plot (x,W) % xây dựng vẽ các cột của W với x
Trang 29Nếu như bạn thay đổi trật tự các đối số thì đồ thị sẽ xoay một góc bằng 90 độ.
>>plot (W, x)
Nếu lệnh plot được gọi mà chỉ có một đối số , ví dụ như plot(Y) thì hàm plot
sẽ đưa ra một kết quả khác, phụ thuộc vào dữ liệu chưa trong Y Nếu giá trị của Y làmột số phức Plot(Y) tương đương với plot( reak (Y)) và plot (imag(Y)), trong tất cả
Trang 30các trường hợp khác thì phần ảo của Y thường được bỏ qua Mặt khác nếu Y là phầnthực thì plot(Y) tương ứng với plot(1: length(Y),Y).
b Lệnh fplot:
Hàm fplot làm việc với bất cứ một hàm M_file nào có một giá trị vào và mộtgiá trị ra, biến ra y trả về một mảng có cùng kích thước với biến vào x Một lỗi thôngthường xảy ra khi sử dụng hàm fplot cũng giống như khi sử dụng các hàm phân tích sốkhác là bỏ quên dấu nháy đơn ở tên hàm cần vẽ Hàm fplot cần dấu nháy đơn đó đểtránh nhầm lẫn tên hàm với các biến trong môi trường MATLAB Đối với các hàm
vẽ được đồ thị của hàm trên mà không cần phải tạo ra một M_file Để thực hiện điều
đó chỉ cần viết hàm cần vẽ dưới dạng một chuỗi kí tự có sử dụng x là biến số độc lập
Vẽ đồ thị của nằm trong khoảng từ 0 đến 8 tạo ra đồ thị
Dựa trên những tính năng cơ bản này, hàm fplot có những khả năng rất mạnh
c Lệnh ezplot
Cấu trúc : ezplot (y,[xo xm]): Vẽ y theo biến x thuộc khoảng [xo xm]
Trang 31Ví dụ:
>> sym x y;
>> y = x.^2
>> ezplot(y,[-10 10]), grid on
d Kiểu đường , dấu và màu
MATLAB Chọn kiểu nét vẽ soild và màu blue và green cho đồ thị.ngoài ra bạn
có thể khai báo kiểu màu, nét vẽ của riêng bạn bằng việc đưa vào plot một đối số thứ 3sau mỗi cặp dữ liệu của mảng Các đối số tùy chọn này là một xâu kí tự, có thể chứamột hoặc nhiều hơn theo bảng dưới đây:
Nếu bạn không khai báo màu thì MATLAB sẽ chọn màu mặc định là blue Kiểu đường mặc định là kiểu Soild trừ khi bạn khai báo kiểu đường khác Còn về dấu,
nếu không có dấu nào được chọn thì sẽ không có kiểu của dấu nào được vẽ