You are on page 1of 68

9/3/2019

Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng
Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật

Matlab

Hỗ trợ lập trình Ứng dụng trong Hỗ trợ mô phỏng


tính toán giải xử lý số liệu điều khiển tự
tích, tính toán thống kê… động trong điện
Giảng viên: Ths. Trần Kim Bằng
số, đồ họa tử, viễn thông…
Bộ môn Cơ Kỹ Thuật, P.106B4
không gian, ứng
Khoa Khoa Học Ứng Dụng dụng trong cơ
Đại học Bách Khoa TpHCM học tính toán
Tham khảo thêm thông tin tại trang web
http://www.engineersrule.com/the-software-engineering-students-need-to-know/

Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 1 Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 2

Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng
Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật

Phân tích, biểu diễn dữ liệu với các công cụ hỗ trợ tính toán, đồ họa đa dạng
Thống kê các dữ liệu thí nghiệm

Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 3 Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 4

Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng
Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật

Mô phỏng điều khiển tự động trong lĩnh vực cơ điện tử (MATLAB & Simulink)

Lập trình tính toán mô phỏng các bài toán kỹ thuật

Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 5 Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 6

1
9/3/2019

Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng
Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật

CAE - Computer Aided Engineering


- Dự đoán chính xác: sử dụng các phần mềm CAE để dự đoán độ bền của
sản phẩm thay thế cho quá trình làm thực nghiệm, điều ngày giúp nhà
sản xuất tiết kiệm được rất nhiều chi phí và thời gian.
- Thấy được những hiện tượng mà thực tế không thể thấy được: xem
dòng chảy của khuôn đúc kim loại, qua đó người thiết kế có thể đánh giá
và thay đổi kênh dẫn, thiết kế khuôn, tốc độ rót của quá trình đúc để sản
phẩm tốt hơn, ít khuyết tật hơn.
- Mô phỏng những hiện tượng mà không thể tiến hành thực tế được: thảm
họa sóng thần tác động vào các lò phản ứng điện hạt nhân hay va chạm
của xe đối với người đi đường để đánh giá tác động cho xe và con
người. Đây là những hiện tượng không thể làm ngoài đời được.

(Hình ảnh và tư liệu được tham khảo trên group VUDSE - Hội kĩ sư thiết kế và mô phỏng CAE
CAD CAM)

Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 7 Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 8

Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng
Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật

Trong chu trình phát Đối với nhóm ngành điện


triển sản phẩm, khi áp thoại:
dụng các giải pháp • Chi phí sản xuất thấp.
CAE, các nhà sản • Sự phức tạp của sản
xuất quan tâm đến 3 phẩm cũng không cao.
vấn đề: • Thời gian đưa sản phẩm
• Chi phí. ra ngoài thị trường tương
• Mức độ phức tạp đối nhanh (khoảng 1
của sản phẩm. năm).
• Thời gian phân phối • Nhóm ngành này sử dụng
sản phẩm ra ngoài CAE ở mức độ thấp.
thị trường. • Nhà sản xuất cũng sẵn
Có 3 nhóm sản phẩm sàng dùng phương pháp
là: Điện thoại, Ô tô và thực nghiệm để kiểm tra
Công nghiệp nặng độ bền.

Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 9 Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 10

Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng
Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật

Đối với nhóm ngành


Đối với nhóm sản phẩm ô
công nghiệp nặng:
tô:
• Chi phí sản xuất rất
• Chi phí sản xuất tương
cao.
đối cao.
• Sản phẩm rất phức tạp.
• Thời gian đưa sản phẩm
• Thời gian đưa sản
ra ngoài thị trường ở mức
phẩm ra ngoài thị
độ trung bình (khoảng 4 -
trường rất lâu (khoảng
5 năm) và ngày càng phải
10 - 15 năm cho 1 mẫu
cạnh tranh gay gắt với
tàu mới).
nhiều hãng xe.
• Nhóm ngành này có áp
• Đây là nhóm ngành mà
dụng các giải pháp
áp dụng CAE nhiều nhất,
CAE ở mức độ vừa
hầu hết các phần mềm
phải nhưng đòi hỏi quy
CAE đều áp dụng cho
trình tính toán vô cùng
nhóm sản phẩm Ô tô.
nghiêm ngặt.

Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 11 Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 12

2
9/3/2019

Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng
Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật

Một số phần mềm thương mại CAE nổi tiếng

Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 13 Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 14

Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng
Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật

• Nắm sâu hơn các kiến thức về toán, cơ, bản chất về các
vấn đề kỹ thuật.
• Không phải tất cả công cụ giải bài toán kỹ thuật nào cũng
được tích hợp trong phần mềm thương mại.
• Phần mềm thương mại đòi hỏi bản quyền.
• Một số công ty đòi hỏi kỹ năng lập trình.

Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 15 Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 16

Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng
Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật

• Sử dụng công cụ toán học trong Matlab để biểu diễn, phân tích
số liệu.
• Sử dụng công cụ đồ họa trong Matlab để mô phỏng các hiện
tượng cơ học hay những môn khoa học khác một cách trực
quan.
• Hỗ trợ các môn học trong chương trình đào tạo như: Phương
pháp phần tử hữu hạn, đàn hồi ứng dụng, dao dộng cơ sở, dao
động kỹ thuật, luận văn tốt nghiệp.
• Dùng Matlab phục vụ cho những công việc sau này như: đảm
nhận nhiệm các lĩnh vực kỹ thuật khác nhau trong công ty, tập
đoàn, nghiên cứu, theo đuổi các chương trình sau đại học.
Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 17 Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 18

3
9/3/2019

Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng
Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật

Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 19 Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 20

Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng
Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật

Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 21 Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 22

Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng
Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật

Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 23 Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 24

4
9/3/2019

Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng
Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật

Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 25 Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 26

Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng
Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật

Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 27 Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 28

Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng
Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật

Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 29 Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 30

5
9/3/2019

Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng
Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật

Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 31 Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 32

Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng
Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật

Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 33 Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 34

Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng
Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật

Mô tả môn học (Course Description)


Môn học cung cấp cho sinh viên các kiến thức từ cơ bản đến nâng cao về
Số tín chỉ 3 (2.2.5) MSMH chương trình MATLAB và khả năng ứng dụng MATLAB trong việc tính toán và
Số tiết Tổng: 60 LT: 30 TH: 30 TN: 0 BTL/TL: X mô phỏng số trong cơ học. Môn học giúp sinh viên rèn luyện kỹ năng viết chương
Môn ĐA, TT, LV trình để giải quyết các dạng bài toán trong ngành cơ kỹ thuật như bài toán cơ lý
Tỉ lệ đánh giá BT: 10% TN: 0 KT: 30% BTL/TL: Thi: 60%
thuyết, lý thuyết đàn hồi, đàn hồi ứng dụng, phương pháp phần tử hữu hạn.
Hình thức đánh giá - Kiểm tra + Thực hành trên lớp: 30%
- Thi + Báo cáo bài tập lớn cuối kỳ trên lớp: 60% Nội dung cơ bản của môn học như sau:
- Bài tập về nhà :10% - Môi trường tính toán trong MATLAB: Giới thiệu chung về chương trình
Môn tiên quyết MATLAB, môi trường tính toán trong MATLAB, mảng và các phép toán trên
Môn học trước Cơ học lý thuyết - Giải tích 1 – Giải tích 2 - mảng, đa thức và các phép toán trên biểu tượng, các biểu thức luận lý, cách
Môn song hành sử dụng M-file.
CTĐT ngành Ngành Cơ Kỹ Thuật
Trình độ đào tạo Đại học - Đồ họa và giao diện trong MATLAB: Sử dụng đồ thị hai chiều, ba chiều, mô
Cấp độ môn học 2 phỏng hình động, hàm số và ứng dụng, lập trình chương trình có giao diện
Ghi chú khác tương tác thân thiện với người dùng trong MATLAB.
- Lập trình tính toán mô phỏng bài toán cơ kỹ thuật bằng MATLAB: Thực
thi một số giải thuật phương pháp số, các giải thuật hỗ trợ chương trình
phương pháp phần tử hũu hạn, lập trình tính toán và mô phỏng các bài toán
cơ học lý thuyết động học và động lực học một và nhiều bậc tự do dựa trên
ngôn ngữ MATLAB.

Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 35 Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 36

6
9/3/2019

Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng
Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật

Mục tiêu môn học


• L.O.1. Có khả năng sử dụng thành thạo các công cụ tính toán và đồ
họa trong MATLAB.
• L.O.2. Có khả năng lập trình các bài toán kỹ thuật trong môi trường
MATLAB.
1. A Guide to MATLAB for Beginners and Experienced
• L.O.3. Có khả năng xây dựng một chương trình có giao diện hoàn
Users - Brian R. Hunt Ronald, L. Lipsman Jonathan, M. chỉnh tương tác gần gũi với người dùng thông qua ngôn ngữ lập trình
Rosenberg MATLAB
• L.O.4. Có khả năng thực thi các giải thuật phương pháp số như
2. Graphic and GUI with MATLAB - O. Thomas Holland, phương pháp phần tử hữu hạn thông qua ngôn ngữ lập trình MATLAB
Patrick Marchand • L.O.5. Có khả năng lập trình tính toán và mô phỏng các bài toán động
học và động lực học trong kỹ thuật, xây dựng được các phương trình
3. The Finite Element Method using MATLAB - Kwon and vi phân động lực học của hệ một và nhiều bậc tự do và đánh giá các
Bang thông số động lực học
• L.O.6. Có khả năng tự học và nâng cao kiến thức lập trình tính toán
trong cơ học, cập nhật các kiến thức mới dựa trên kiến thức nền tảng
được cung cấp

Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 37 Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 38

Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng
Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật

Chuẩn đầu ra môn học L.O.2. Có khả năng lập trình các bài toán kỹ thuật trong môi trường MATLAB.
• L.O.2.1. Nắm được cách sử dụng M-file để viết chương trình
L.O.1 Có khả năng sử dụng thành thạo các công cụ tính toán và đồ họa
• L.O.2.2. Biết một số phương pháp khắc phục lỗi chương trình trong M-file
trong MATLAB.
• L.O.2.3. Nắm được các phép toán luận lý và vòng lặp trong MATLAB
• L.O.1.1. Nắm được các chức năng, các hàm cơ bản, cách xử lý
chuỗi và file trong MATLAB
• L.O.1.2. Nắm được cấu trúc, các tính chất của mảng trong MATLAB. L.O.3. Có khả năng xây dựng một chương trình có giao diện hoàn chỉnh tương
tác gần gũi với người dùng thông qua ngôn ngữ lập trình MATLAB
Thực thi được các phép tính và các phép biến đổi trên ma trận
• L.O.3.1. Hiểu được môi trường xây dựng giao diện trong MATLAB (GUI)
• L.O.1.3. Nắm được các cách thức khai báo biểu tượng và các phép
• L.O.3.2. Nắm được tính chất và cách thức xây dựng các đối tượng trong GUI
tính trên biểu tượng, các phép toán cộng trừ nhân chia đa thức, số
phức, đạo hàm và tích phân trong MATLAB • L.O.3.3. Nắm được cách thức tương tác giữa các đối tượng trong GUI
• L.O.1.4. Nắm được cách thức ứng dụng các công cụ đồ thị hai chiều, • L.O.3.4. Có khả năng viết code để thực thi hoạt động của các đối tượng
ba chiều và mô phỏng hình động trong MATLAB

Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 39 Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật
40

Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng
Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật

L.O.4. Có khả năng thực thi các giải thuật phương pháp số như phương pháp L.O.5. Có khả năng lập trình tính toán và mô phỏng các bài toán động học và
phần tử hữu hạn thông qua ngôn ngữ lập trình MATLAB động lực học trong kỹ thuật, xây dựng được các phương trình vi phân động lực
học của hệ một và nhiều bậc tự do và đánh giá các thông số động lực học
• L.O.4.1. Nắm vững cách thức lập trình giải phương trình và hệ phương trình
phi tuyến bằng MATLAB • L.O.5.1. Nắm vững cách thức phân tích quan hệ động học cơ hệ, lập trình
tính toán các thông số vận tốc, gia tốc, quãng đường
• L.O.4.2. Thực hiện giải thuật chia lưới
• L.O.5.2. Nắm vững cách thức phân tích động lực học cơ hệ, lập trình giải
• L.O.4.3. Nắm vững phương pháp lắp ráp ma trận cứng
phương trình vi phân phi tuyến tính toán các thông số vận tốc, gia tốc, quãng
• L.O.4.4. Hiểu được giải thuật phổ màu phần tử đường
• L.O.5.3. Nắm vững việc viết giải thuật để biểu diễn vận tốc, gia tốc, quãng
đường theo thời gian trên đồ thị tĩnh và động, mô phỏng chuyển động của
toàn cơ hệ

L.O.6. Có khả năng tự học và nâng cao kiến thức lập trình tính toán trong cơ
học, cập nhật các kiến thức mới dựa trên kiến thức nền tảng được cung cấp

Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 41 Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 42

7
9/3/2019

Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng
Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật

ĐẦU VÀO ĐẦU RA


Kỹ năng, hiểu biết đạt được
sau khi học: ứng dụng phần
Kiến thức cần có: cơ học,
mềm Matlab giải bài toán cơ
toán học, tin học cơ bản
học, kỹ năng tư duy lập
LẬP trình trong cơ học kỹ thuật
TRÌNH
Kỹ năng cần có: sử dụng TÍNH Kiến thức đạt được sau khi
máy tính (PC), xây dựng học: cách sử dụng các công
TOÁN cụ trong Matlab, phương
giải thuật
CƠ KỸ pháp giải bài toán trong cơ
THUẬT kỹ thuật
Môn trang bị kiến thức kỹ
năng để học môn này: tin Môn sử dụng kiến thức kỹ
học đại cương, cơ lý năng đạt được từ môn này:
thuyết, phương pháp phương pháp phần tử hữu
tính, kỹ thuật lập trình, hạn, đàn hồi ứng dụng, tính
phương pháp phần tử toán kết cấu, luận văn tốt
hữu hạn nghiệp

Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 43

8
9/3/2019

Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng
Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật

Chương 1
Giới thiệu chung
về chương trình MATLAB
Giảng viên: Ths. Trần Kim Bằng
Bộ môn Cơ Kỹ Thuật, P.106B4
Khoa Khoa Học Ứng Dụng
Đại học Bách Khoa TpHCM

Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 1 Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 2

Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng
Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật

1.1. Tiếp cận phần mềm matlab • Người dùng có thể chạy trực tiếp các lệnh trên Command Window.
Dùng phiên bản từ 2016b
Cài đặt và sử dụng trong môi trường Window
Khởi động Matlab, bốn cửa sổ xuất hiện như sau

Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 3 Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 4

Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng
Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật

• Cửa sổ Current folder thể hiện danh sách các file có trong thư mục • Cửa sổ Workspace thể hiện tất cả biến người sử dụng đã định nghĩa
hiện hành. và các tính chất của nó.

Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 5 Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 6
9/3/2019

Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng
Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật

• Trong Command History, các dòng lệnh được chia làm nhiều phần.
• Cửa sổ Command History lưu trữ các lệnh đã được thực hiện trên
Command Window. • Mỗi phần được giới hạn bởi thời điểm khởi động Matlab và thời điểm
thoát Matlab.

Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 7 Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 8

Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng
Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật

Để lưu trữ và chỉnh sửa một tập hợp nhiều lệnh (một chương trình). Ta tạo Ta có thể tắt mở các cửa sổ và thiết lập tình trạng ban đầu bằng Desktop
một M-file. menu

Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 9 Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 10

Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng
Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật

• Khi ta khai báo các biến trong command window, các biến sẽ được • Để xóa các lệnh trong command window, dùng lệnh clc hay vào Edit
lưu trữ trong bộ nhớ đến khi thoát chương trình Matlab. menu.
• Để biểu diễn lại biến đã định nghĩa, gõ tên biến trên command • Để quy định cách thể hiện số trên command window, dùng lệnh format
window hoặc xem trong workspace.
• Để xóa các biến trong bộ nhớ, dùng lệnh Clear all.
• Trên command window, khi ta đã thực thi một dòng lệnh rồi thì không
thể chỉnh sửa dòng lệnh đó lại được nữa. Bấm nút ^ hay vô command
history để gọi lại lệnh đó.
e+002 tức là x102
• Các dòng lệnh được thực thi trong M-file không được lưu trữ trong
command history nhưng các biến vẫn được lưu trữ trong workspace.

Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 11 Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 12
9/3/2019

Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng
Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật

1.2. Một số quy định cơ bản về cú pháp trong matlab 1.3. Những tên biến đặc biệt trong matlab
• Matlab cho phép đặt tên biến có độ dài lên đến tối đa 63 ký tự.
Các biến đặc biệt Giá trị
• Không được để khoảng trắng khi đặt tên biến. Để biễu diễn
khoảng trắng, có thể thay thế bằng dấu “_” ans Tên biến mặc định dùng để trả về kết quả
pi π = 3.1415
• Không đặt tên biến trùng với lệnh trong Matlab.
i, j Đơn vị ảo: i = j = 1
• Matlab phân biệt chữ hoa và chữ thường khi đặt tên biến. A và a,
hay matr và matR là hai biến khác nhau. inf Số vô cùng 1 0  
• Hạn chế dùng tiếng Việt có dấu để đặt tên folder chứa file Matlab. nan Số không xác định 0/0
… …
Quy định về tên biến Ví dụ
Phải bắt đầu bằng chữ cái a_b_c, a1, X53
Không chứa các kí tự đặc biệt Không dùng ~@!#$%^&*()-
+=:.,”? …

Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 13 Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 14

Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng
Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật

• Có hai cách thức để chạy lệnh trong Matlab: chạy trong 1.4. Một số lệnh tiện ích
Command window hoặc chạy trên M_file.
• Trong Matlab, tất cả các biến phải được gán giá trị số Lệnh Ý nghĩa
(trừ biến symbolic) trước khi được sử dụng trong các clc xóa màn hình
lệnh.
clear all xóa dữ liệu các biến
• Để gán giá trị cho biến, dùng dấu “=“ rồi bấm Enter.
• Khi gán giá trị cho biến hay thực thi dòng lệnh mà không close all đóng tất cả cửa sổ đồ họa
cần thể hiện kết quả trên command window, thêm dấu “;” Ctrl+c dừng chương trình
vào cuối dòng lệnh. quit , exit thoát Matlab
• Ta có thể chạy liên tiếp các lệnh bằng cách dùng dấu “,”
để ngăn cách các lệnh. Sau đó bấm Enter

Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 15 Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 16

Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng
Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật

1.5. Một số phép toán đơn giản Độ ưu tiên của các phép toán trong biểu thức
• Matlab thực hiện phép toán
• Từ trong dấu ngoặc ra ngoài dấu ngoặc
Phép tính Ký hiệu Ví dụ
• Từ trái sang phải
Phép cộng, a+b + 3+9
>>T=(1/(1+p*x))^k
Phép trừ, a-b - 90-54
Phép nhân, a.b * 55*3.7
Phép chia, a÷b / hoặc \ 56/8 = 8\56
Phép lũy thừa, ab ^ 5^2
Chú ý:
Mức độ ưu tiên của phép toán:
Lũy thừa  Nhân, chia  Cộng, trừ • Trong Matlab, các phép toán (+,-,*,/ và ^) đều theo quy tắc của ma
Ví dụ: trận.
>> a=3 % enter • Để bỏ quy tắc này, ta thêm dấu “.” trước mỗi phép tính.
>> b=5 % enter • Khi thực hiện một phép tính toán mà không gán giá trị vào một biến cụ
>> c=a+b % enter thể, Matlab sẽ gán giá trị vừa tính vào biến “ans”. Biến này sẽ thay đổi
giá trị nếu như có một phép toán khác được thực hiện sau đó.

Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 17 Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 18
9/3/2019

Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng
Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật

1.6. Sử dụng M_FILES trong MATLAB


• File.m là một file text, được thiết lập trong Matlab Editor/Degugger,
chứa một loạt các câu lệnh và các hàm (function) khác.
• Khi chọn Run, các câu lệnh sẽ được thực thi theo thứ tự từ trên Tên function
xuống dưới. và tên định
• Trước khi được thực thi, file.m phải được lưu lại trong thư mục làm dạng .m khi
việc. lưu phải giống
• Quy định về việc đặt tên cho file.m cũng tương tự với việc đặt tên nhau
biến. Tên hàm (function) và tên file khi lưu lại phải giống nhau. Ví
dụ function giaipt phải được lưu dưới định dạng .m với tên là
giaipt.
• Từ Matlab Editor/Degugger, ta có thể tạo ra các function. Mỗi một
function thực hiện một nhiệm vụ nhất định.

Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 19 Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 20

Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng
Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật

Ba giá trị đưa vào Tại sao sử dụng file.m?


Hai giá trị trả về  Chương trình (code) quá dài.
 Chương trình được sử dụng nhiều lần.
 Chương trình cần được sửa lỗi và nâng cấp dần theo thời
gian.
 Việc sửa đổi tên biến và thông số được thực hiện một
cách nhanh chóng
Để chuyển một loạt
các dòng code thành
dòng chú thích, bôi đen
rồi bấm ctrl+R.
Chuyển ngược lại bằng
cách bấm ctrl+T

Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 21 Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 22

Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng
Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật

 Màu đỏ là có lỗi cú
pháp, chương trình  Có thể tận dụng chức năng Cell bằng cách dùng %% để phân ra
không chạy tiếp được thành nhiều vùng lệnh trong chương trình.
 Màu cam là cảnh báo,  Ta có thể chạy từng vùng lệnh riêng biệt. Điều này giúp việc quản lý
chương trình vẫn chạy chương trình dễ dàng hơn.
được
 Màu xanh lá là chương
trình tốt, không có bất
cứ vấn đề gì

Để biết chi tiết về lỗi


hay cảnh báo, rê con
trỏ vào các vạch này.

Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 23 Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 24
9/3/2019

Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng
Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật

Có thể dùng cách khác


Để thiết lập đường dẫn đến thư mục hiện hành. Ta dùng chức năng Set Path

Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 25 Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 26

Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng
Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật

1.6. Một số quy ước màu sắc cho ký tự trong môi trường Có thể thay đổi màu sắc của ký tự
matlab editor

Keywords
màu xanh
dương

Chú thích
màu xanh lá
cây
Smart
indent

Chuỗi cố định màu tím

Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 27 Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 28

Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng
Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật

CHÚ Ý
• Các hàm có thể dùng chung các biến với hàm khác. Muốn truy cập biến
của hàm khác ta phải khai báo biến đó là biến toàn cục với từ khóa
global
• Ví dụ như global a b
• Có thể gọi nhiều function từ M-file.
• Giá trị trả về của function có thể là số, vector, ma trận hoặc chuỗi kí tự.

Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 29


9/3/2019

Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng
Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật

Chương 2
Các phép toán trên
ma trận
Giảng viên: Ths. Trần Kim Bằng
Bộ môn Cơ Kỹ Thuật, P.106B4
Khoa Khoa Học Ứng Dụng
Đại học Bách Khoa TpHCM

Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 1 Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 2

Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng
Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật

2.1.1. Cú pháp khai báo mảng đơn

Vector hàng: >> x= [a b c d]

Tên mảng Khoảng trắng hoặc Các phần tử mảng


dấu “,”
2.1. Mảng đơn (vector)
Vector cột: >> x= [a; b; c; d]
“;” là xuống hàng

Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 3 Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 4

Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng
Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật

2.1.2. Địa chỉ của mảng 2.1.3. Một số lệnh tạo mảng tự động
Cú pháp truy cập giá trị phần tử tại vị trí nào đó của mảng
Dạng lệnh Chức năng
>> x(vitri) x=first:last Tạo vector hàng x bắt đầu là first, kết thúc
Ví dụ: >>x=[2 3 4 8 6 7] nhỏ hơn hoặc bằng last, bước mặc định là 1
>>x(1) % truy cập giá trị phần tử thứ nhất của mảng x=first:increment: last Tạo vector hàng x bắt đầu là first, kết thúc
Cú pháp truy cập giá trị nhiều phần tử của mảng nhỏ hơn hoặc bằng last, bước là increment
>> x(a:b) x=linspace(first,last,n) Tạo vector hàng x bắt đầu là first, kết thúc
>> x(a:c:b) bằng last, có n phần tử
Ví dụ: >>x1=x(2:4) % truy cập giá trị phần tử thứ 2 đến phần tử thứ 4 x=logspace(first,last,n) Tạo vector hàng x bắt đầu là 10first, kết thúc
bằng 10last, có n phần tử
Ví dụ: >>x2=x(2:2:5) % truy cập giá trị phần tử thứ 2 đến phần tử thứ 5 với
bước nhảy là 2; Chuyển vector hàng thành vector cột và ngược lại:
Cú pháp gán lại giá trị cho phần tử của mảng: >> y=x’
>> x(vitri)=giatri) Ví dụ:
>>x=[2 3 4 8 6 7]
Ví dụ: >>x(2)=5 %phần tử thứ 2 được gán lại giá trị 5 >>y=x’

Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 5 Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 6
9/3/2019

Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng
Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật

2.2.1. Cú pháp khai báo ma trận


>> x= [1 2 3 4; 5 6 7 8;…]

Các phần tử Các phần tử


hàng 1 hàng 2

Đọc ma trận từ một file dữ liệu:


2.2. Mảng hai chiều (ma trận) Một file văn bản matran.txt có nội dung:
2591
4683
2451
>> load c:\matran.txt
>> matran
matran=
2591
4683
2451

Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 7 Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 8

Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng
Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật

2.2.2. Cú pháp tìm kiếm trong ma trận Tìm và trả về giá trị một phần tử theo một điều kiện toán học

Cú pháp truy xuất giá trị cho phần tử của mảng hai chiều Ví dụ: >> x=-4:4
>> k=find(abs(x)>1) %Tìm tất cả phần tử có trị tuyệt đối lớn
>> x(vitrihang, vitricot) hơn 1 trong mảng x
Ví dụ: Ta có x=[2 3 4; 8 6 7] Ví dụ: >> A=[1 2 3; 4 5 6; 7 8 9]
>>x(1,2) % truy xuất phần tử hàng thứ nhất, cột thứ hai của mảng >> [a b]=find(A>5) %Tim tất cả phần tử lớn hơn 5 trong
mảng A
Cú pháp gán lại giá trị cho phần tử của mảng hai chiều:
>> x(vitrihang, vitricot)=giatri Chú ý: >> x=-4:4
>> k=find(x) % tìm tất cả phần tử có giá trị khác ) trong mảng x
Ví dụ: >>x(2,3)=5 %phần tử hàng thứ 2, cột 3 được gán lại = 5

Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 9 Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 10

Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng
Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật

Tìm và trả về luận lý 2.2.3. Một số ví dụ về thao tác với các phần tử trong ma trận
Ví dụ: >> x=-4:4 >> A=[1 2 3 ; 4 5 6; 7 8 9]
>> x>1
>> x==1  1 2 3
>> abs(x)>1
A  4 5 6
Biểu thức luận lý  
Tìm và trả về giá trị  7 8 9 

Ví dụ: >> x=-4:4 >>A(3,3)=0


>> y=x(abs(x)>2)
>> y=x(x==1)
 1 2 3
A  4 5 6
 
 7 8 0

Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 11 Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 12
9/3/2019

Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng
Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật

>> A=[11 26 63]


Để lấy truy cập giá trị 26, gọi lệnh A(2) hoặc A(1,2)

>> A=[11 26 63]’

Để truy cập giá trị 26, gọi lệnh A(2) hoặc A(2,1)

Để truy cập giá trị phần tử cuối cùng, gọi lệnh A(end)

Để truy cập giá trị 26, gọi lệnh A(5) hoặc A(1,2)
Để truy cập giá trị 7, gọi lệnh A(10) hoặc A(2,3)
Để truy cập giá trị phần tử cuối cùng - 344, gọi lệnh A(end) hoặc A(12)

Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 13 Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 14

Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng
Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật

Sử dụng toán tử (:)


Tại vị trí dấu (:) trong ma trận, nó đại diện cho tất cả các hàng hoặc tất
cả các cột
>> x=A(:,1); % đưa dữ liệu ở cột 1 vào vector x
>> y=A(:,2); % đưa dữ liệu ở cột 2 vào vector y
Dấu (:) dùng chọn các ma C(:) tương đương vector có một
trận con từ ma trận khác cột, phần tử của cột chính là các
Ví dụ: cột của ma trận C
>> C=[-1 0 0 >> C = [ 1 4 7;
2 5 8;
1 -1 4 3 6 9];
1 -1 2 >> C(:)
Gán một giá trị nằm ở vị trí ngoài kích thước ma trận A thì
5 2 -1];
các vị trí còn lại nếu chưa được gán sẽ tự động bằng 0
>> C1=C(:,2:3);
>> C2=C(3:4,1:2);

Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 15 Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 16

Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng
Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật

 1 2 3 7 8 9   1 2 3
 2 3
A  4 5 6 B  4 5 6 A  4 5 6 B 
       5 6
 7 8 9 
 7 8 9  1 2 3
>>A=[1 2 3 ; 4 5 6; 7 8 9]
1 2 3 7 9 >>B=A(1:2,2:3) %trích từ ma trận [A]
C  4 5 6 4 6
   1 2 3
 7 8 9 1 3  1 3
A  4 5 6 B 
  7 9 
>>A=[1 2 3 ; 4 5 6; 7 8 9]  7 8 9 
>>B=A(3:-1:1,1:3) %cách khác >>B=A(3:-1:1,:) >> C=[1 3]
>>C=[A B(1:3,[1 3])] >> B=A(C,C) %trích từ ma trận [A]

Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 17 Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 18
9/3/2019

Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng
Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật

Xóa phần tử, hàng, cột, trong ma trận

Xóa cột 1
và tất cả
hàng Xóa cột từ 3 đến 4 và
tất cả hàng

Xóa hàng
2 và tất cả Xóa hàng
cột từ 3 đến 4
và tất cả
cột

Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 19 Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 20

Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng
Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật

2.2.3. Các phép toán ma trận với số đơn 2.2.4. Các phép toán ma trận với ma trận
Dữ liệu minh họa: a=[a1 a2 … an]; b=[b1 b2 … bn], c: số vô hướng Phép toán được thực hiện trên từng cặp phần tử tương ứng vị trí, trả về
ma trận kết quả
Cộng với số đơn a+c=[a1+c a2+c … an+c]
Nhân với số đơn a*c=[a1*c a2*c … an*c] Ví dụ: Ta có a=[1 2 3; 4 5 6] ; b=[2 3 4; 5 6 7]
>>c=a+b % kết quả c=[3 5 7; 9 11 13]
Cộng mảng a+b=[a1+b1 a2+b2 … an+bn]
Nhân mảng a.*b=[a1*b1 a2*b2 … an*bn] Chú ý: Toán tử .* : nhân các phần tử tương ứng 2 ma trận với nhau
Chia phải mảng a./b=[a1/b1 a2/b2 … an/bn] Toán tử ./ : chia các phần tử tương ứng 2 ma trận với nhau
Chia trái mảng a.\b=[a1\b1 a2\b2 … an\bn] Toán tử .\ : chia trái các phần tử tương ứng 2 ma trận với nhau
a.^c=[a1^c a2^c … an^c] Toán tử .^ : lũy thừa các phần tử tương ứng 2 ma trận với nhau
Lũy thừa mảng c.^a=[c^a1 c^a2 … c^an]
Toán tử * : nhân 2 ma trận với nhau (lưu ý kích thước)
a.^b=[a1^b1 a2^b2 … an^bn]

Chú ý: .*c ./c .\c .^c : nhân, chia phải, chia trái, lũy thừa từng
phần tử trong ma trận với một số đơn c
Chia trái ma trận: C = A \ B = inv(A) * B (giai pt: AX = B)

Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 21 Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 22

Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng
Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật

Ví dụ: Giải hệ phương trình tuyến tính 2.2.5. Một số lệnh thao tác với ma trận

 1 2 3  x1   366 Cú pháp Chức năng


 4 5 6 .  x   804  ones(n) Tạo ma trận n x n với các phần tử là 1
   2   ones(r,c) Tạo ma trận r x c với các phần tử là 1
 7 8 0  x3   351 eye(n) Tạo ma trận đơn vị kích thước n x n (đường chéo =1)
   zeros(n) Tạo ma trận n x n với các phần tử là 0
A x b
zeros(r,c) Tạo ma trận r x c với các phần tử là 0
>> A=[1 2 3; 4 5 6; 7 8 0] rand(n) Tạo ma trận n x n với các phần tử là số ngẫu nhiên
>> b=[366; 804;351] size(a) Trả về kích thước mảng a
>> x=inv(A)*b
>> x=A\b

Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 23 Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 24
9/3/2019

Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng
Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật

Cú pháp Chức năng


Cú pháp Chức năng
a’ Chuyển vị của ma trận a
eig(a) Tìm trị riêng của ma trận a
inv(a) Tìm nghịch đảo của ma trận a
rank(a) Xác định hạng của ma trận a
det(a) Tính định thức của ma trận a
b=triu(a) Sinh ra ma trận b cùng cỡ, chứa các phần tử a nằm
diag(a) Tạo ma trận với đường chéo gồm các phần tử lấy từ vector ở đường chéo chính và trên đường chéo chính. Vị trí
a
khác bằng 0
Tạo vector gồm các phần tử thuộc đường chéo của ma trận
a triu(a,k) Phần tử a nằm trên và phía trên đường chéo thứ k
diag(a,k) Chọn đường chéo dựa vào k tril(a) Sinh ra ma trận cùng cỡ, chứa các phần tử a nằm ở
•k=0 đường chéo chính đường chéo chính và dưới đường chéo chính. Vị trí
•k>0 đường chéo thứ k trên đường chéo chính khác bằng 0
•k<0 đường chéo thứ k dưới đường chéo chính tril(a,k) Phần tử a nằm ngay trên và phía dưới đường chéo
a=diag(v) Nếu v là vector thì a là ma trận vuông có v là thứ k. Các vị trí khác bằng 0
đường chéo chính. Các phần tử khác bằng 0

Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 25 Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 26

Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng
Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật

2.2.6. Một số lệnh đặc biệt thao tác trên ma trận Sort: Xếp theo thứ tự từ nhỏ đến lớn
Đảo ngược hàng hoặc cột

Ví dụ: >> A=[1 2 3; 4 5 6; 7 8 9]


>> B=flipud(A) % Đảo ngược hàng trên dưới
>> C=fliplr(A) % Đảo ngược cột trái phải
Xoay 900 ma trận

Ví dụ: >> A=[1 2 3; 4 5 6; 7 8 9]


>> D=rot90(A) % Xoay ma trận với góc 900
>> D=rot90(A,2)% Xoay ma trận 2 lần với góc 900
Ma trận chứa giá
Ma trận vị trí các
trị các phần tử
phần tử trong ma
đã được sắp xếp
trận cũ

Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 27 Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 28

Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng
Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật

Max và Min: tìm phần tử lớn nhất, nhỏ nhất repmat(A,x,y) copy mảng A thành x dòng và y cột

Phần tử nhỏ nhất

Vị trí phần tử nhỏ nhất

Ma trận chứa
Ma trận chứa vị
phần tử lớn nhất
trí hàng của
trong từng cột
phần tử lớn nhất
của ma trận a.

Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 29 Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 30
9/3/2019

Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng
Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật

[A,B]=meshgrid(x,y) tạo ma trận A, B từ vector x,y


spy(a) hiển thị vị trí của giá trị zeros trong ma trận a

 Mỗi dòng của ma trận A


là vector x
 Số dòng của ma trận A
bằng số lượng phần tử
của vector y
 Mỗi cột của ma trận B
là vector y
 Số cột của ma trận B
bằng số lượng phần tử
của vector x

Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 31 Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 32

Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng
Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật

Ví dụ:
>>z=ones(100,200);
>>z(10:50,150:170)=0;
>>z(70:80,20:35)=0;
>>z(4:5:100,50:130)=0;
>>z(3:5:100,50:130)=0;
>>z(2:5:100,50:130)=0;
>>z=z-eye(100,200);
>>spy(z)
2.3. Mảng ba chiều

Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 33 Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 34

Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng
Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật

2.3.1. Cấu trúc mảng ba chiều 2.3.2. Tạo ma trận ba chiều và lắp ghép ma trận (dùng
lệnh cat)

Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 35 Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 36
9/3/2019

Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng
Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật

Chương 3
Đồ họa hai chiều trong
Matlab
Giảng viên: Ths. Trần Kim Bằng
Bộ môn Cơ Kỹ Thuật, P.106B4
Khoa Khoa Học Ứng Dụng
Đại học Bách Khoa TpHCM

Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 1 Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 2

Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng
Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật

Một số thuật ngữ quan trọng trong


đồ họa Matlab
• figure: cửa sổ đồ họa, nơi chứa các đối tượng đồ họa khác
3.1. Các lệnh tạo đối tượng đồ
• axes: đối tượng đồ họa hệ trục tọa độ, hiển thị vùng không gian biểu
diễn các đối tượng độ họa dạng đường nét, hay chuỗi ký tự
họa hệ trục, đường nét, chuỗi ký
• line: đối tượng đồ họa ở dạng đường nét
• text: đối tượng đồ họa ở dạng chuỗi ký tự
tự và thiết lập các tính chất kèm
• title: đối tượng đồ họa dạng chuỗi ký tự được đặt trên đối tượng đồ
họa hệ trục tọa độ theo trong không gian hai chiều
• xlabel: đối tượng đồ họa dạng chuỗi ký tự được đặt cạnh trục x của
đối tượng đồ họa hệ trục tọa độ
• ylabel: đối tượng đồ họa dạng chuỗi ký tự được đặt cạnh trục y của
đối tượng đồ họa hệ trục tọa độ

Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 3 Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 4

Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng
Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật

3.1.1. Cú pháp tổng quát của hàm plot Bảng 4.1. Quy ước về dạng đường nét, điểm dữ liệu, màu sắc trong Matlab
plot(X1,Y1,LineSpec,'PropertyName',PropertyValue)

Code Matlab: Giải thích:


x = -pi:pi/10:pi; • Tạo mảng x có giá trị từ -
y = tan(sin(x)) - sin(tan(x)); pi đến pi.
plot(x,y,'-.m^','LineWidth',2,... • Tạo mảng y theo x
'MarkerEdgeColor',[1 0 1],... • Vẽ đường cong y = f(x),
'MarkerFaceColor','g',... nét chấm gạch, màu tím,
maker hình”^”, độ dày
'MarkerSize',10) đường nét bằng 2, màu
'--rs‘ -- là dạng đường, r là màu sắc của của cạnh Maker là tím
đường, s là hình dạng maker (màu sắc được quy ước
LineWidth là độ dày của đường theo giá trị từ 0->1 trong
[1 0 1], màu nền của
MakerEdgeColor là màu của cạnh Maker
Maker là xanh lá cây, kích
MakerFaceColor là màu nền của Maker thước điểm dữ liệu là 10.
MakerSize là kích thước của Maker
Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 5 Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 6
9/3/2019

Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng
Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật

3.1.2. Vẽ nhiều đồ thị trên cùng một hệ trục (axis) Code Matlab: Giải thích:
x=linspace(0,pi,1000); • Tạo mảng x chứa 1000 giá trị.
Dùng lệnh hold on để giữ lại các đối tượng đã hiển thị trên cửa sổ đồ họa y=cos(6*x).*exp(-x)
plot(x,y,'-.^') • Tạo mảng y theo x.
Code Matlab: Giải thích: • Vẽ đường cong y = f(x), vừa có nét chấm
x=linspace(0,2*pi,30); • Tạo mảng x có giá trị từ -2*pi với 30 phần gạch, vừa có các maker hình”^”.
y=sin(x); tử. • Vì hai mảng x và y dùng để biểu diễn cả
z=cos(x); đường nét và maker nên sẽ hiển thị rất nhiều
plot(x,y,'-.','color',[1 0 0])
• Tạo mảng y theo x.
maker và gây rối mắt.
hold on • Tạo mảng z theo x.
plot(x,z,':d','color','g'), • Vẽ đường cong y = f(x), nét chấm gạch, Chú ý:
màu đỏ ([1 0 0]).
 Đồ thị có quá nhiều maker có thể gây rối mắt.
• Giữa lại đối tượng đã tạo trên cửa sổ đồ
họa trước đó.  Có những trường hợp chỉ cần biểu diễn maker tại một số điểm quan
trọng
• Vẽ đường cong y = z(x), nét chấm gạch,
màu xanh lá cây, kèm theo các maker  Để khắc phục điều này, tách ra hai mảng dữ liệu. Một dùng để vẽ
hình kim cương. đường cong và một để thể hiện maker

Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 7 Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 8

Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng
Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật

3.1.3. Các lệnh hiển thị hoặc không hiển thị trục tọa độ và lưới
Code Matlab: Giải thích: Bảng 4.2. Một số lệnh tương tác với hệ trục tọa độ
x=linspace(0,pi,1000); • Tạo mảng x chứa 1000 giá trị.
y=cos(6*x).*exp(-x); Lệnh Matlab Giải thích
plot(x,y, '-r')
• Tạo mảng y theo x. axis on Hiển thị hệ trục tọa độ
hold on • Hiển thị y = f(x) dưới dạng nét
axis off Ẩn đi hệ trục tọa độ
xm=linspace(0,pi,20); cơ bản và màu đỏ.
box on Hiển thị khung hệ trục tọa độ
ym= cos(6*xm).*exp(-xm); • Hold on để giữ nguyên đường
plot(xm,ym,'^b') cong trước đó đã vẽ trên hệ box off Ẩn đi khung hệ trục tọa độ
trục. grid on Hiển thị lưới
• Tạo mảng xm chứa 20 giá trị. grid off Ẩn đi lưới
• Tạo mảng ym theo xm.
• Hiển thị ym = f(xm) dưới dạng
các maker và màu xanh
dương.

Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 9 Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 10

Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng
Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật

3.1.4. Chú thích trên hệ trục tọa độ 3.1.5. Quy ước các mốc giá trị trên một trục

Code Matlab: Giải thích: Code Matlab: Giải thích:


x = linspace(0, 6, 100); • Vẽ ba đường cong trên cùng hệ x = -pi:0.1:pi; • Tạo mảng x
plot(x,cos(x), 'k-', x, 1./cosh(x), trục tọa độ y = sin(x);
• Tính y từ x
'k--', [4.73, 4.73], [-1, 1], 'k') p = plot(x,y);
• Dùng lệnh xlabel chú thích trục x set(gca,'XTick',-pi:pi/2:pi) • Vẽ đường cong
xlabel('x')
ylabel('Value of functions') • Dùng lệnh ylabel chú thích trục y set(gca,‘xticklabels’,{'-pi','- • Dùng lệnh set thiết lập các mốc
title('Visualization of two • Dùng lệnh title đặt tiêu đề cho đồ pi/2','0','pi/2',‘3pi/2','pi'}) giá trị trên trục hoành của hệ trục
intersecting curves') thị text(-pi/4,sin(-pi/4),'\leftarrow sin(- tọa độ hiện hành (gca) với giá trị
text(4.8, -0.1, 'x = 4.73') • Dùng lệnh text để đặt chuỗi ký tự \pi\div4)','HorizontalAlignment','left') đi từ -pi đến pi và bước nhảy pi/2.
legend('cos(x)', tại một vị trí nào đó trong hệ trục • Dùng lệnh set ký hiệu các mốc
'1/cosh(x)','Location', tọa độ. giá trị trên trục hoành với các
'SouthWest') chuỗi ký tự do người sử dụng đặt
• Dùng lệnh legend hú thích tên
đường cong (vẽ đường cong nào ra.
trước thì lệnh legend sẽ có tác • Dùng lệnh text ký hiệu mũi tên
dụng với đường cong đó trước) và nằm ngang hướng từ phải qua trái
chọn vị trí tây nam tại một vị trí trong hệ trục tọa độ.

Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 11 Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 12
9/3/2019

Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng
Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật

3.1.6. Một số lệnh điều chỉnh hệ trục tọa độ 3.1.7. Chú thích bằng ký hiệu toán học
Lệnh Matlab Giải thích • Dùng ^ để ký hiệu chỉ số trên dòng
axis([xmin xmax ymin ymax]) Điều chỉnh khoảng không gian quan • Dùng _ để ký hiệu chỉ số dưới dòng
sát • Dùng \ để ký hiệu chữ số hy lạp và toán học
• Dùng \bf để bật chế độ in đậm
axis square Điều chỉnh thành hệ trục vuông • Dùng \it để bật chế độ in nghiêng
axis equal Điều chỉnh các khoảng chia trên trục • Dùng \rm để chuyển thành dạng thường
tung và trục hoành bằng nhau
axis normal Làm đồ thị cân xứng nhưngcác
khoảng chia trên trục tung và trục
hoành không bằng nhau
Code Matlab: Giải thích:
x=linspace(0,2*pi,30); Dùng lệnh axis giới hạn không gian quan sát theo
y=sin(x);
o Phương ngang với xmin = 0 và xmax = 2*pi
plot(x,y)
axis([0 2*pi -1.5 2]) o Phương đứng với ymin = -1.5 và ymax = 2
axis off Ẩn đi hệ trục tọa độ

Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 13 Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 14

Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng
Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật

3.1.8. Thay đổi thuộc tính của đối tượng đồ họa


Code Matlab:
Có thể thay đổi thuộc tính của đối tượng đồ họa bằng cách gán đối tượng
x = linspace(1, 2); beta = 3;
đồ họa cho một biến rồi tương tác với biến đó
plot(x,cos(4*pi*x).*exp(-(1+x.^beta)), 'k')
title('\it\bfg^{\rm\it2} \rmversus \Omega_1 for \it\beta \rm= 3') Code Matlab: Giải thích:
x = linspace(0, 6, 100); • Tạo mảng x.
Giải thích: in nghiêng, in đậm, ghi ký tự g; sau đó ghi chỉ số trên dòng cho fig1 = figure; • Tạo cửa sổ đồ họa thứ nhất và gán vào fig1
cụm (chuyển thành chế độ thường, bật chế độ in nghiêng, ghi ký tự 2); sau axis1=axes; • Tạo cửa hệ trục thứ nhất và gán vào axis1
đó chuyển thành chế độ thường, ghi chuỗi versus; sau đó ghi ký tự p1=plot(x,cos(x), 'k-'); • Vẽ đường cong y=cos(x) và gán vào p1
Omega; sau đó ghi chỉ số dưới dòng cho ký tự 1; sau đó ghi chuỗi for; sau fig2 = figure; • Tạo cửa sổ đồ họa thứ hai và gán vào fig2
đó bật chế độ in nghiêng, ghi ký tự beta; sau đó chuyển thành chế độ axis2 = axes('Position', • Tạo cửa hệ trục thứ hai tại vị trí [0.62, 0.62,
thường, ghi chuỗi =3 [0.62, 0.62, 0.25, 0.25]); 0.25, 0.25] và gán vào axis2
p2=plot(x,sin(x), 'b-'); • Vẽ đường cong y=sin(x) và gán vào p2
xlabel(axis2,'x1'); • Đặt tên trục hoành cho axis2
xlabel(axis1,'x'); • Đặt tên trục hoành cho axis1
set(p2,'color','g') ; • Đổi màu sắc cho p2 thành xanh lá
set(p1,'color','r'); • Đổi màu sắc cho p1 thành đỏ
plot(axis1,0,-1,’*’); • Vẽ maker hình * trên hệ trục axis1
axes(axis1); • Đưa axis1 về hệ trục hiện hành
Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 15 Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 16

Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng
Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật

3.1.9. Tạo một hệ trục mới tại một vị trí trong cửa sổ đồ họa 3.1.10. Bố trí nhiều hệ trục trong cùng một cửa sổ đồ họa
“dưới dạng ma trận”
Code Matlab: Giải thích: subplot(m,n,p)
axis1 = axes('Position', [0.62, Xác định vị trí của hệ trục tọa độ mới
0.62, 0.25, 0.25]); bên trong cửa sổ đồ họa với thuộc tính Code Matlab: Giải thích:
'Position' x=linspace(0,2*pi,30); • m là số “hàng” của “ma trận”
y=sin(x); z=cos(x); chứa hệ trục tọa độ.
a=2*sin(x).*cos(x); • n là số “cột” của “ma trận”
b=sin(x)./(cos(x)); chứa hệ trục tọa độ.
fig1=figure; • p là “vị trí” của hệ trục tọa độ
s1=subplot(2,2,1); trong “ma trận” chứa hệ trục
p1=plot(x,y); tọa độ.
s2=subplot(2,2,2);
p2=plot(x,z);
s3=subplot(2,2,4);
p3=plot(x,b);
xlabel(s2,'x2');
set(p1,'color','r');

Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 17 Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 18
9/3/2019

Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng
Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật

3.2.1. Cú pháp cơ bản của lệnh tô màu hai chiều


Để biểu diễn sự thay đổi giá trị một đại lượng nào đó trên một miền diện
tích trong không gian hai chiều bằng màu sắc, ta dùng lệnh fill(x,y,c)
X = [x(1) x(2) x(3) … x(n)]
Y = [y(1) y(2) y(3) … y(n)]
C = [c(1) c(2) c(3) … c(n)]
Code Matlab:
3.2. Tô màu diện tích trong X = [0 1 2 2 0]
Y = [0 -1 0 4 4]
fill(X,Y,C)

Giải thích:
không gian hai chiều C = [1 5 2 3 4]
fill(X,Y,C)
Giá trị c(3)
ứng với vị trí
• X là mảng chứa các hoành độ của
các điểm tạo nên miền diện tích
colorbar x(3) và y(3) được tô màu.
• Y là mảng chứa các tung độ của các
Có thể thay thế C bằng một điểm tạo nên miền diện tích được tô
chuỗi quy ước màu sắc (đỏ là màu.
‘r’) để miền diện tích được tô • C là mảng chứa các giá trị của đại
duy nhất một màu. lượng cần biểu diễn tại các điểm
fill(X,Y,’r’) tạo nên miền diện tích được tô màu.
Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 19 Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 20

Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng
Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật

3.2.2. Tô màu miền diện tích giới hạn bởi đường cong và 3.2.3. Tô màu miền diện tích được tạo bởi sự giao nhau
trục hoành của hai đường cong
Code Matlab:
Code Matlab: X = linspace(0, 2*pi);
t = linspace(0, 2*pi); Y = sin(X);
fill(t,sin(t), 'm') Z = 1 + cos(2*X);
hold on
grid on
Giải thích:
plot(X, Y, 'r', 'LineWidth', 2);
Tô màu vùng diện
plot(X, Z, 'b', 'LineWidth', 2);
tích được tạo bởi sự
XX = [X fliplr(X)];
giao nhau giữa
YZ = [Y fliplr(Z)];
đường cong sin(t) và
fill(XX,YZ,'y')
trục hoành với màu
được chọn là màu tím

Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 21 Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 22

Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng
Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật

3.2.4. Thay đổi thuộc tính của lệnh tô màu diện tích
Thêm tính chất làm trong suốt để tăng và giảm độ trong suốt của miền diện
tích được tô màu
3.3. Tạo hiệu ứng hoạt hình
Code Matlab:
t = linspace(0, 2*pi); Để tạo hiệu ứng hoạt hình và xuất ra tập tin ten.avi, cần sử dụng các
fill(t,sin(t),'m','FaceAlpha',giatri) lệnh sau
• VideoWriter: tạo ra ten.avi
Giải thích: • open: mở biến chứa ten.avi
Tô màu màu tím cho vùng • getframe: chụp hình
diện tích bị giới hạn bởi
• writeVideo: lưu các khung hình vào ten.avi
đường cong sin(t) và trục
hoành, thay đổi thông số • close: đóng biến chứa tập tin ten.avi
giatri từ 0 đến 1 để điều
chỉnh độ trong suốt

Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 23 Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 24
9/3/2019

Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng
Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật

Giải thích:
Code Matlab: • Tạo mảng t, đại diện cho thời gian mô
t=0:0.1:5; phỏng.
bien_tuy_y = • Tạo tập tin tenphim.avi và lưu vào
VideoWriter('tenphim.avi'); bien_tuy_y.
open(bien_tuy_y); • Mở bien_tuy_y.
for i =1:length(t) • Lặp từ phần tử thứ nhất t(1) đến phần tử
[X,Y]=meshgrid(-10:0.1:10); cuối cùng t(end) của mảng t. Trong mỗi
R = sqrt(X.^2*t(i) + Y.^2) + eps; lần lặp, tại thời điểm t(i):
Z = sin(R)./R; • Tạo lưới dữ liệu trên mặt phẳng XY.
mesh(X,Y,Z); • Tính giá trị của Z từ X và Y.
G = getframe; • Tạo lưới từ X, Y và Z.
writeVideo(bien_tuy_y,G) • Chụp hình và lưu vào G
end • Lưu G vào bien_tuy_y.
close(bien_tuy_y); • Kết thúc vòng lặp tại t(i), tiếp tục quay lại
các bước trên với t(i+1).
• Đóng bien_tuy_y.
• Vào thư mục hiện hành kiếm tập tin
bien_tuy_y.avi để trình chiếu.
Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 25
9/3/2019

Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng
Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật

Chương 4
Các cấu trúc điều khiển

Giảng viên: Ths. Trần Kim Bằng


Bộ môn Cơ Kỹ Thuật, P.106B4
Khoa Khoa Học Ứng Dụng
Đại học Bách Khoa TpHCM

Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 1 Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 2

Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng
Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật

4.1.1. Toán tử quan hệ

< :bé hơn;


> :lớn hơn;
<= :bé hơn hoặc bằng;
>= :bé hơn hoặc bằng;
== :bằng;

4.1. Cấu trúc rẽ nhánh ~= :khác

4.1.2. Toán tử luận lý

&& : và
| | : hoặc
~ : không

Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 3 Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 4

Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng
Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật

4.1.3. Cấu trúc rẽ nhánh if-end 4.1.4. Cấu trúc rẽ nhánh if-else-end và if-elseif-else-end
Cấu trúc rẽ nhánh if-end bắt đầu bằng if và kết thúc bằng end, nếu điều kiện sau if điều kiện if điều kiện 1
từ khóa if được thỏa mãn thì một lệnh hoặc một khối lệnh nằm giữa hai dòng if và
hành động 1 hành động 1
end sẽ được thực thi.
else elseif điều kiện 2
if điều kiện hành động 2 hành động 2
hành động end elseif điều kiện 3
end hành động 3
….
Code Matlab: Giải thích: else
a = 3; hành động N
• Gán giá trị 3 cho a.
Code Matlab: end
b = 10;
if a<b
• Gán giá trị 10 cho b. clc
disp('xin chao'); • Nếu thỏa điều kiện a<b a =3; Giải thích:
thì xuất chuỗi “xin chao” b = 10; • Nếu thỏa điều kiện a<b thì xuất chuỗi
c=2*a If a<b
ra command window. Sau “xin chao” ra command window.
end disp(‘xin chao’)
đó, tính 2*a rồi gán vào c.
else
• Đối với tất cả trường hợp còn lại ngoài
điều kiện a<b thì xuất chuỗi “nhap lai a
disp(‘nhap lai a va b)
va b” ra command window.
end
Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 5 Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 6
9/3/2019

Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng
Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật

Code Matlab: Giải thích:


If a>b
4.1.5. Sự khác nhau giữa if-elseif-else-end và if-end
• Nếu điều kiện thứ nhất là a>b thỏa mãn thì hiển
disp(‘a lon hon b’); thị chuỗi “a lon hon b” ra command window và end
elseif a>0 (bỏ qua tất cả điều kiện còn lại). Code Matlab: Chú ý: so sánh ý nghĩa giữa
disp(‘a lon hon 0’); If a>b đoạn code Matlab trong slide
elseif b>0
• Nếu điều kiện thứ nhất không thỏa mãn thì tiếp
disp(‘a lon hon b’) 7 với slide 8
tục xét điều kiện thứ hai là a>0.
disp(‘b lon hon 0’); end • Ba cấu trúc rẽ nhánh if-end
else o Nếu điều kiện thứ hai thỏa mãn thì hiển thị If a>0 trong slide 8 có ý nghĩa khác
disp(‘nhap lai a’); chuỗi “a lon hon 0” và end. disp(‘a lon hon 0’) với cấu trúc rẽ nhánh if-
end o Nếu điều kiện thứ hai không thỏa mãn thì end elseif-else-end trong slide 7.
tiếp tục xét điều kiện thứ ba là b>0. If b>0
disp(‘b lon hon 0’)
• Ba cấu trúc if-end này độc
 Nếu điều kiện thứ ba thỏa mãn thì hiển lập với nhau.
thị chuỗi “b lon hon 0” và end. end
• Cho dù điều kiện a>b được
 Nếu điều kiện thứ ba không thỏa mãn thì thỏa mãn thì các điều kiện ở
hiển thị chuỗi “nhap lại a” cho tất cả trường các cấu trúc if-end còn lại
hợp còn lại và end (else là tất cả các vẫn tiếp tục được xét, chứ
trường hợp còn lại ngoài ba điều kiện trên) không phải được bỏ qua như
khi sử dụng cấu trúc if-else-
elseif-end.

Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 7 Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 8

Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng
Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật

4.1.6. Cấu trúc rẽ nhánh switch - case Code Matlab: Giải thích:
x=5; unit = ‘cm’; • Gán giá trị 5 cho biến x.
• Kết quả của biểu thức được tính toán, rồi được so sánh với các giá trị 1, 2, … switch unit • Gán chuỗi ‘cm’ cho biến unit. unit
• Khi tìm thấy một giá trị bằng với kết quả của biểu thức, một lệnh hoặc một khối case ‘in’ sẽ có định dạng chuỗi.
lệnh sau các giá trị 1, 2, … sẽ được thực thi. y=x*2.54 • So sánh kết quả unit với các chuỗi
• Trường hợp không tìm được giá trị nào bằng với kết quả biểu thức, một hoặc case ‘ft’ khác.
một khối lệnh sau otherwise sẽ được thực thi. y=x*2.54*12 • Nếu unit giống chuỗi ‘in’ thì tính
case ‘m’ y=x*2.54
switch biểu thức y=x/100 • Tiếp tục so sánh unit.
case giá trị 1 otherwise
hành động 1 disp(‘Chua biet don vi’)
• Nếu unit giống chuỗi ‘ft’ thì tính
y=x*2.54*12
case giá trị 2 end
hành động 2 • Tiếp tục so sánh unit.
…. • Nếu unit giống chuỗi ‘m’ thì tính
otherwise y=x/100
hành động N • Với các trường hợp còn lại của
end unit, hiển thị chuỗi ‘Chua biet don
vi’ ra command window.
• Kết thúc
Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 9 Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 10

Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng
Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật

4.2.1. Cấu trúc lặp for-end


Cấu trúc lặp for-end thực hiện lặp đi lặp lại một lệnh hoặc một khối lệnh
(các công việc có quy tắc chung) với số lần lặp đã được xác định trước.

for mảng một chiều


hành động
end
4.2. Cấu trúc lặp Code Matlab: Giải thích:
a = 0; • Ban đầu a được gán bằng 0
for i = [9 5 -1 20 -8 40]
a=a+i; • Lặp 5 lần lệnh a=a+i với mỗi lần lặp, giá trị
end i thay đổi lần lượt bằng 9, 5, -1, 20, -8, 40
• Giá trị a lúc sau sẽ chồng lấp lên giá trị a
trước đó qua phép tính a=a+i
• Nếu bỏ dấu chấm phẩy tại dòng code
a=a+i; thì các kết quả trung gian khi tính a
được hiển thị trên command window

Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 11 Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 12
9/3/2019

Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng
Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật

Giả sử, muốn tính tổng = 3+5+7…+9. Dựa trên quy tắc đã biết là số nhỏ sẽ cộng 4.2.2. Cấu trúc lặp while - end
cho số lớn hơn nó hai đơn vị và cộng cho đến khi gặp số 9, cấu trúc lặp for-end sẽ
được ứng dụng để thực hiện việc này. • Cấu trúc lặp while – end thực hiện lặp đi lặp lại một lệnh hoặc khối lệnh
nào đó nhiều lần nếu điều kiện lặp vẫn còn được thoả mãn.
Code Matlab: Giải thích: • Không xác định trước được số lần lặp như cấu trúc lặp for-end
tong = 0; • Ban đầu, biến tong được gán bằng 0. • Cấu trúc lặp while – end có thể dẫn đến vòng lặp vô tận.
for i = 3:2:9 • Cho i đi từ 3 đến 9 với bước nhảy là 2 (nếu bỏ
số ở giữa thì mặc định bước nhảy là 1). while điều kiện lặp Giải thích:
tong = tong + i;
• i ban đầu bằng 3, tong ban đầu bằng 0. Khi i hành động • Gán 0 cho biến x.
end
bằng 3 thì giá trị tong hiện tại sẽ bằng giá trị end • Gán 5 cho biến n.
disp(tong) tong trước đó cộng với i = 3. Kết thúc một lần • Lặp lại dòng lệnh x=x+n
lặp. bằng cách lấy n cộng x
Code Matlab:
• Qua lần lặp thứ hai thì i bằng 5, tong lúc sau trước đó rồi gán cho x
x=0; n=5;
bằng tong trước cộng i. hiện tại (giá trị mới của x
while x<1000
• Quá trình cứ lặp lại như vậy cho đến khi i = 9 chồng lấp lên giá trị cũ
x=x+n
và ta đã tính được tổng của dãy số mong end của x).
muốn. • Lặp trong khi điều kiện
x<1000 còn thỏa mãn.
Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 13 Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 14

Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng
Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật

Code Matlab: Giải thích:


x=1; n=5; • Gán 1 cho biến x.
while x>0
• Gán 5 cho biến n.
x=x+n
end • Lặp lại dòng lệnh
x=x+n đến khi thỏa
điều kiện x>0
• Do x luôn luôn lớn
hơn 0 nên dẫn đến
vòng lặp vô tận

Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 15


9/3/2019

Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng
Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật

Chương 5
Lập trình PPPTHH cho
bài toán giàn phẳng
Giảng viên: Ths. Trần Kim Bằng
Bộ môn Cơ Kỹ Thuật, P.106B4
Khoa Khoa Học Ứng Dụng
Đại học Bách Khoa TpHCM

Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 1 Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 2

Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng
Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật

5.1.1. Mô hình cơ học của kết cấu giàn phẳng


l l

A B C

5.1. Tiền xử lý (Preprocessor) l


E = 1011 N/m2;
A = 100 cm2;
l = 1 m.
Px
D Px = 10KN
Py Py = 10KN

Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 3 Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 4

Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng
Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật

5.1.2. Nhập các hằng số như vật liệu, diện tích mặt cắt ngang 5.1.3. Rời rạc hóa kết cấu thành mô hình phần tử hữu hạn

Xóa các số liệu trên command window q2 q4 q6


clc O
clear all 1 x 2 3
Xóa giá trị các biến ra khỏi bộ nhớ Chọn gốc q1 q3 q5
close all tọa độ của
format short hệ trục tổng
E = 1e11; Đưa kết quả số về dạng 4 số lẻ thập thể đặt tại (1) ( 2) (3)
A = 0.01; phân nhân 10n nút 1 theo
btd_nut = 2; chỉ số tổng
Nhập mô-đun đàn hồi thể. q8

Nhập diện tích mặt cắt ngang 4


qi là bậc tự do thứ i của kết q7
Nhập số bậc tự do của một nút cấu theo chỉ số tổng thể.

Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 5 Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 6
9/3/2019

Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng
Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật

' q 2( 2 )
y ' 5.1.4. Tạo ma trận chứa tọa độ các nút
q 2(1) y
(3)
q • Ma trận toado là ma trận có n hàng, 2 cột.
q1( 2 ) 2

q1( 3 ) • Với n là số nút.


(1)
q 1 • Hàng 1 chứa tọa độ của nút thứ 1
• Hàng n chứa tọa độ của nút thứ n
 (2)  90o • Cột 1 chứa tọa độ x, cột 2 chứa tọa độ y của nút.
(1) ( 2) y '
(3)
 (1)   45 o q 4(1) (3) Code Matlab:
q toado =
q 4( 2 )
4
 ( 3 )   135 o Nút 1
toado(1,1)=0;
0 0 toado(1,2)=0;
q 3(1) 1 0 toado(2,1)=1;
q 3( 3 ) 2 0 toado(2,2)=0;
q 3( 2 ) 1 -1 toado(3,1)=2;
x' Nút 4 toado(3,2)=0;
x'
x' toado(4,1)=1;
toado(4,2)=-1;
q i e  là bậc tự do thứ i của phần tử thứ (e) theo chỉ
số địa phương khi xét trên một phần tử.
Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 7 Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 8

Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng
Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật

5.1.5. Tạo ma trận thể hiện mối quan hệ giữa phần tử và 5.1.6. Xác định số phần tử, số nút, khởi tạo các ma trận
nút tổng thể
Code Matlab: số phần tử
• Ma trận phantu là ma trận có n hàng 2 cột, n là số phần tử.
• Hàng 1 chứa số thứ tự tổng thể của nút đầu và cuối thuộc phần tử thứ 1. sophantu = size(phantu,1);
sonut_pt = size(phantu,2); số nút trên một phần tử
• Hàng n chứa số thứ tự tổng thể của nút đầu và cuối thuộc phần tử thứ n.
sonut = size(toado,1);
• Cột 1 chứa số thứ tự tổng thể của tất cả nút đầu của tất cả phần tử. Ktt = zeros(sonut*btd_nut,sonut*btd_nut); số nút tổng thể
• Cột 2 chứa số thứ tự tổng thể của tất cả nút cuối của tất cả phần tử. Ftt = zeros(sonut*btd_nut,1);

Code Matlab:
Khởi tạo ma trận độ cứng tổng thể
phantu(1,1)=1
Nút đầu phantu(1,2)=4
Phần tử 1 phantu = phantu(2,1)=2; Khởi tạo vector lực tổng thể
phantu(2,2)=4;
1 4 phantu(3,1)=3;
Phần tử 3 2 4 Nút cuối phantu(3,2)=4;
3 4

Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 9 Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 10

Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng
Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật

5.1.7. Nhập điều kiện biên ràng buộc chuyển vị 5.1.8. Nhập điều kiện biên tải trọng
• Tạo ma trận chứa số thứ tự tổng thể của
bậc tự do bị ràng buộc
 0  1
 0 
• Vector rangbuoc là ma trận có 1 hàng n cột,
n là số lượng bậc tự do bị ràng buộc   2
• Mỗi phần tử của ma trận chứa số thứ tự  0  3
tổng thể của bậc tự do bị ràng buộc.
 
 0  4
Phần tử thứ 1 của
Phần tử thứ 4 của
Ftt 
 0 

5
ma trận rangbuoc
ma trận rangbuoc q2 q4 q6
chứa bậc tự do
chứa bậc tự do 1
x
x q1
2
x
x q3
3x x
q5 1
q2
2
q4
3
q6
 0  6
thứ 1 bị ràng buộc
thứ 4 bị ràng buộc q1 q3 q5  
(1) (2) (3)

(1) (2) (3)  10000  7


q8 Code Matlab:
Code Matlab: 4 Ftt(7) = 10000;  10000  8
rangbuoc = [1 2 3 4 5 6]; q7
q8 Ftt(8) = -10000;  
4
q7

Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 11 Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 12
9/3/2019

Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng
Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật

5.1.9. Biểu diễn đồ họa điều kiện biên ràng buộc chuyển vị
Code Matlab:
for i = 1:length(rangbuoc)
m = mod(rangbuoc(i),2);
hold on
if m ~= 0
x = toado((rangbuoc(i)+1)/2,1);
y = toado((rangbuoc(i)+1)/2,2);
plot(x-0.05,y,'>','markersize',17,'markerfacecolor','g');
elseif m == 0
x = toado(rangbuoc(i)/2,1);
y = toado(rangbuoc(i)/2,2);
plot(x,y-0.05,'^','markersize',17,'markerfacecolor','g');
5.2. Giải (Solution)
end
end
for i=1:sophantu
nutdau = phantu(i,1);
nutcuoi = phantu(i,2);
xi=toado(nutdau,1);
xj=toado(nutcuoi,1);
yi=toado(nutdau,2);
yj=toado(nutcuoi,2);
plot([xi xj],[yi yj],'-','linewidth',3);
plot([xi xj],[yi yj],'o','markersize',10,'markerfacecolor,’r’);
end

Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 13 Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 14

Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng
Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật

5.2.1. Xây dựng ma trận độ cứng tổng thể 5.2.1.1. Tính ma trận bool cho một phần tử
Code Matlab: Giải thích: Hàm tinh_bool có nhiệm vụ tính ma trận bool của một phần tử.
for i=1:sophantu Bắt đầu vòng lặp
nutdau = phantu(i,1); • Xác định tọa độ nút đầu và nút Nút i Nút j

nutcuoi = phantu(i,2); cuối phần tử thứ i q1( e ) q 2( e ) q 3( e ) q 4( e )


xi=toado(nutdau,1); • Tính chiều dài L, sin(α), cos(α) pt (1) q1 q2 q7 q8
xj=toado(nutcuoi,1); cho phần tử thứ i pt (2) q3 q4 q7 q8
yi=toado(nutdau,2); • Tính ma trận bool cho phần tử pt (3) q5 q6 q7 q8
yj=toado(nutcuoi,2); thứ i qua hàm con tinh_bool Code Matlab:
L(i) = sqrt((xj-xi)^2 + (yj-yi)^2); • Tính ma trận cứng Kpt của function [mt_bool_pt] = tinh_bool(mt_nut_pt,btd_nut)
C(i) = (xj-xi)/L(i); phần tử thứ i qua hàm k = 0;
S(i) = (yj-yi)/L(i); continh_Kpt sonut_pt = size(mt_nut_pt,2);
mt_bool_pt = tinh_bool(... • Từ ma trận bool, lắp ghép Kpt for i = 1:sonut_pt Bậc tự do của mỗi nút
[nutdau nutcuoi],btd_nut); phần tử thứ i vào Ktt tổng thể s = (mt_nut_pt(i) - 1)*btd_nut;
Kpt = tinh_Kpt(E,A,L(i),S(i),C(i)); qua hàm con tinh_Ktt for j = 1:btd_nut ma trận chứa số thứ tự tổng
Ktt = tinh_Ktt(Ktt,Kpt,mt_bool_pt); Quay lại vòng lặp với phần tử thứ k=k+1; thể các nút của phần tử
end i+1 mt_bool_pt(k) = s + j;
α c² s² cs L A E end Số nút của phần tử
pt (1) -45o 0,5 0,5 -0,5 1.4 10-2 1011 end
pt (2) -90o 0 1 0 1 10-2 1011 ma trận bool của một phần
pt (3) -1350 0,5 0,5 0,5 1,4 10-2 1011 tử thứ i
Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 15 Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 16

Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng
Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật

5.2.1.2. Tính ma trận độ cứng K cho một phần tử Ma trận độ cứng K của phần tử thứ nhất

Hàm tinh_Kpt có nhiệm vụ tính ma trận cứng K của một phần tử.
Code Matlab: q2 q4 q6
function [Kpt] = tinh_Kpt(E,L,A,S,C) 1 2 3
Kpt = ((E*A)/L)*[C^2 C*S -C^2 -C*S; q1 q3 q5
C*S S^2 -C*S -S^2; Modulus đần hồi E của
-C^2 -C*S C^2 C*S; phần tử thứ (1) (2 ) (3) Ma trận bool của phần tử 1
-C*S -S^2 C*S S^2];
Sin và Cos của phần tử q8

4
Diện tích mặt cắt ngang của
q7
1 2 7 8
phần tử

Chiều dài của phần tử


 0,35 -0,35 -0,35 0,35  1
 c2 cs c 2  cs  -0,35 0,35 0,35 -0,35 2
  Ma trận cứng K của phần tử
EA 
K   
s2  cs s2   Kpt 1  109  
L c2 cs  -0,35 0,35 0,35 -0,35 7

 dx s2 
  
 0,35 -0,35 -0,35 0,35  8
Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 17 Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 18
9/3/2019

Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng
Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật

Ma trận độ cứng K của phần tử thứ hai Ma trận độ cứng K của phần tử thứ ba

q2 q4 q6 q2 q4 q6
2 3 2 3
1 1
q1 q3 q5 q1 q3 q5
Ma trận bool của phần tử 2 Ma trận bool của phần tử 3
(1) (2) (3) (1) (2) (3)

q8 q8

4
3 4 7 8 4 5 6 7 8
q7 q7
0 0 0 0 3  0,35 0,35 -0,35 -0,35 5
0 -1  0,35
 109 
1 0 4 0,35 -0,35 -0,35 6
 Kpt  2 0  Kpt  3  109 
0 0 0 7 -0,35 -0,35 0,35 0,35  7
   
0 -1 0 1 8 8
-0,35 -0,35 0,35 0,35 
Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 19 Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 20

Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng
Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật

5.2.1.3. Lắp ghép ma trận độ cứng K phần tử vào ma trận độ


cứng K tổng thể
Ma trận độ cứng K tổng thể
Hàm tinh_Ktt có nhiệm vụ lắp ghép ma trận cứng Kpt của phần tử vào ma
trận cứng tổng thể Ktt
1 2 3 4 5 6 7 8
Code Matlab:
 0,353 0,353 0,000 0, 000 0,000 0,000
0,353 0,353  1
function [Ktt] = tinh_Ktt(Ktt,Kpt,mt_bool_pt)  0,353 0,353
 0,000 0, 000 0,000 0,353 0,353 2
0,000
Ktt(mt_bool_pt,mt_bool_pt) = Ktt(mt_bool_pt,mt_bool_pt)+Kpt;
 0,000 0,000 0,000 0, 000 0,000 0,000 0, 000  3
0,000
 
Ma trận bool của phần tử thứ i 0,000 0,000 0,000 1,000 0,000 0,000
0,000 1,000 4
 Ktt  109 
0,000 0,000 0,000 0, 000 0,353 0,353 0,353 0,353 5
Ma trận cứng Ktt của tổng thể  
 0,000 0,000 0,000 0, 000 0,353 0,353 0,353 0,353 6
trước khi lắp ghép một ma trận
 0,353 0,353 0,000 0, 000 0,353 0,353 0,707 0, 000  7
cứng của phần tử thứ i vào  
 0,353 0,353 0,000 1,000 0,353 0,353 0,000 0,707  8
Ma trận cứng Ktt của tổng thể
sau khi lắp ghép một ma trận
cứng của phần tử thứ i vào

Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 21 Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 22

Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng
Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật

5.2.2. Áp đặt điều kiện biên chuyển vị lên ma trận cứng


tổng thể và vector lực tổng thể Hệ phương trình đại số rút gọn

Phương trình cân bằng cho toàn kết cấu 0, 707 0   q 7   10 4 
109      
 K tt .U tt    Ftt   0 1, 707   q 8   104 
Áp đặt điều kiện biên chuyển vị
 q 7  8 0,141 0   104 
q1  q2  q3  q4  q5  q6  0     10   
 q 8   0 0, 059  104 
 0,353 0,353 0,000 0,000 0,000 0,000 0,353 0,353   q 1   H1 
 
0,353
 0,353 0,000 0,000 0,000 0,000 0,353 0,353  q 2   V1   q   1, 41.10 , m 
5

 0,000 0,000 0,000 0,000 0,000 0,000 0,000


 
0,000   q 3   H 2    7   5 

0,000 0,000 0,000 1,000 0,000 0,000 0,000
 
1,000  q 4   V2 
  q 8    0, 59.10 , m 
109      
 0,000 0,000 0,000 0,000 0,353 0,353 0,353 0,353  q 5   H 3 
 
 0,000 0,000 0,000 0,000 0,353 0,353 0,353 0,353  q 6   V3 
0,353  
0,353 0,000 0,000 0,353 0,353 0,707 0,000   q 7   104 
   
 0,353 0,353 0,000 1,000 0,353 0,353 0,000 1,707   q 8   104 

Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 23 Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 24
9/3/2019

Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng
Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật

Hàm khu_dkb có nhiệm vụ khử điều kiện biên của ma trận cứng Ktt tổng 5.2.3. Giải phương trình đại số tuyến tính để thu được kết
thể và vector lực Ftt tổng thể quả chuyển vị
Code Matlab: Code Matlab:
function [Ktt,Ftt] = khu_dkb(Ktt,Ftt,rangbuoc) Ktt_bd = Ktt; %Luu lai ma tran do cung tong the ban dau
n = length(rangbuoc); Ftt_bd = Ftt; %Luu lai ma tran luc tong the ban dau
btdtt = length(Ktt); Vector chứa các bậc tự do bị [Ktt,Ftt] = khu_dkb(Ktt,Ftt,rangbuoc);%khu dieu kien bien
for i = 1:n ràng buộc Utt=inv(Ktt)*Ftt
c = rangbuoc(i);
for j=1:btdtt Vector lực của tổng thể sau khi
Vector lực tổng thể trước khi
Ktt(c,j)=0;%khu hang khử điều kiện biên
khử điều kiện biên
Ktt(j,c)=0;%khu cot
end Ma trận cứng của tổng thể sau
Ma trận cứng tổng thể trước khi khi đã khử điều kiện biên
Ktt(c,c) = 1;
khử điều kiện biên
Ftt(c) = 0;
end Vector chứa các kết quả chuyển
Vector lực tổng thể sau khi khử vị
điều kiện biên

Ma trận cứng tổng thể sau khi


đã khử điều kiện biên

Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 25 Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 26

Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng
Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật

5.2.4. Tính phản lực 0,353   0   H1 


 0,353 0,353 0,000 0,000 0,000 0,000 0,353
0,353  
 0,353 0,000 0,000 0,000 0,000 0,353 0,353  0   V1 
 
Code Matlab:  0,000 0,000 0,000 0,000 0,000 0,000 0,000 0,000   0   H 2 
function [phan_luc] = tinh_phan_luc(Ktt_bd,Ftt_bd,Utt)      
0,000 0,000 0,000 1,000 0,000 0,000 0,000 1,000  0   V2 
phan_luc = Ktt_bd*Utt - Ftt_bd; 109      
 0,000 0,000 0,000 0,000 0,353 0,353 0,353 0,353  0   H 3 
   0   
 0,000 0,000 0,000 0,000 0,353 0,353 0,353 0,353    V3 
 0,353 0,353 0,000 0,000 0,000 0,000 0,353 0,353   0   0   H 1  q
0,353 0,000   7   10 
4
      0,353 0,000 0,000 0,353 0,353 0,707
0,353 0,353 0,000 0,000 0,000 0,000 0,353 0,353  0   0   V1     q8   4
  0,353 0,353 0,000 1,000 0,353 0,353 0,000 1,707   10 
 0,000 0,000 0,000 0,000 0,000 0,000 0,000 0,000   0   0   H 2 
      

109 
0,000 0,000 0,000 1,000 0,000 0,000 0,000 1,000  0   0   V2 
 
0    

H 1   0, 353.q7  0, 353.q8 .10 9 
 0,000 0,000 0,000 0,000 0,353 0,353 0,353 0,353     0  H3 

 0,000 0,000 0,000 0,000 0,353 0,353 0,353 0,353
  0  

0   V3 
  4   

  0, 353.1, 41.10 5  0, 353.   0, 59.10 5  .10 9   7071 N 
0,353 0,353 0,707 0,000   q 7   10   0 

 0,353
0,353 0,000 0,000 0,353
0,353 0,000 1,000 0,353
  
0,353 0,000 1,707   q 8   10   0 
4 
V1  0, 353.q 7  0, 353.q8 .10  9


 0, 353.1, 41.10 5

 0, 353.   0, 59.10 5  .10 9  7071 N

Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 27 Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 28

Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng
Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật

 0,353 0,353 0,000 0,000 0,000 0,000 0,353 0,353   0   H1   0,353 0,353 0,000 0,000 0,000 0,000 0,353 0,353   0   H1 
0,353    
 0,353 0,000 0,000 0,000 0,000 0,353 0,353  0   V1  0,353
 0,353 0,000 0,000 0,000 0,000 0,353 0,353  0   V1 
   
 0,000 0,000 0,000 0,000 0,000 0,000 0,000 0,000   0   H 2   0,000 0,000 0,000 0,000 0,000 0,000 0,000 0,000   0   H 2 
           
9
0,000 0,000 0,000 1,000 0,000 0,000 0,000 1,000  0   V2  9
0,000 0,000 0,000 1,000 0,000 0,000 0,000 1,000  0   V2 
10      10     
 0,000 0,000 0,000 0,000 0,353 0,353 0,353 0,353  0   H 3   0,000 0,000 0,000 0,000 0,353 0,353 0,353 0,353  0   H 3 
   0       0   
 0,000 0,000 0,000 0,000 0,353 0,353 0,353 0,353    V3   0,000 0,000 0,000 0,000 0,353 0,353 0,353 0,353    V3 
q q
0,353 0,000   7   10  0,353 0,000   7   10 
4 4
0,353 0,000 0,000 0,353 0,353 0,707 0,353 0,000 0,000 0,353 0,353 0,707
   q8   4    q8   4
 0,353 0,353 0,000 1,000 0,353 0,353 0,000 1,707   10   0,353 0,353 0,000 1,000 0,353 0,353 0,000 1,707   10 


H 2  0.q 7  0.q8 .10 9  
H 3   0, 353.q7  0, 353.q8 .10 9 

 0.1, 41.10 5  0.   0, 59.10 5  .10 9  0 N  
  0, 353.1, 41.10 5  0, 353.   0, 59.10 5  .10 9   2929 N 

V2  0.q 7  1.q8 .10  9

V3   0, 353.q 7  0, 353.q8 .10 9 

 0.1, 41.10 5
 1.   0, 59.10 5
  .10 9
 5858 N

  0, 353.1, 41.10 5

 0, 353.   0, 59.10 5  .10 9   2929 N

Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 29 Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 30
9/3/2019

Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng
Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật

5.2.5. Tính nội lực

Nội lực phần tử 1

 0 1
 N e   S e .qe 1 2 7 8 
 0 2

 N1  109  -0,5 0,5 0,5 0,5  5 
EA  1,414.10 7
 S e  -c s c s  0,586.105  8
L  10000 N

Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 31 Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 32

Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng
Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật

Nội lực phần tử 2 Nội lực phần tử 3


 0 3  0 5
3 4 7 8  4 5 6 7 8  6
 0   0 
 N  2   1 0 9 0 1 0  1   N3  109  0,5 0,5 0,5 0,5  5 
5 
 1,414.10  7  1,414.10 7
0,586.105  8 0,586.105  8
 5858 N   4142 N

Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 33 Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 34

Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng
Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật

5.3.1. Biểu diễn kết quả biến dạng

5.3. Hậu xử lý (Postprocessor)

Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 35 Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 36
9/3/2019

Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng
Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật

5.3.2. Biểu diễn kết quả nội lực 5.3.3. Hiệu chỉnh kết quả nội lực

Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 37 Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 38

Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng
Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật

Nếu trên phần tử xuất hiện lực dọc trục thì ta phải hiệu chỉnh biểu đồ
nội lực bằng cách cộng thêm một biểu nội lực như hình dưới vào
phần tử

i
i (Lq)/2

L
(Lq)/2
q

j
j

Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 39


9/3/2019

Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng
Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật

Chương 6
Lập trình PPPTHH cho
bài toán khung phẳng
Giảng viên: Ths. Trần Kim Bằng
Bộ môn Cơ Kỹ Thuật, P.106B4
Khoa Khoa Học Ứng Dụng
Đại học Bách Khoa TpHCM

Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 1 Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 2

Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng
Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật

6.1.1. Mô hình cơ học của kết cấu khung phẳng


q0

A B
p0
l l/2
6.1. Tiền xử lý (Preprocessor) l
q0l2 C

E = 2.1011 N/m2; A = 100 cm2; J = 1000 cm4;


l = 1 m; p0 = q0 = 10KN/m
Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 3 Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 4

Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng
Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật

6.1.2. Nhập các hằng số như vật liệu, diện tích mặt cắt ngang 6.1.3. Rời rạc hóa kết cấu thành mô hình phần tử hữu hạn

Đưa kết quả số về dạng 4 số lẻ thập


clc phân nhân 10n Chọn gốc q2 q5
clear all tọa độ của O x
hệ trục tổng
(1)
close all
Nhập mô-đun đàn hồi
format short thể đặt tại q3 1 q1 q6 2 q4
E = 2e11; nút 1 theo
A = 0.01; Nhập diện tích mặt cắt ngang chỉ số tổng ( 2) q8
J = 1e-5; thể.
btd_nut = 3;
Nhập moment quán tính
q9 3 q7
(3) q11
qi là bậc tự do thứ i của kết
cấu theo chỉ số tổng thể.
Nhập số bậc tự do của một nút q12 4 q10

Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 5 Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 6
9/3/2019

Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng
Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật

y,
q 2(1) q 2( 2 ) 6.1.4. Tạo ma trận chứa tọa độ các nút
q 5(1)
(2)
y,
(1) x, q • Ma trận toado là ma trận có n hàng, 2 cột.
3
q1( 2 ) • Với n là số nút.
q 3(1) q1(1) q (1) q 4(1) ( 2) q ( 2 ) • Hàng 1 chứa tọa độ của nút thứ 1
6
5
• Hàng n chứa tọa độ của nút thứ n
 (1)  0 o q 2( 3 ) • Cột 1 chứa tọa độ x, cột 2 chứa tọa độ y của nút.
y, q 6( 2 ) q 4( 2 )
q 3( 3 ) ,
q1( 3 ) x toado = Code Matlab:
(3) q ( 3 )  (2)  90o Nút 1
toado(1,1)=0;
5 0 0 toado(1,2)=0;
1 0 toado(2,1)=1;
(3) (3) toado(2,2)=0;
q 6
q 4
1 -0.5
1 -1 toado(3,1)=1;
x, Nút 4 toado(3,2)=-0.5;
toado(4,1)=1;
 (3)   9 0 o toado(4,2)=-1;
q i e  là bậc tự do thứ i của phần tử thứ (e) theo chỉ
số địa phương khi xét trên một phần tử.
Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 7 Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 8

Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng
Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật

6.1.5. Tạo ma trận thể hiện mối quan hệ giữa phần tử và 6.1.6. Xác định số phần tử, số nút, khởi tạo các ma trận
nút tổng thể
Code Matlab: số phần tử
• Ma trận phantu là ma trận có n hàng 2 cột, n là số phần tử.
• Hàng 1 chứa số thứ tự tổng thể của nút đầu và cuối thuộc phần tử thứ 1. sophantu = size(phantu,1);
sonut_pt = size(phantu,2); số nút trên một phần tử
• Hàng n chứa số thứ tự tổng thể của nút đầu và cuối thuộc phần tử thứ n.
sonut = size(toado,1);
• Cột 1 chứa số thứ tự tổng thể của tất cả nút đầu của tất cả phần tử. Ktt = zeros(sonut*btd_nut,sonut*btd_nut); số nút tổng thể
• Cột 2 chứa số thứ tự tổng thể của tất cả nút cuối của tất cả phần tử. Ftt = zeros(sonut*btd_nut,1);
lucphap = zeros(1,sophantu);
Code Matlab: luctiep = zeros(1,sophantu);
Khởi tạo ma trận độ cứng tổng thể
phantu(1,1)=1
Nút đầu phantu(1,2)=2
Phần tử 1 phantu = phantu(2,1)=2; Khởi tạo vector lực tổng thể
phantu(2,2)=3;
1 2 phantu(3,1)=3;
2 3 Nút cuối Khởi tạo vector lực pháp tuyến
Phần tử 3 phantu(3,2)=4;
3 4
Khởi tạo vector lực tiếp tuyến

Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 9 Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 10

Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng
Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật

6.1.7. Nhập điều kiện biên ràng buộc chuyển vị 6.1.8. Biểu diễn đồ họa điều kiện biên ràng buộc chuyển vị
Code Matlab:
• Tạo ma trận chứa số thứ tự của bậc tự do A B for i = 1:length(rangbuoc)
bị ràng buộc m = mod(rangbuoc(i),3);
if m == 0
• Vector rangbuoc là ma trận có 1 hàng n cột,
x = toado(rangbuoc(i)/3,1);
n là số lượng bậc tự do bị ràng buộc C y = toado(rangbuoc(i)/3,2);
• Mỗi phần tử của ma trận chứa số thứ tự plot(x,y,'r+','markersize',20,'linewidth',3);
plot(x,y,'ro','markersize',15,'linewidth',2);
tổng thể của bậc tự do bị ràng buộc. D end
m = mod(rangbuoc(i)+1,3);
if m == 0
x q2 q5
x = toado((rangbuoc(i)+1)/3,1);
Phần tử thứ 2 của x (1)
x y = toado((rangbuoc(i)+1)/3,2);
Phần tử thứ 4 của
ma trận rangbuoc 2
chứa bậc tự do
ma trận rangbuoc q3 1 q1 q6 q4 plot(x,y-
0.05,'^','markersize',17,'markerfacecolor','g');
chứa bậc tự do (2 ) q8 end
thứ 2 bị ràng buộc
thứ 10 bị ràng m = mod(rangbuoc(i)+2,3);
buộc if m == 0
q9 3 q7 x = toado((rangbuoc(i)+2)/3,1);
Code Matlab: (3) q11 y = toado((rangbuoc(i)+2)/3,2);
plot(x-0.05,y,'>','markersize',17,'markerfacecolor','b');
rangbuoc = [1 2 3 10 11 12]; x x x end
q12 end
4 q10

Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 11 Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 12
9/3/2019

Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng
Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật

Code Matlab:
for i = 1 : sophantu
6.1.9. Nhập điều kiện biên tải trọng
nutdau = phantu(i,1); 6.1.9.1. Nhập điều kiện biên tải trọng tại nút  H1  1
nutcuoi = phantu(i,2);
 
 V1  2
xi = toado(nutdau,1);
xj = toado(nutcuoi,1); V1
yi = toado(nutdau,2);  M  3
yj = toado(nutcuoi,2); A B  1

L(i) = sqrt((xj-xi)^2 + (yj-yi)^2);%chieu dai phan tu  0 4
C(i) = (xj-xi)/L(i);%cos(alpha) cua phan tu H 1 (1) 
S(i) = (yj-yi)/L(i);%sin(alpha) cua phan tu M1 ( 2)  0  5
plot([xi xj],[yi yj],'-','linewidth',3);
plot([xi xj],[yi yj],'o','markersize',10);  0 6
text(xi+0.03,yi,num2str(nutdau));
C F  nu t 
0  7
text(xj+0.03,yj,num2str(nutcuoi)); Code Matlab: 
if xj>xi
text((xj-xi)/2+xi,(yj-yi)/2 + yi,num2str(i));
Ftt(9) = 10000; (3) V  0 8
elseif xj == xi
4  
text(xj,(yj-yi)/2 + yi,num2str(i)); D 1 00 0 0  9
elseif xj<xi  H  10
4
text((xi-xj)/2+xj,(yj-yi)/2 + yi,num2str(i)); H4  
end M4  V4  11
axis equal
grid on  M  12
end  4 
Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 13 Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 14

Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng
Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật

6.1.9.2. Quy đổi tải đặt trên phần tử thành tải tập trung tại nút 6.1.9.2.2. Tải đặt trên phần tử là lực tập trung tại giữa phần tử
6.1.9.2.1. Tải đặt trên phần tử là tải phân bố pháp tuyến/tiếp tuyến  Q 
y
 2 s 
y  
y'  p 0 c  q 0s  y’  Qc 
p s  q c  2 
P5  0 0  Q P5 x'
qo x'  QL 
po 2  q 0  /2 2  
P2 P2
 6 
/2 Pe  8 
 
P4  P e   
P4  Q s 
 2 0p c  q s
0 
P6  P6  2 
1 p s  q c 1
P1  0 0
 P1  Q 
P3 x q 0   c
 P3
 x  2 
 6   QL 
 
 8 

Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 15 Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật

Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng
Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật

6.1.9.2.3. Tải đặt trên phần tử là moment tập trung tại giữa phần tử
 M 
 3 2 s  V1
y  
y’ 3 M c  A B Trong mô hình đang xét, vì số
 2  H 1 (1) phần tử được sử dụng là 3 phần
P5 M1
M x’  M  ( 2)
tử nên
/2 2   
P2  4  • Tải phân bố pháp tuyến sẽ
/2 Pe   C
P4  3 M s  (3) V tác dụng lên phần tử (1)
 P6  2  4
• Tải phân bố tiếp tuyến tác
1
 M  D
P1 dụng lên phần tử (2) và (3)
3 c H4
P3 x  2  M4
 M 
  
 4 

Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 18
9/3/2019

Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng
Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật

Quy đổi tải phân bố pháp tuyến thành tải tập


trung hai đầu nút cho phần tử (1)
V1
 q0 
A B  2 s
  Code Matlab:
H 1 (1)
M1 ( 2)  q0 c  function lucphap_tt = quydoi_lucphap(lucphap,S,C,L)
 2   0 1 lucphap_tt(1,1) = (L/2)* (-lucphap*S);
 lucphap_tt(2,1) = (L/2)* (lucphap*C);
2   5000  2
C q 
 0    lucphap_tt(3,1) = (L/2)* (lucphap*L/6);
    8 3 3, 3  3 lucphap_tt(4,1) = (L/2)* (-lucphap*S);
(3) V P'e   12    P (1 )    lucphap_tt(5,1) = (L/2)* (lucphap*C);
 q0 s
4
 0 4 lucphap_tt(6,1) = (L/2)* (-lucphap*L/6);
D  2   5000  5
   
H 4  q0 c   8 3 3, 3  6
M4
 2 
 q 2 
 0 
 12 
Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 19 Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 20

Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng
Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật

 p 0c 
Quy đổi tải phân bố tiếp tuyến thành tải tập
trung hai đầu nút cho phần tử (2) và (3)
p s
V1  0 
 0 
A B P 'e    Code Matlab:
2  p 0c  function luctiep_tt = quydoi_luctiep(luctiep,S,C,L)
H 1 (1)  p 0s 
M1 ( 2)
luctiep_tt(1,1) = (L/2)*(luctiep*C);
  luctiep_tt(2,1) = (L/2)*(luctiep*S);
 0  luctiep_tt(3,1) = (L/2)*0;
luctiep_tt(4,1) = (L/2)*(luctiep*C);
C luctiep_tt(5,1) = (L/2)*(luctiep*S);
(3) V  0 4 7 luctiep_tt(6,1) = (L/2)*0;
4
  2500  5 8
D  
 0 6 9
H 4  P ( 2 )   P ( 3)  
M4  0 7 10
  2500  8 11
 
 0 9 12

Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 21 Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 22

Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng
Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật

6.2.1. Xây dựng ma trận độ cứng tổng thể


Code Matlab:
for i=1:sophantu
nutdau = phantu(i,1);
nutcuoi = phantu(i,2);
mt_bool_pt = tinh_bool([nutdau nutcuoi],btd_nut);
Kpt = tinh_Kpt(E,A,J,L(i),S(i),C(i));
Ktt = tinh_Ktt(Ktt,Kpt,mt_bool_pt);
lucphap_tt = quydoi_lucphap(lucphap(i),S(i),C(i),L(i));
luctiep_tt = quydoi_luctiep(luctiep(i),S(i),C(i),L(i));
6.2. Giải (Solution) Ftt_td = lucphap_tt + luctiep_tt;
Ftt = chuyen_Ftt_td(Ftt,Ftt_td,mt_bool_pt);
end
Giải thích:
Bắt đầu vòng lặp
• Xác định tọa độ nút đầu và nút cuối phần tử thứ i
• Tính ma trận bool cho phần tử thứ i qua hàm con tinh_bool
• Tính ma trận cứng Kpt của phần tử thứ i qua hàm con tinh_Kpt
• Từ ma trận bool, lắp ghép Kpt phần tử thứ i vào Ktt tổng thể qua hàm con tinh_Ktt
• Quy đổi tải phân bố pháp tuyến trên phần tử về tải tập trung hai đầu nút.
• Quy đổi tải phân bố tiếp tuyến trên phần tử về tải tập trung hai đầu nút.
• Tính vector lực tổng thể Ftt qua hàm con chuyen_Ftt_td
Quay lại vòng lặp với phần tử thứ i+1

Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 23 Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 24
9/3/2019

Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng
Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật

6.2.1.1. Tính ma trận bool cho một phần tử 6.2.1.2. Tính ma trận độ cứng K cho một phần tử
Hàm tinh_bool có nhiệm vụ tính ma trận bool của một phần tử.
Nút i Nút j
(e )
q 1( e ) q 2( e ) q 3( e ) q 4( e ) q 5( e ) q 6
pt (1) q1 q2 q 3 q4 q5 q6
pt (2) q4 q5 q6 q 7 q8 q9
pt (3) q 7 q8 q9 q 1 0 q 1 1 q12

Code Matlab:
function [mt_bool_pt] = tinh_bool(mt_nut_pt,btd_nut)
k = 0;
sonut_pt = size(mt_nut_pt,2);
for i = 1:sonut_pt Bậc tự do của mỗi nút
s = (mt_nut_pt(i) - 1)*btd_nut;
for j = 1:btd_nut ma trận chứa số thứ tự tổng
k=k+1; thể các nút của phần tử
mt_bool_pt(k) = s + j;
end Số nút của phần tử
end
ma trận bool của một phần
tử thứ i
Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 25 Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 26

Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng
Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật

Hàm tinh_Kpt có nhiệm vụ tính ma trận cứng K của một phần tử. Ma trận bool của phần tử 1

Code Matlab: 1 2 3 4 5 6
function [Kpt] = tinh_Kpt(E,A,J,L,S,C)
B=12*J/(L^2);
 10 0 0 10 0 0 1
Kpt = (E/L)*[A*C^2+B*S^2 (A-B)*C*S -B*L*S/2 -(A*C^2+B*S^2) -(A-B)*C*S -B*L*S/2;  0 0,12 0,06 0 0,12 0,06 2
(A-B)*C*S
-B*L*S/2
A*S^2+B*C^2
B*L*C/2
B*L*C/2
4*J
-(A-B)*C*S
B*L*S/2
-(A*S^2+B*C^2)
-B*L*C/2
B*L*C/2;
2*J;  
-(A*C^2+B*S^2) -(A-B)*C*S B*L*S/2 A*C^2+B*S^2 (A-B)*C*S B*L*S/2;  0 0,06 0,04 0 0,06 0,02  3
-(A-B)*C*S
-B*L*S/2
-(A*S^2+B*C^2)
B*L*C/2
-B*L*C/2
2*J
(A-B)*C*S
B*L*S/2
A*S^2+B*C^2
-B*L*C/2
-B*L*C/2;
4*J];  K(1)  2.108   ,N /m
10 0 0 10 0 0 4
 0 0,12 0,06 0 0,12 0,06 5
 
 0 0,06 0,02 0 0,06 0,4  6

Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 27 Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 28

Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng
Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật

Ma trận bool của phần tử 2


Ma trận bool của phần tử 3

4 5 6 7 8 9
 0,96 0 0,24 0,96 0 0,24  4 7 8 9 10 11 12
 0 20 0 0 20 0  5  0,96 0 0,24 0,96 0 0,24  7
  0
 0,24 0 0,08 0,24 0 0,04  6  20 0 0 20 0  8
 K(2)  2.10 
8
 ,N/m  0,04  9
0,96 0 0,24 0,96 0 0,24 7 8 0,24 0 0,08 0,24 0
 0
 K(3)  2.10   ,N/m
20 0 0 20 0 8 0,96 0 0,24 0,96 0 0,2410
   0
 0,24 0 0,04 0,24 0 0,08  9 20 0 0 20 0 11
 
 0,24 0 0,04 0,24 0 0,08 12

Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 29 Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 30
9/3/2019

Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng
Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật

6.2.1.3. Lắp ghép ma trận độ cứng K phần tử vào ma trận độ


cứng K tổng thể
Ma trận độ cứng K tổng thể
Hàm tinh_Ktt có nhiệm vụ lắp ghép ma trận cứng Kpt của phần tử vào ma
trận cứng tổng thể Ktt
1 2 3 4 5 6 7 8 9 1 0 1 1 1 2

Code Matlab:  10 0 0 10 0 0 0 0 0 0 0 0  1


 0 0 ,1 2 0, 06 0  0 ,1 2 0, 06 0 0 0 0 0 0  2
function [Ktt] = tinh_Ktt(Ktt,Kpt,mt_bool_pt)  
 0 0, 06 0, 04 0  0, 06 0, 02 0 0 0 0 0 0  3
Ktt(mt_bool_pt,mt_bool_pt) = Ktt(mt_bool_pt,mt_bool_pt)+Kpt;  
10 0 0 10, 96 0 0, 24  0, 96 0 0, 24 0 0 0  4
Ma trận bool của phần tử thứ i  0  0 ,1 2 0, 06 0 2 0 ,1 2  0, 06 0 20 0 0 0 0  5
 
0 0, 06 0, 02 0, 24  0, 06 0 ,1 2  0, 24 0 0, 04 0 0 0  6
 K    2 .1 0 8 
   0 0 0 0, 96 0  0, 24 1, 9 2 0 0  0, 96 0 0, 24  7
 
Ma trận cứng Ktt của tổng thể  0 0 0 0 20 0 0 40 0 0 20 0  8
 0 0, 04  9
trước khi lắp ghép một ma trận 
0 0 0, 24 0 0, 04 0 0 0 ,1 6  0, 24 0

 0 0 0 0 0 0  0, 96 0  0, 24 0, 96 0 0, 24  10
cứng của phần tử thứ i vào  
 0 0 0 0 0 0 0 20 0 0 20 0  11
 0 0 0 0 0 0 0, 24 0 0, 04  0, 24 0 0 , 0 8  1 2
Ma trận cứng Ktt của tổng thể
sau khi lắp ghép một ma trận
cứng của phần tử thứ i vào

Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 31 Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 32

Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng
Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật

6.2.1.4. Lắp ghép vector lực quy đổi trên phần tử vào vector lực
tổng thể  0 1  H1  1  H1 
     
Hàm chuyen_Ftt_td có nhiệm vụ lắp ghép vector lực của phần tử vào  5000  2  V1  2  5000 V1 
vector lực tổng thể 833,3 3  M  3 833,3  M 
1 1
     
Code Matlab:  0 4  0 4  0 
  7500 
function Ftt = chuyen_Ftt_td(Ftt,Ftt_td,mt_bool_pt)
Ftt(mt_bool_pt,1) = Ftt(mt_bool_pt,1) + Ftt_td;
 7500  5
   0  5  
0 6 833,3 
  833,3   
 6  
 Ftt   Fqd   Fnut   
 0 7  0  7  0 
 5000  8  0 8  5000 
     
 0 9 1 00 0 0  9  10000 
 0 10  H 10  H4 
4
     
 2500 11  V 4  1 1  2500 V4 
     M4 
 0 12  M 4  1 2  

Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 33 Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 34

Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng
Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật

6.2.2. Áp đặt điều kiện biên chuyển vị lên ma trận cứng


tổng thể và vector lực tổng thể Hệ phương trình đại số rút gọn

Phương trình cân bằng cho toàn kết cấu 10,96 0 0,24 0,96 0 0,24  q 4   0 
 0 20,12 0,06 0 20 0    7500
 K tt .U tt    Ftt     q5   

8 0,24 0,06 0,12 0,24 0 0,04  q 6   833,3 
Áp đặt điều kiện biên chuyển vị lên ma trận độ cứng tổng thể 2.10  .    
0,96 0 0,24 1,92 0 0   q7   0 
q1  q2  q10  q11  0 q3  q12  0 5000
 0 20 0 0 40 0   q 8   
 10 0 0 10 0 0 0 0 0 0 0 0   q 1   H1   
 0

0,12 0,06 0 0,12 0,06 0 0 0 0 0 0 


 q 2



 5000  V1 

 0,24 0 0,04 0 0 0,16  q 9  10000 
  833,3  M 
 0 0,06 0,04 0 0,06 0,02 0 0 0 0 0 0   q 3  1
   
10 0 0 10,96 0 0,24 0,96 0 0,24 0 0 0  q   0 
   4

 0 0,12 0,06 0 20,12 0,06 0 20 0 0 0 0   q 5   7500 
     
8 0 0,06 0,02 0,24 0,06 0,12 0, 24 0 0,04 0 0 0   q 6   833,3 
2.10      
0 0 0 0,96 0 0, 24 1,92 0 0 0,96 0 0,24   q 7   0 
   
 0 0 0 0 20 0 0 40 0 0 20 0   5000 
 q 8   
 0 0,04 

0 0 0,24 0 0,04 0 0 0,16 0, 24 0

 q
 9

  10000 
 0 0 0 0 0 0 0,96 0 0, 24 0,96 0 0, 24  q 10   H4 
     
 0 0 0 0 0 0 0 20 0 0 20 0   q 11   2500 V4 
 0
   M 
0 0 0 0 0 0,24 0 0,04 0, 24 0 0,08   q 12   4 

Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 35 Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 36
9/3/2019

Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng
Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật

Hàm khu_dkb có nhiệm vụ khử điều kiện biên của ma trận cứng Ktt tổng
thể và vector lực Ftt tổng thể
q4   0,0992 0,0004 0,0748 0,0402 0,0002 0,1302  0 
  0,0004  
 q5  0,0992 0,0748 0,0091 0,0496 0,0180 7500 Code Matlab:
  function [Ktt,Ftt] = khu_dkb(Ktt,Ftt,rangbuoc)
 
 q6  
8 0,0748 0,0748 12,612 1,5391 0,0374 3,0409  833,3  n = length(rangbuoc);
   0,5.10  .  
 q7   0,0403 0,0091 1,5391 0,7333 0,0046 0,4452  0  btdtt = length(Ktt); Vector chứa các bậc tự do bị
  for i = 1:n ràng buộc
 q8 
0,0002 0,0496 0,0374 0,0046 0,0498 0,0090 5000 c = rangbuoc(i);
q    
 9  0,1302 0,0180 3,0409 0,4452 0,0090 7,2055  10000  for j=1:btdtt Vector lực tổng thể trước khi
Ktt(c,j)=0;%khu hang khử điều kiện biên
 q4  5 Ktt(j,c)=0;%khu cot
   0, 680.10 , m  end
 q5   0,555.10 5 , m  Ktt(c,c) = 1;
Ma trận cứng tổng thể trước khi
    khử điều kiện biên
 q   0, 000103, rad  Ftt(c) = 0;
  6   5  end
 q7    1, 63.10 , m  Vector lực tổng thể sau khi khử
   0, 34.10 5 , m  điều kiện biên
q
  
8 
 q   0, 000349, rad  Ma trận cứng tổng thể sau khi
 9
đã khử điều kiện biên

Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 37 Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 38

Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng
Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật

6.2.3. Giải phương trình đại số tuyến tính để thu được kết 6.2.4. Tính phản lực
quả chuyển vị function [phan_luc] = tinh_phan_luc(Ktt_bd,Ftt_bd,Utt)
phan_luc = Ktt_bd*Utt - Ftt_bd;
Ktt_bd = Ktt; %Luu lai ma tran do cung tong the ban dau  10 0 0 10 0 0 0 0 0 0 0 0   q 1   0   H1 
 0
     
Ftt_bd = Ftt; %Luu lai ma tran luc tong the ban dau 0,12 0,06 0 0,12 0,06 0 0 0 0 0 0   q 2  50001   V1 
       
 0 0,06 0,04 0 0,06 0,02 0 0 0 0 0 0   q 3  833,3  M1 
[Ktt,Ftt] = khu_dkb(Ktt,Ftt,rangbuoc);%khu dieu kien bien    q    0  0
10 0 0 10,96 0 0,24 0,96 0 0,24 0 0 0   4

Utt=inv(Ktt)*Ftt  0 0,12 0,06 0 20,12 0,06 0 20 0 0 0 0   q 5   7500   0 
   
   
0 0,06 0,02 0,24 0,06 0,12 0, 24 0 0,04 0 0 0    q 6   833,3    0 
2.108     
0 0 0 0,96 0 0, 24 1,92 0 0 0,96 0 0,24   q 7   0  0
Utt =     
 q 8   5000   0 
  
1.0e-03 * Vector lực của tổng thể sau khi  0 0 0 0 20 0 0 40 0 0 20 0 
 0 0,04 
 q 9 
 
10000   0 
0 khử điều kiện biên 
0 0 0,24 0 0,04 0 0 0,16 0, 24 0
 
 q 1 0    H 
 0 0 0 0 0 0 0,96 0 0, 24 0,96 0 0, 24 0 4
0      
   q 1 1   2500   V4 
 0 0 0 0 0 0 0 20 0 0 20 0 
 
0 Ma trận cứng của tổng thể sau  0 0 0 0 0 0 0,24 0 0,04 0, 24 0 0,08 

 q 1 2   0  M 4 
-0.0068 khi đã khử điều kiện biên
-0.0056  H1  13598N
-0.1032 Vector chứa các kết quả chuyển  V  3894,5N
-0.0163  1
vị  M  487 Nm
-0.0034
 1
0.3485
 H 4  13598N
0  V4  16105N
0 
0 M 4  2005,5Nm

Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 39 Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 40

Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng
Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật

6.2.5. Tính nội lực

Nội lực phần tử 1


 0 1
CT : M e   S e .q e 1 2 3 4 5 6 

0

2
 0 -1,2 -0,8 0 1,2 -0,4  
 0  3
M (1)  10 7   5 
 0 1,2 0,4 0 -1,2 0,8   0, 68.10  4
2 2
EJ  6Ls -6Lc -4L -6Ls 6Lc -2L   0, 56.10 5  5
 Se   

 0, 0001  6

L3 -6Ls 6Lc 2L2 6Ls -6Lc 4L2  
 346, 3 
 Nm
  759, 2 

Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 41 Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 42
9/3/2019

Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng
Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật

Nội lực phần tử 2 Nội lực phần tử 3


0,68.105  4
 5  1,63.105  7
4 5 6 7 8 9 0,56.10  5  5 
-4,8 0 -1,6 4,8 0 -0,8  0,0001  6 7 8 9 1 0 1 1 1 2 0,34.10  8
M(2) 107   5  -4,8 0 -1,6 4,8 0 -0,8  0,00035  9
 4,8 0 0,8 -4,8 0 1,6  1,63.10 7 M(3) 107   
0,34.105 8  4,8 0 0,8 -4,8 0 1,6   0 10
   0 11
 0,00035 9  
  1592, 6 
    4793, 5  
 0 12
 5206, 5   
 2005, 5 

Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 43 Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 44

Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng
Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật

6.3.1. Biểu diễn kết quả biến dạng

6.3. Hậu xử lý (Postprocessor)

Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 45 Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 46

Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng
Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật

6.3.2. Biểu diễn kết quả moment nội lực 6.3.3. Hiệu chỉnh kết quả moment nội lực
Lưu ý: vẽ theo quy ước toán học với chiều dương quy ước theo hệ trục
tọa độ địa phương phần tử
Dấu – là vì chiều tác dụng
của q ngược với chiều
l = 1m dương trục y’ của phần tử
y,
q = -10000 N/m Thế q = -10000 vào đây
thì giá trị moment nội lực
tại giữa dầm sẽ dương
và ta vẽ ở trên theo quy
x, ước toán học

y, Thế q = -10000 vào đây


-ql2/24 = 416,66Nm thì giá trị moment nội lực
tại hai đầu dầm sẽ âm
và ta vẽ ở dưới theo quy
ước toán học
x,
ql2/12 = -833,33Nm ql2/12 = -833,33Nm

Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 47 Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật
9/3/2019

Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng
Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật

Dấu + là vì chiều tác dụng Dấu - là vì chiều tác dụng


của moment M cùng chiều l = 2m của lực tập trung P ngược
l với chiều dương quy ước y, với chiều dương trục y’ của
y, là ngược chiều kim đồng phần tử
M = +10000 Nm hồ P = -10000 N
x, Thế P = -10000 vào đây
, Thế M = +10000 vào đây thì giá trị moment nội lực
x l/2 l/2
thì giá trị moment nội lực tại giữa dầm sẽ dương
l/2 l/2 tại giữa dầm (bên trái) sẽ và ta vẽ ở trên theo quy
dương và ta vẽ ở trên ước toán học
theo quy ước toán học (-Pl)/8 = 2500 Nm
M/2 = 5000 Nm y,
y, Thế P = -10000 vào đây
Thế M = +10000 vào đây
M/4 = 2500 Nm thì giá trị moment nội lực
thì giá trị moment nội lực ,
x tại giữa dầm sẽ âm và ta
tại giữa dầm (bên phải)
vẽ ở dưới theo quy ước
sẽ âm và ta vẽ ở dưới
x, theo quy ước toán học
toán học

-M/4 = -2500 Nm
(Pl)/8 = -2500 Nm (Pl)/8 = -2500 Nm
-M/2 = -5000 Nm
Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật

Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng
Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật

Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 51


9/3/2019

Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng
Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật

Chương 7
Đồ họa ba chiều trong
Matlab
Giảng viên: Ths. Trần Kim Bằng
Bộ môn Cơ Kỹ Thuật, P.106B4
Khoa Khoa Học Ứng Dụng
Đại học Bách Khoa TpHCM

Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 1 Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 2

Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng
Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật

7.1. Đồ thị dạng đường trong không gian ba chiều


Vẽ nhiều đường cong 3 chiều
Code Matlab:
Code Matlab:
t = 0:pi/50:10*pi;
x=linspace(0,3*pi);
plot3(sin(t),cos(t),t) z1=sin(x);
z2=sin(2*x);
xlabel('sin(t)')
z3=sin(3*x);
y1=zeros(size(x)); Trục y
ylabel('cos(t)')
y3=ones(size(x)); Trục x Trục z
zlabel('t')
y2=y3/2;
axis square;
plot3(x,y1,z1,y2,z2,x,x,y3,z3)
grid on;
plot3(x,y1,z1,x,y2,z2,x,y3,z3)
text(0,0,0, 'Origin') xlabel('X-axis'),ylabel('Y-axis'),zlabel('Z-axis')
grid on

Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 3 Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 4

Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng
Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật

7.2. Đồ thị dạng lưới

Vẽ ma trận các dữ liệu Đồ thị dạng lưới sử dụng lệnh


mesh(X,Y,Z)
Code Matlab: Code Matlab:
[X,Y] = meshgrid([-2:0.1:2]); [X,Y] = meshgrid(-8:.5:8);
Z = X.*exp(-X.^2-Y.^2); R = sqrt(X.^2 + Y.^2) + eps;
plot3(X,Y,Z) Z = sin(R)./R;
xlabel('X-axis'),ylabel('Y-axis'),zlabel('Z-axis') mesh(X,Y,Z)
grid on xlabel('X-axis'),ylabel('Y-axis'),zlabel('Z-axis')
Để thấy luôn lưới mặt khuất ta dùng lệnh
hidden off
Ngoài ra còn nhiều loại đồ thị lưới khác
meshc(X,Y,Z) %Đồ thị lưới có các đường mức
meshz(X,Y,Z) %Đồ thị lưới với mặt phẳng zero
Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 5 Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 6
9/3/2019

Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng
Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật

7.3. Đồ thị dạng mặt cong


Để vẽ đồ thị mặt ta dùng lệnh Thêm một giá trị vô Ngoài ra còn nhiều loại đồ thị dạng mặt cong khác khác
surf(X,Y,Z) cùng bé để Z không bị surfc(X,Y,Z) %Đồ thị mặt có các đường mức
suy biến khi R = 0
Code Matlab: surfl(X,Y,Z) %Đồ thị mặt có hiệu ứng ánh sáng
[X,Y] = meshgrid(-8:.5:8); surfnorm(X,Y,Z) %Đồ thị mặt có pháp tuyến
R = sqrt(X.^2 + Y.^2) + eps; Code Matlab:
Z = sin(R)./R; [X,Y,Z] =peaks(30); %biểu diễn phân phối Gauss, có thể tăng số
surf(X,Y,Z) điểm biều diễn bằng cách tăng n>30
surfl(X,Y,Z)
Để bỏ đi đường lưới ta dùng lệnh shading interp
shading flat colormap pink
Để làm mịn vùng màu
surfnorm(X,Y,Z) % hiển thị pháp tuyến của mặt cong
shading interp

Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 7 Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 8

Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng
Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật

7.4. Đồ thị dạng đường mức


Để vẽ đồ thị đường mức ta dùng lệnh
contour(X,Y,Z,N) %Đồ thị đường mức 2 chiều Để chú thích độ cao trong đồ thị đường mức, ta dùng lệnh clabel(C)
contour3(X,Y,Z,N) %Đồ thị đường mức 3 chiều
Code Matlab:
pcolor(X,Y,Z) %Đồ thị chuyển cao độ tỉ lệ với màu
contourf(X,Y,Z,N) %Đồ thị đường mức 2 chiều có màu [X,Y,Z] =peaks;
N = 10;
Vẽ đường mức 2 chiều
Code Matlab: C = contour(X,Y,Z,N); % tương tự cho contour3 và contourf
[X,Y,Z] =peaks; clabel(C)
contour(X,Y,Z,20)
contour3(X,Y,Z,20) %Đường mức 3 chiều
pcolor(X,Y,Z) %Đồ thị màu cao độ
shading interp
contourf(X,Y,Z,20)

Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 9 Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 10

Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng
Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật

7.5. Phổ màu ba chiều 7.6. Một số lệnh đồ họa ba chiều đặc biệt
Để biểu diễn sự thay đổi một đại lượng trên một miền 7.6.1. Lệnh patch
diện tích trong không gian ba chiều bằng màu sắc, ta Lệnh patch vẽ và tô màu các mặt để ghép thành hình ba chiều
dùng lệnh fill3(x,y,z,c)
Code Matlab:
X = [x(1) x(2) x(3) … x(n)] x=[0 0 0 0; 0 1 1 0;0 1 1 0]';
y=[0 1 1 0; 0 0 0 0;1 1 1 1]';
Y = [y(1) y(2) y(3) … y(n)]
z=[0 0 1 1; 0 0 1 1;0 0 1 1]';
Z = [z(1) z(2) z(3) … z(n)] patch(x,y,z,-z)
C = [c(1) c(2) c(3) … c(n)] axis square
fill3(X,Y,Z,C) Giá trị c(3) ứng với vị trí x(3), y(3) và z(3) view([35,35])
zlabel('z'), ylabel('y')
Code Matlab:
X = [0 1 1 2;1 1 2 2;0 0 1 1];
Y = [1 1 1 1;1 0 1 0;0 0 0 0];
Z = [1 1 1 1;1 0 1 0;0 0 0 0];
C = [0.5000 1.0000 1.0000 0.5000; 1.0000 0.5000 0.5000 0.1667;
0.3330 0.3330 0.5000 0.5000];
fill3(X,Y,Z,C)

Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 11 Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 12
9/3/2019

Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng
Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật

Vẽ mô hình máy bay bằng lệnh patch 7.6.2. Lệnh cylinder


Code Matlab:
ex=0.6*[0 -1 -1 0]'-9.4; Lệnh cylinder tính tọa độ các điểm tạo nên hình ống, để mặc định thì lệnh
fx=[6.6 5.3 2.3 1.5 -2 -2.5 -10 -10 0 5.3
ey=5.1*[1 1 -1 -1]'/2; sẽ vẽ đường ống có bán kính là 0.5 và chiều cao bằng 1
5.3]';
ez=0.7*ones(4,1);
fy=zeros(11,1);
vsx=[0 -1.7 -2.7 -1.8]'-7.3; Code Matlab:
fz=[1.2 1.7 1.9 1.2 1.2 2.6 1.1 0.7 -0.2 0.3
vsy=zeros(4,1); [x, y, z] = cylinder(16);
0.8]';
vsz=[1.65 4.5 4.5 1.25]'; surf(x, y, z)
cx=[2.3 0 -2.5 -2 1.5]';
rx=[-2.7 -3.3 -3.1 -1.8]'-7.3;
cy=zeros(5,1);
ry=zeros(4,1);
cz=[1.9 3.1 2.6 1.2 1.2]'; Code Matlab:
rz=[4.5 4.5 1.5 1.25]';
wingx=2.3*[1 -3 -3 -3+.6 -3+.6 -3 -3 -3+.6 - zz = linspace(0, 2*pi, 26); % Tạo biên dạng theo ý muốn
pf=patch(fx,fy,fz,'c');
3+.6 -3 -3 1]'/4; [x, y, z] = cylinder(1.1+sin(zz), 16);
pw=patch(wingx,wingy,wingz,'c');
wingy=[8.5 8.5 7.8 7.8 2.2 2.2 -2.2 -2.2 -7.8 surf(5*x, 2*y, z*30)%Thay đổi kích thước theo phương x, phương y và phương z
pc=patch(cx,cy,cz,'b'); ps=patch([hsx
-7.8 -8.5 -8.5]'; hold on
vsx],[hsy vsy],[hsz vsz],'c');
wingz=zeros(12,1); surf(5*x+6, 2*y+7, z*30-10)%thay đổi kích thước và dịch chuyển theo phương x,
pu=patch([ax ax ex rx],[ay -ay ey ry],[az az
ax=2.3*[-3+.6 -3 -3 -3+.6]'/4; y, z
ez rz],'m');
ay=[7.8 7.8 2.2 2.2]'; axis equal
axis equal, axis off, view(135,20)
az=zeros(4,1);
hsx=1.3*[0 -1 -1 0]'-8.1;
hsy=5.1*[1 1 -1 -1]'/2;
hsz=0.7*ones(4,1);
Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 13 Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 14

Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng
Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật

7.6.3. Lệnh ellipsoid


Lệnh ellipsoid tính tọa độ các điểm tạo nên hình bầu dục, với cú pháp
Code Matlab: [x, y, z] = ellipsoid(xc, yc, zc, xr, yr, zr, n): vẽ hình bầu dục với xc, yc, zc là
zz = linspace(0, 2*pi, 26); vị trí tâm, xr, yr, zr là chiều dài các trục, n là số độ mịn.
r = 1+sin(zz);
[x, y, z] = cylinder(r, 16); Code Matlab:
surf(x, y, z) [x, y, z] = ellipsoid(0, 1, 1, 2, 6, 6, 30);
view(-88.5, -48) axis equal
shading flat surf(x, y, z)
colormap(copper)
axis off vis3d %co dinh camera

Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 15 Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 16

Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng
Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật

7.7. Vẽ mặt cong có dạng xoắn ốc 7.8. Vẽ đường giao của hai mặt
Code Matlab: Code Matlab:
a = 1.13; b = 1.14; a = 1;
uu = linspace(0, 2*pi, 30); [xs, ys, zs] = sphere(30);
vv = linspace(-15, 6, 45); surf(2*a*xs, 2*a*ys, 2*a*zs)
[u, v] = meshgrid(uu, vv); hold on
x = a.^v.*cos(v).*(1+cos(u)); [x, y, z] = cylinder;
y = -a.^v.*sin(v).*(1+cos(u)); surf(a*x+a, a*y, 4*a*z-2*a)
z = -b*a.^v.*(1+sin(u)); shading interp
h=surf(x, y, z); t = linspace(0, 4*pi, 100);
%set(h, 'FaceAlpha', 0.4) x = a*(1+cos(t));
%shading interp y = a*sin(t);
axis vis3d on equal z = 2*a*sin(t/2);
view([-35 38]) plot3(x, y, z, 'y-', 'Linewidth', 2.5);
axis equal off
view([45, 30])

Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 17 Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 18
9/3/2019

Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng
Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật

7.9. Các quy ước về màu sắc


Màu được định nghĩa từ 3 màu chính RGB có 3 cột, 1 hàng giá trị từ 0->1
Một số màu kết hợp

Red Green Blue Color


Red Green Blue Color
1 0 0 red
0 0.5 0 dark green
0 1 0 green
0.67 0 1 violet
0 0 1 blue
1 0.5 0 orange
1 1 0 yellow
0.5 0 0 dark red
1 0 1 magenta
0.5 0.5 0.5 medium
0 1 1 cyan gray
0 0 0 black
1 1 1 white

Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 19 Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 20

Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng
Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật

Hiển thị và sử dụng phổ màu cho các loại đồ thị 2 chiều và 3 chiều:
Một số dạng phổ màu trong MATLAB plot, plot3, mesh, surf, contour…

Standard Colormap Description Chọn 8 đoạn màu cho phổ màu hot
hsv Phổ màu 7 sắc bắt đầu và kết hot(8)
thúc là màu đỏ
jet bắt đầu là màu đỏ và kết thúc Code Matlab:
là màu xanh dương [x,y,z]=peaks;
hot, cool Màu nóng và màu lạnh mesh(x,y,z);
summer,autumn,winter,spring Màu của bốn mùa colormap(hot(8))
white,gray,bone,pink Biến thiên từ màu đó đến axis([-3 3 -3 3 -6 8])
màu trắng
colorbar % hiển thị phổ màu
copper Màu đồng

Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 21 Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 22

Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng
Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật

Để sử dụng nhiều hơn một phổ ta dùng các lệnh sau: Code Matlab:
Code Matlab: [X,Y] = meshgrid(-8:.5:8);
mymap=[hsv(32);copper(32)]; R = sqrt(X.^2 + Y.^2) + eps;
colormap(mymap) Z = sin(R)./R;
mesh(peaks+8); surf(X,Y,Z,Z)
view(90,0)
hold on Tương tự như lệnh surf(X,Y,Z) vì màu mặc định thay đổi theo
mesh(peaks-8); phương Z
Thay đổi góc nhìn view(az,el)
colorbar surf(X,Y,Z,-Z) %thay đổi ngược chiều trục Z
hold off surf(X,Y,Z,X) %thay đổi theo trục X
Xoay 90 độ theo trục z ngược chiều kim đồng hồ surf(X,Y,Z,X+Y) %thay đổi theo mặt X-Y
surf(X,Y,Z,R) %thay đổi theo bán kính

Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 23 Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 24
9/3/2019

Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng
Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật

7.10. Hiệu ứng chiếu sáng

Ta sử dụng lệnh light và lighting

Code Matlab:
sphere
colormap(gray)
shading interp
light %bật đèn chiếu
lighting none %đèn chiếu mặc định
lighting gouraud %đèn chiếu gouraud
lighting phong %đèn chiếu phong

Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 25


9/3/2019

Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng
Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật

Chương 8
Các phép toán trên đa thức
và biến biểu tượng
Giảng viên: Ths. Trần Kim Bằng
Bộ môn Cơ Kỹ Thuật, P.106B4
Khoa Khoa Học Ứng Dụng
Đại học Bách Khoa TpHCM

Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 1 Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 2

Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng
Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật

8.1.1. Định nghĩa


Trong Matlab, có thể biểu diễn một hàm đa thức dưới dạng mảng một
chiều như sau
p=[1 -12 25 1 -116]
Trong đó, các phần tử trong mảng p là các hệ số nhân với x mũ n với n
giảm dần từ trái qua phải. Như vậy, ta có thể ngầm hiểu mảng p đang biểu
8.1. Đa thức trong MATLAB diễn một hàm đa thức
p = x4 - 12x3 + 25x2 + x - 116
Có thể biểu diễn đa thức p trên đồ thị bằng cách kết hợp lệnh polyval và
lệnh plot
p=[1 -12 25 1 -116]
x=linspace(-1,3,500)
y=polyval(p,x) %polyval là hàm để tính giá trị của đa thức p tại một giá trị x
plot(x,y)

Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 3 Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 4

Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng
Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật

8.1.2. Tìm nghiệm của đa thức 8.1.3. Tìm hệ số đa thức từ nghiệm


Để tìm nghiệm của đa thức, dùng lệnh roots Nếu biết trước được tập nghiệm, cũng có thể tìm lại đa thức từ tập nghiệm
đó qua lệnh poly. Ta có thể truy ngược lại các hệ số của đa thức p thông
p=[1 -12 25 1 -116] qua lệnh poly
r=roots(p) Ví dụ: Dùng máy tính bỏ túi để tìm nghiệm của đa thức 7x^3+5x^2+3x+1
r=[-0.45881893;-0.127733391+0.543178251i;-0.127733391-0.543178251i]
p=poly(r)
p=p*7

Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 5 Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 6
9/3/2019

Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng
Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật

8.1.4. Cộng trừ hai đa thức 8.1.5. Nhân hai đa thức


Cộng đa thức
Hàm conv thực hiện nhân hai đa thức
Hai đa thức cùng bậc:
Ví dụ:
p1=[2 5 4 1];
Nhân 2 đa thức sau:
p2=[1 -3 9 3];
A(x)=x3+2x2+3x+4 và b(x)=x3+4x2+9x+16
p = p1 + p2
Viết lại hai đa thức này dưới dạng mảng một chiều trong Matlab
Tương tự cho trừ đa thức
a=[1 2 3 4]; b=[1 4 9 16];
Hai đa thức khác bậc:
c=conv(a,b) %dùng lệnh conv để nhân hai đa thức
p1=[2 5 4 1];
p2=[1 0 9 3];
p = p1– p2;
Thêm các hệ số 0 vào đa thức có bậc thấp hơn để
hai đa thức có cùng bậc

Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 7 Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 8

Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng
Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật

8.1.6. Chia hai đa thức 8.1.7. Đạo hàm đa thức


Chia đa thức:
y = x3 - 5x2 + 4x - 9
Ví dụ: Cho 2 đa thức:
y = [1 -5 4 -9]
y = x3 - 5x2 + 4x - 9
Dùng lệnh polyder để tính đạo hàm
z= x2 +3 đa thức
Viết lại dưới dạng mảng một chiều trong Matlab z = polyder(y)
y = [1 -5 4 -9];
z = [1 0 3];
p = deconv(y,z)
p = x – 5, là phần thương
[p,r] = deconv(y,z)
p = x – 5, là phần thương
r = x + 6, là phần dư
Vậy y = pz + r = (x – 5)(x2 + 3) + (x + 6)
Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 9 Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 10

Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng
Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật

8.2.1. Khai báo biến biểu tượng


syms a b c x
f=a*x^2+b*x+c;
solve(f) %giải phương trình
Nếu lấy đạo hàm f
8.2. Các phép toán trên diff(f)
Sẽ cho ra kết quả như sau
biến biểu tượng ans = b + 2*a*x
Tại sao Matlab chọn biểu tượng x là biến để lấy đạo hàm mà
không chọn a hay b? Matlab mặc định chọn biểu tượng gần nhất
với chữ cái x làm biến.
có thể dùng lệnh findsym(f,n) để tìm n biến trong hàm f gần nhất
với chữ cái x

Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 11 Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 12
9/3/2019

Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng
Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật

8.2.2. Thế một hàm vào biến biểu tượng 8.2.3. Thế một giá trị hay một biểu thức vào biến biểu tượng
Thế hàm vào biến bằng lệnh compose Lệnh subs dùng để thay thế một giá trị hay một biểu thức vào biến
syms a b c x y symbolic
f = a*x^2+b*x+c syms a b alpha
g = sin(y); f=cos(a)+sin(b);
h=compose(f,g) g=subs(f,{a,b},{alpha,2}) % thế alpha vào a và 2 vào b
g1=subs(f,{a,b},{[2 3],[12 8]})
Ta được: g = sin(2) + cos(alpha)

Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 13 Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 14

Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng
Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật

8.2.4. Biểu diễn biểu thức toán học trên đồ thị 8.2.5. Tính giới hạn hàm số
Biểu diễn biểu thức toán học trên đồ thị bằng lệnh latex Tính giới hạn bằng lệnh limit
syms x y t Tính giới hạn của hàm f khi h tiến đến 0
F1 = diff(atan(x)); syms x h n
F2 =(x^2+1/x)/sqrt((sin(x)+cos(x))/x^3.5); limit((cos(x+h)-cos(x))/h,h,0)
H1=latex(F1); Tính giới hạn của hàm g khi n tiến về vô cùng
H2=latex(F2); g = (1+x/n)^n
text(.2,.25,['$$' H1 '$$'],'interpreter','latex','fontsize',14) limg = limit(g,n,inf)
text(.6,.2, ['$$' H2 '$$'],'interpreter','latex','fontsize',16)

Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 15 Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 16

Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng
Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật

Tính giới hạn bên phải hay bên trái (0+ hay 0-) của hàm 1/x 8.2.6. Tìm hàm ngược
syms x Dùng lệnh finverse để tìm hàm ngược
lim_plus=limit(1/x,x,0,'right') syms x
lim_minus=limit(1/x,x,0,'left') f=tan(1/x)
Trong trường hợp này, nếu ta không ghi rõ giới hạn trái hay phải thì kết finverse(f)
quả sẽ không xác định
syms x
limit(1/x,x,0)

Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 17 Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 18
9/3/2019

Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng
Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật

8.2.7. Giải phương trình theo biến biểu tượng 8.2.8. Giải hệ phương trình theo biến biểu tượng
Giải phương trình theo biến symbolic bằng lệnh solve syms a b c d x y t
syms a b c x [x,y]=solve(a*x+b*y-t,c*x+d*y)
f=a*x^2+b*x+c; Hoặc ta có thể dùng cách khác
y=solve(f) syms a b c d x y t
Ta có thể giải theo biến ta mong muốn, giả sử là biến b g=solve(a*x+b*y-t,c*x+d*y)
syms a b c x g.x
f=a*x^2+b*x+c; g.y
y=solve(f,b)

Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 19 Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 20

Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng
Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật

8.2.9. Thu gọn và khai triển biểu thức 8.2.10. Biến đổi tổng thành tích
Thu gọn biểu thức bằng lệnh collect Lệnh factor biến đổi biểu thức từ dạng tổng thành tích
syms x t b syms x
f=(1+x)*t*b^2+x*t*b^3+b f=x^3-6*x^2+11*x-6;
f1=collect(f) f=factor(f)
f2=collect(f,x) % Đặt x ra ngoài Ta được: f = (x-3)*(x-1)*(x-2)
f3=collect(f,t) % Đặt t ra ngoài syms x
f4=collect(f,b) % Đặt b ra ngoài g=x^6+1;
Khai triển biểu thức bằng lệnh expand g=factor(g)
syms x y Ta được: g = (x^2+1)*(x^4-x^2+1)
g=cos(x+y);
g=expand(g)

Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 21 Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 22

Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng
Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật

8.2.11. Tối giản biểu thức 8.2.12. Lấy các hệ số trong đa thức
Tối giản biểu thức bằng lệnh simplify Lọc ra các hệ số đi kèm biến x bằng lệnh coeffs
syms x syms x
f=(1-x^2)/(1-x); f=x^3-2*x^2+3*x-4;
f=simplify(f) c=coeffs(f,x)
Ta được: c =[ -4, 3, -2, 1]

Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 23 Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 24
9/3/2019

Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng
Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật

8.2.13. Đạo hàm theo biến biểu tượng 8.2.14. Tích phân theo biến biểu tượng
Lệnh lấy đạo hàm diff
Lệnh lấy tích phân int
syms a x
syms x
f=sin(a*x^2);
f=sin(x);
diff(f) %lấy đạo hàm của f theo biến gần nhất với ký tự x dựa trên quy
F=int(f) %lấy tích phân của f theo x
luật alphabet
F1=int(f,0,pi) %lấy tích phân của f theo x trên khoảng từ 0 đến pi
diff(f,a) %lấy đạo hàm của f theo biến ta mong muốn là biến a
diff(f,2) %lấy đạo hàm cấp 2 của f theo biến gần nhất với ký tự x dựa trên
quy luật alphabet syms x y
diff(f,a,2) %lấy đạo hàm cấp 2 của f theo biến ta mong muốn là biến a f=sin(x) +y^2;
F=int(f,y) %lấy tích phân của f theo y
Lấy đạo hàm cho mảng hai chiều
F1=int(f,y,0,2) %lấy tích phân của f theo y trên khoảng từ 0 đến pi
syms a x
A=[cos(a*x),sin(a*x); -sin(a*x),cos(a*x)];
diff(A) %lấy đạo hàm theo biến x

Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 25 Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 26

Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng
Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật

8.2.16. Tìm nghiệm tường minh của hệ phương trình vi phân


8.2.15. Tìm nghiệm tường minh của phương trình vi phân
Giải hệ phương trình vi phân không có điều kiện ban đầu

df  dx
 f  sin(t )  dt  y (t)
dt 
 dy   x (t)
Giải phương trình vi phân không có điều kiện ban đầu  dt
Matlab sẽ ngầm hiểu y và x là hàm theo t
dsolve('Df = f + sin(t)')
z = dsolve('Dx = y', 'Dy = -x')

dy
 1  y 2 , y (0)  1 Giải hệ phương trình vi phân có điều kiện ban đầu x=2 và y =1 lúc t = 0
dt
dy dx
Giải phương trình vi phân có điều kiện ban đầu y =1 lúc t = 0  1 2 y ,  4 y  5 x , x  0   2 , y (0)  1
dt dt
dsolve('Dy=1+y^2','y(0)=1') s = dsolve('Dy=1+2*y','Dx=4*y+5*x','x(0)=2','y(0)=1')

Để xem kết quả x(t) và y(t) gọi lệnh s.x và s.y

Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 27 Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 28

Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng
Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật

s = dsolve('Dy=1+2*y','Dx=4*y+5*x','x(0)=2','y(0)=1')
• Để có thể dễ dàng thay đổi các tham số 2, 4 và 5, ta dùng cách ghép Để tính x(t) và y(t) theo một dãy thời gian t=0:0.01:5, ta dùng các lệnh sau
chuỗi syms t
• Bằng cách sử dụng lệnh strcat để ghép chuỗi và num2str để thay đổi t=0:0.05:5;
tham số xt = eval(s.x);
plot(t,xt);
• Gán các phương trình vi phân vào một biến nào đó, giả sử đặt tên là
yt = eval(s.y);
Eq1 và Eq2
figure
• Gán điều kiện ban đầu vào một biến nào đó, giả sử đặt tên là Intcond plot(t,yt);

a = 2; b = 4; c = 5
Eq1 = strcat('Dy=1+',num2str(a),'*y')
Eq2 = strcat('Dx=',num2str(b),'*y+',num2str(c),'*x')
Intcond = 'x(0)=2,y(0)=1'
s = dsolve(Eq1, Eq2, Intcond)

Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 29 Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 30
9/3/2019

Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng
Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật

8.2.17. Giải phương trình vi phân theo phương pháp gần đúng Lần lượt thực hiện các bước sau

Dùng lệnh ode45 Trước hết, phải tạo một m-file với tên hàm tùy ý. Giả sử đặt tên là ptvp1.
Trong đó chứa phương trình vi phân ta muốn giải gần đúng
d 2 y1 dy1 dy1 d y1
 1000(1  y12 )  y1 , y1(0)  2 , (0)  0 function dy = ptvp1(t,y) dt
 y2
dt 2 dt dt dy = zeros(2,1);
dy2 d y1
dy(1) = y(2); Số phần tử trong dy  1 0 0 0 (1  y 1 2 )  y1
Lệnh giải phương trình vi phân gần đúng trong matlab không định nghĩa dt dt
dy(2) = 1000*(1 - y(1)^2)*y(2) - y(1);
được đạo hàm cấp 2 trở lên. Do đó, ta phải dùng phương pháp đổi biến y 1( 0 )  2 , y 2 ( 0 )  0
Sau đó, chuyển về thư mục hiện hành chứa ptvp1.m rồi gọi lệnh giải ode45
dy1 [T,Y] = ode45(@ptvp1,[0:1:3000],[2 0]);
 y2
dt
dy 2 dy1 Khoảng thời gian Điều kiện ban đầu
 1000(1  y12 )  y1 Tên m-file
cần xét
dt dt
y1(0)  2 , y 2(0)  0

Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 31 Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 32

Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng
Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật

[T,Y] = ode45(@ptvp1,[0:1:3000],[2 0]);

Mảng T sẽ chứa các giá trị thời gian từ 0:1:3000

Mảng Y sẽ chứa các giá trị y1 và y2 theo thời gian t. Với Y(:,1) chứa y1
và Y(:,2) chứa y2 (cũng là dy1/dt)

plot(T,Y(:,1),'-o') Vẽ y1 theo thời gian t

Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 33


9/3/2019

Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng
Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật

Chương 9
CHUỖI KÝ TỰ VÀ CÁC CÚ
PHÁP XỬ LÝ CHUỖI
Giảng viên: Ths. Trần Kim Bằng
Bộ môn Cơ Kỹ Thuật, P.106B4
Khoa Khoa Học Ứng Dụng
Đại học Bách Khoa TpHCM

Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 1 Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 2

Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng
Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật

9.1.1. Cấu trúc của chuỗi


Chuỗi kí tự trong Matlab là mảng các giá trị mã ASSCII của ký
tự muốn hiển thị
t='How about this charcacter string?'
size(t)
9.1. Chuỗi ký tự whos
Muốn xem mã ASCII của ký tự, dùng lệnh double
u=double(t)
Hàm chuyển ngược lại từ mã ASCII thành chuỗi
char([77 114 32 78 104 97 126 32 110 117 109 98 101 114 32
111 110 101 33])
char còn được dùng chuyển từ dạng symbolic thành chuỗi

Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 3 Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 4

Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng
Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật

Để chuyển đổi chuỗi thành dạng số, số thành chuỗi, dùng những lệnh sau
Với mảng các ký tự, có thể thao tác như trên một mảng thông thường
t='How about this charcacter string?' Các lệnh chuyển đổi
u=t(16:24) str2num
u=t(26:-1:16) num2str
u=t(16:24)’
Code Matlab:
Để đưa vào mảng dấu nháy đơn ta sử dụng 2 dấu nháy đơn x=[12,4.6,5,15.67]
vv=mat2str(x)
v='I can''t find the manual!' hoặc v=['I can''t' ' find the manual!']
vv(1)
Ta có thể nối 2 chuỗi với nhau
Code Matlab:
w=[u,v] tt='23'
tt*2
Để in ra chuỗi dùng lệnh disp str2num(tt)*2
disp(w);

Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 5 Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 6
9/3/2019

Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng
Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật

9.1.2. Một số lệnh quan trọng trong việc xử lý chuỗi


Code Matlab:
Lệnh Mô tả b='Peter Piper picked a peck of pickled peppers';
ischar(s) có phải là chuỗi kí tự không findstr(b,' ')
isletter(s) có phải là kí tự không findstr(b,'p')
find(b=='p')
isspace(s) có khoảng trống không
findstr(b,'cow')
findstr(s1,s2) tìm chuỗi s2 trong chuỗi s1 findstr(b,'pick')
strcmp (s1,s2) so sánh 2 chuỗi có bằng nhau không
strmatch(s1,s2) trả về vị trí chuỗi thứ 1 có trùng kí tự đầu chuỗi 2 Code Matlab:
lower(s) chuyển sang dạng viết thường c='a2 : b_c';
upper(s) chuyển sang dạng viết in hoa
ischar(c)
isletter(c)
isspace(c)

Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 7 Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 8

Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng
Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật

Code Matlab:
S=char('apple','banana','peach','mango','pineapple')
strmatch('pe',S)
strmatch('p',S)
strmatch('banana',S)
9.2. Đọc và ghi chuỗi ký tự
strmatch('Banana',S) lên file text
upper('Banana')
lower('Banana')

Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 9 Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 10

Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng
Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật

9.2.1. Ghi chuỗi ký tự ra màn hình


Các kí tự đặc biệt như \n, \r, \t, \b, \f có ý nghĩa như xuống dòng
fprintf(1, định dạng, chuỗi cần ghi ra theo thứ tự cột); mới, quay lại đầu dòng, cách lề 1 khoảng tab…

Kiểu loại Dạng in ra Lệnh Kết quả


%s Kiểu chuỗi sprintf('%.0e\n',pi) 3e+00
Code Matlab:
%d Kiểu số nguyên thập phân sprintf('%.1e\n',pi) 3.1e+00
x=[1 2 3 4];
%f Kiểu số dấu chấm tĩnh sprintf('%.3e\n',pi) 3.142e+00
y=[5 6 7 8];
%e Kiểu số dấu chấm động fprintf(1, '%6.2f %12.8f\n', x, y); sprintf('%.0f\n',pi) 3
fprintf(1, '%6.2f %12.8f\n', [x; y]); sprintf('%.1f\n',pi) 3.1
Ký tự Ý nghĩa sprintf('%.3f\n',pi) 3.142
\n Enter (xuống dòng)
\t Tab
\b Backspace

Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 11 Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 12
9/3/2019

Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng
Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật

Code Matlab:
disp('How are you')
How are you Code Matlab:
disp(pi) length =8;
3.1416 st='met';
a=[1 4 3 7]; fprintf('do dai la%4.1f %s\n',length,st)
disp(a) do dai la 8.0 met
1437 fprintf('do dai la%4.1f\b %s\n',length,st)
length=8; do dai la 8. met
fprintf('do dai la: \n %6.1f m',length); fprintf('do dai la%4.1f\t %s\n',length,st)
do dai la: do dai la 8.0 met
8m fprintf('Hello!\n')
Hello!

Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 13 Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 14

Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng
Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật

9.2.2. Ghi chuỗi ký tự ra file text


Cho phép đọc và ghi
Cú pháp: Code Matlab:
fid = fopen(filename, 'wt'); % tạo file tên filename để ghi x=[1 2 3 4];
fprintf(fid, format, var); % ghi biến var vào file text
y=[5 6 7 8];
% fid: biến chỉ định file được mở
fid = fopen('test.txt', 'wt');
fprintf(fid, 'X va Y la: \n');
Code Matlab: Code Matlab: fprintf(fid, '%6.2f %12.4f\n', [x; y]);
x=[1 2 3 4]; x=[1 2 3 4];
y=[5 6 7 8]; y=[5 6 7 8];
fid = fopen('test.txt', 'w'); fid = fopen('test.txt', 'wt');
fprintf(fid, '%6.2f %12.4f\n', [x; y]); fprintf(fid, '%6.2f %12.4f\n', [x y]);

Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 15 Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 16

Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng
Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật

9.2.3. Đọc file text định dạng txt 9.2.4. Đọc dữ liệu nút và phần tử từ ANSYS
Code Matlab:
Cú pháp: fid=fopen('NLIST.lis');
no=textscan(fid,'%f%f%f%f','HeaderLines',3,'commentStyle','N');
fid = fopen(filename, 'r'); % gọi file tên filename để đọc
fclose(fid);
fscanf(fid,format, size); % đọc file và ghi lại với định dạng format idI=[no{1}];
fclose(fid) % đóng file xI=[no{2}];
% fid: biến chỉ định file được mở yI=[no{3}];
% size: ma trận kích thước
node=[xI yI];
Code Matlab: numnode = size(node,1);
fid = fopen('test.txt', 'r'); fid=fopen('ELIST.lis');
el=textscan(fid,'%*d%*d%*d%*d%*d%*d%d%d%d%d%*d','HeaderLines',2,'
fscanf(fid, '%g %g', [2 inf]); commentStyle','E');
fclose(fid) fclose(fid);
element=[el{1} el{2} el{3} el{4}];
Chú ý:
size: ma trận [m n], n có thể là inf, m không thể là inf

Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 17 Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 18
9/3/2019

Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng
Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật

Vẽ lưới phần tử
figure
hold on
axis equal
h = plot(node(:,1),node(:,2),'bo');
set(h,'MarkerSize',3);
for i = 1:size(element)
x1 = node(element(i,1),1);
x2 = node(element(i,2),1);
x3 = node(element(i,3),1);
x4 = node(element(i,4),1);
y1 = node(element(i,1),2);
y2 = node(element(i,2),2);
y3 = node(element(i,3),2);
y4 = node(element(i,4),2);
plot([x1 x2],[y1 y2],'-r','linewidth',1);
plot([x2 x3],[y2 y3],'-r','linewidth',1);
plot([x3 x4],[y3 y4],'-r','linewidth',1);
plot([x4 x1],[y4 y1],'-r','linewidth',1);
end

Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 19


9/3/2019

Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng
Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật

Chương 10. Graphical User


Interfaces - GUI - MATLAB

Giảng viên: Ths. Trần Kim Bằng


Bộ môn Cơ Kỹ Thuật, P.106B4
Khoa Khoa Học Ứng Dụng
Đại học Bách Khoa TpHCM

Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 1 Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật

Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng
Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật

10.1.1. Giới thiệu


• GUIDE là viết tắt của Graphical User Interface Development
Environment tức là công cụ dùng để thiết kế GUI.
• GUIDE sẽ tự động tạo ra M-file khi người dùng chạy GUI lần đầu tiên.

10.1. Tổng quan về GUIDE

Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật

Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng
Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật

10.1.2. Tạo giao diện 10.1.3. Bắt đầu tạo GUIDE


File  New  GUI
Để tạo GUIDE, bấm vào biểu tượng GUI trên thanh menu MATLAB, hộp
thoại sau sẽ xuất hiện

Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật
9/3/2019

Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng
Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật

• Từ hộp thoại Quick Start, người dùng có thể:


• Tạo GUI mới từ một template GUIDE có sẵn và chỉnh sửa lại cho phù 10.1.4. Layout Editor
hợp mục đích. Khi người dùng tạo ra một giao diện (GUI) mới, nó sẽ được hiển thị trên
• Mở một GUI đã có. một vùng gọi là Layout Editor, hay là bảng điều khiển của tất cả các
công cụ để tạo GUI.
Từ bảng đối tượng,
người dùng có thể
tạo các đối tượng
như push buttons,
pop-up menus, axes
Layout Area
… là các biểu tượng
ở bên trái Layout
Editor

Component Palette

Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật

Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng
Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật

7.1.6. Các đối tượng trong Component Pallete


10.1.5. Khởi động phần thiết kế giao diện GUI (Layout Editor)
Để hiển thị tên của các đối tượng trong bảng đối tượng, chọn
Preferences từ menu File, đánh dấu check vào ô cạnh dòng Show
Cần chú ý các biểu tượng names in component palette và click OK
quan trọng sau:
• Component Pallete:
bảng chứa các đối tượng
• Menu editor: công cụ tạo
menu cho GUI
• M-file editor: lập trình
code cho GUI
• Alignment Tool: dùng để
canh chỉnh các đối tượng
ngay hàng thẳng lối
• Undo, Redo: quay trở lại
thao tác trước
• Run: dùng để chạy
chương trình GUI

Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật

Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng
Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật

• Push Button: push button sẽ thực thi một đoạn code khi được click vào. • Radio Button: radio button có chức năng tương tự như check box, sẽ thực
Khi nhấn vào push button, nó sẽ bị chìm xuống và khi bỏ ra nó sẽ nổi lên thi một hành động khi nó được đánh dấu (check) hay bỏ dấu (uncheck).
và phần callback của nó sẽ được thực thi. Radio Button được sử dụng để bật tắt một số chức năng độc lập của
• Toggle Button: toggle button sẽ thực hiện một hành động khi nó được bật chương trình, tức là có thể lựa chọn nhiều trường hợp một lúc. Nhưng radio
lên hay tắt đi. Khi nhấn vào toggle button, nó sẽ bị chìm xuống, tức là nó button khác check box ở chổ là người dùng có thể tạo một group radio
đang ở trạng thái “on”, thực thi một đoạn code nào đó ở trạng thái on. button bằng cách dùng Button Group và chỉ có thể check một radio button
Khác với push button, toggle button sẽ giữa nguyên trạng thái “on” khi di trong group đó, còn những nút còn lại là uncheck, tức là chỉ có thể chọn một
chuyển chuột ra chỗ khác. Người dùng phải click chuột một lần nữa thì nó trong nhiều trường hợp
mới nổi lên, và trở về trạng thái off và sẽ thực thi một hành động nào đó ở • Edit Text: edit text cho phép người dùng nhập vào một chuỗi ký tự. Bằng
trạng thái “off”. một số đoạn code, người dùng có thể sử dụng các chuỗi ký tự này để tác
• Check Box: check box sẽ thực thi một hành động khi nó được đánh dấu động vào chương trình, thay đổi một số trạng thái …
(check) hay bỏ dấu (uncheck). Check box được sử dụng để bật tắt một số • Static Text: static text cho phép người dùng nhập vào một chuỗi ký tự,
chức năng độc lập của chương trình, tức là có thể lựa chọn nhiều trường nhưng chuỗi kỹ tự này không tác động vào hoạt động của chương trình. Do
hợp một lúc. đó, static text được dùng để chú thích hay hướng dẫn chức năng một đối
• Slider: slider cho phép thay đổi giá trị số khi di chuyển con trượt. Vị trí của tượng nào đó trong GUI.
con trượt trên slider (tức là nó đang cách vị trí đầu và cuối một khoảng • List box: list box thể hiện một danh sách các lựa chọn và người dùng có thể
cách bao nhiêu, bằng bao nhiêu % đối với độ dài slider) sẽ tác động đến chọn một hay nhiều lựa chọn tại một thời điểm.
giá trị số đi kèm với slider
Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật
9/3/2019

Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng
Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật

• Pop-Up Menu: pop-up menu thể hiện một danh sách các lựa chọn khi
người dùng click vào mũi tên và người dùng chỉ có thể chọn một lựa chọn • Nếu kéo đối
tại một thời điểm. tượng push
• Axes: axes cho phép người dùng vẽ đồ thị hay các hình ảnh lên nó. button vào layout
• Panel: panel dùng để nhóm một số đối tượng trong GUI. Panel làm giao area, nó sẽ xuất
diện rõ ràng hơn. Người dùng có thể đặt tiêu đề cho panel hay chỉnh sửa hiện như sau
hình dạng đường biên của panel. Khi nhiều đối tượng được đặt vào
• Người dùng có
panel (nhóm một đối tượng), khi di chuyển panel, các đối tượng di
thể sử dụng
chuyển theo mà vẫn không bị xáo trộn vị trí trong panel.
Layout Editor để
• Button Group: button group dùng đề nhóm các radio button lại. Khi đó,
gán các tính chất
chỉ có thể check một radio button trong group đó, còn những nút còn lại là
cơ bản cho các
uncheck, tức là chỉ có thể bật một radio button ở trạng thái “on” tại một
đối tượng trong
thời điểm.
GUI
• Table: table cho phép người dùng thể hiện các kết quả thu được dưới
dạng bảng số liệu

Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật

Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng
Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật

Đây là chuỗi mặc


định ban đầu trong
Push Button hay
cũng là tên của đối
tượng

Kiểu của đối


tượng. Ở đây là
Push Button
Để sửa lại chuỗi
trong Edit Text, chọn
Tên Callback của đối
Property Inspector.
tượng hay chính là
Tất cả các tính chất
dòng function mặc
của đối tượng như
định của đối tượng.
màu sắc, kích thước,
Khi đối tượng được
tên chuỗi (string),
tương tác, các dòng
callback,… sẽ được
code ở dưới Callback
chỉnh sửa trong đây
của đối tượng trong
M-file sẽ thực thi

Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật

Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng
Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật

Xuất hiện hộp thoại yêu cầu lưu giao diện vừa tạo lại

Để xem hay đưa code vào


Callback của đối tượng
trong M-file, ta chọn như sau

Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật
9/3/2019

Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng
Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật

Ta chọn thư mục để lưu giao diện vừa tạo với tên là giaodien4 Sau khi lưu lại, hai file là giaodien4.fig và giaodien4.m sẽ xuất hiện trong thư mục
vừa lưu. Đồng thời, file giaodien4.m cũng được Matlab tự động mở ra.

Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật

Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng
Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật

10.1.7. Chạy chương trình giao diện (GUI)


Để chạy một GUI, chọn Run từ menu Tools, hay chọn biểu tượng mũi
tên run màu xanh lá cây trên toolbar. Ví dụ khi người dùng chạy một
GUI with Axes and Menu được tạo sẵn, nó sẽ xuất hiện như sau
M-file của chương trình sẽ
được mở ra và đây là phần Chú ý, nếu người dùng lần đầu
Callback có tên là tiên chạy một GUI nhưng chưa
pushbutton1 của đối tượng lưu lại, GUIDE sẽ hỏi người
Push Button dùng có muốn lưu figure và M-
files của GUI đó không? Nếu
chọn Yes, GUIDE sẽ hiển thị
hộp thoại Save as. Sau khi đã
lưu lại, GUIDE sẽ chạy GUI và
mở M-files của GUI đó trong
phần text editor.

Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật

Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng
Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật

M-file của giao diện sẽ xuất hiện khi ta lưu lại


• GUI sẽ được lưu trữ thành hai file:
• FIG file sẽ lưu trữ hình ảnh phần giao diện với các đối tượng như
push buttons, menus, axes…
• M file sẽ lưu trữ các đoạn code để điều khiển hoạt động của GUI
• Hai file trên sẽ tương ứng với việc thiết kế và lập trình GUI. Khi người
dùng thiết kế GUI trong phần Layout Editor, công việc sẽ được lưu trữ
trong FIG file.
• Khi người dùng lập trình GUI, công việc sẽ được lưu trong M file.

Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật
9/3/2019

Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng
Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật

10.2. Lập trình cho các đối


tượng trong GUIDE

Lưu FIG-file lại và khi đó M-file sẽ sinh ra Callback của đối tượng push button
vừa tạo và thay đổi các tính chất nếu được chỉnh sửa. Nếu thêm các đoạn code
dưới đây thì khi push button hoạt động, đoạn code sẽ được thực thi.

Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật 26

Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng
Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật

10.2.1. Giới thiệu 10.2.2. Cấu trúc handles trong Matlab GUI
• Sau khi đã thiết kế xong phần bề mặt của giao diện, người dùng có thể
lập trình M-file của GUI bằng cách sử dụng M-file editor. GUIDE sẽ tự Trong Matlab GUI, có thể dùng cấu trúc handles để chia sẻ dữ liệu giữa
động sinh ra M-file khi người dùng lần đầu tiên chạy GUI. Vậy thì M-file các hàm callback của các đối tượng (tương tự như biến toàn cục). Có thể
của GUI sẽ có tác dụng: định nghĩa và gọi cấu trúc handles ở bất kỳ hàm callback nào trong GUI.
o Khởi tạo GUI Cách dùng:
o Chứa các đoạn code để thực thi các nhiệm vụ nhất định khi GUI xuất 1.Chọn tên cho cấu trúc handles mình muốn chia sẻ dữ liệu với mọi
hiện trên màn hình. Chẳng hạn như hiển thị dữ liệu hay hình vẽ. callback. (vd: handles.var1)
o Chứa đựng các hàm callback, sẽ hoạt động mỗi lần người dùng click 2.Gán giá trị cho cấu trúc handles đó. (tương tự như dùng biến)
vào một đối tượng của GUI (vd: handles.var1 = x)
• Khi mới xuất hiện, mỗi callback sẽ chứa một dòng function mặc định. 3.Lưu cấu trúc handles bằng cách dùng hàm guidata
Người dùng sẽ dùng M-file editor để thêm các đoạn code dưới dòng guidata(hObject, handles)
fuction mặc định này để đối tượng có thể hoạt động theo ý muốn. Để
4.Gọi lại var1 ở một callback khác:
mở M-file:
y = handles.var1

Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật

Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng
Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật

10.2.3. Push button 10.2.4. Edit_text

• Edit Text sẽ cho


người dùng nhập các
thông số của bài toán
dưới dạng chuỗi
• Trong Edit Text, có
Ý nghĩa của đoạn code khi thêm dưới function pushbutton1 là khi ta bấm push button thể để trống hoặc để
có callback là pushbutton1, biến a được gán giá trị 3, biến b được gán giá trị 2, tính c chuỗi ban đầu cũng
từ a và b, rồi hiển thị c trên command window. được

Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật
9/3/2019

Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng
Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật

Sẽ xuất hiện bảng này và ta sửa tại đây Ta đã sửa lại chuỗi ban đầu của Edit Text
Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật

Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng
Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật

Để minh họa cách thức hoạt động của Edit Text và sự tương tác giữa các đối tượng,
function pushbutton1_Callback(hObject, eventdata, handles)
ta tiến hành xây dựng một giao diện gồm một Push Button và hai Edit Text.
% hObject handle to pushbutton1 (see GCBO)
Nhập một số a vào edit_1, bấm pushbutton_1, edit_2 sẽ hiển thị giá trị a*2
% eventdata reserved - to be defined in a future version of
MATLAB
% handles structure with handles and user data (see
GUIDATA)
a=str2double(get(handles.edit1,'string'));
b=a*2;
set(handles.edit2,'string',num2str(b));
Phải có handles.

Lấy chuỗi trong edit_1 có callback tên là edit1


Chuyển từ chuỗi sang dạng số
Gán vào biến a

Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật

Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng
Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật

10.2.5. Static text


Chú ý: để hiển thị một chuỗi trong
edit text, sử dụng lệnh set Nếu không phải là chuỗi thì
phải dùng lệnh num2str để
chuyển thành chuỗi trước
set(handles. edit_text,'string', num2str(khong phai la chuoi);
set(handles. edit_text,'string',‘chuoi can dua vao'); Chọn các
guidata(hObject,handles); Static Text để
Nếu là dạng symbolic thì
phải dùng lệnh char để chú thích các
chuyển thành chuỗi trước thông số sẽ
nhập vào Edit
Text. Làm vậy
để giao diện
Phải có dòng này đứng dưới cùng thì các biến toàn cục handles. dễ sử dụng
mới được cập nhật trên toàn chương trình

Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật
9/3/2019

Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng
Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật

10.2.6. Panel Tạo một panel và đổi tên là nhóm 1 Lấy từng đối tượng bỏ vào panel để tạo thành một nhóm đối tượng là nhóm 1.
Điều này giúp giao diện trở nên gọn gàng và dễ sắp xếp.

Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật

Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng
Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật

10.2.7. Axis function pushbutton1_Callback(hObject, eventdata, handles)


% hObject handle to pushbutton1 (see GCBO)
• Tạo một giao diện gồm các đối tượng pushbutton_1, pushbutton_2, axes1, % eventdata reserved - to be defined in a future version of MATLAB
axes2. % handles structure with handles and user data (see GUIDATA)
x=-pi:0.1:pi; • Sau khi file.m
• Bấm pushbutton_1, đồ thị y=sin(x) được vẽ trên axes1. y=sin(x); được tạo, ta thêm
• Bấm pushbutton_2, đồ thị y=cos(x) được vẽ trên axes2. axes(handles.axes1); các dòng code
plot(x,y);
dưới callback của
% --- Executes on button press in pushbutton2. pushbutton1 và
function pushbutton2_Callback(hObject, eventdata, handles) pushbutton2 như
% hObject handle to pushbutton2 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
sau
% handles structure with handles and user data (see GUIDATA)
x=-pi:0.1:pi;
y=cos(x);
axes(handles.axes2);
plot(x,y);

Thiết lập axes2 là hệ trục tọa độ


hiện hành. Tức là từ lúc này, tất cả
đồ thị sẽ được vẽ trên axes2

Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật

Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng
Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật

10.2.8. Toggle button % --- Executes on button press in togglebutton1.


function togglebutton1_Callback(hObject, eventdata, handles)
Thêm một đối tượng Toggle button vào giao diện % hObject handle to togglebutton1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Hint: get(hObject,'Value') returns toggle state of togglebutton1
if get(handles.togglebutton,'value')==1
set(handles.togglebutton,'string','duoc ve','background','green');
else
set(handles.togglebutton,'string','ko duoc ve','background','yellow'); Thêm code
end

Thiết lập tính chất của


togglebutton1, khi chìm có Nút togglebutton1 này là
màu xanh và hiển thị chuỗi dạng Toggle Button, khi
“duoc ve”, còn khi nổi có “on” (tức là khi chìm) sẽ có
màu vàng và hiển thị chuỗi giá trị = 1
“ko duoc ve”. Khi “off” (tức là khi nổi) sẽ
có giá trị = 0.

Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật
9/3/2019

Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng
Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật

function pushbutton1_Callback(hObject, eventdata, handles) 10.2.9. Table


% hObject handle to pushbutton1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA) Để hiểu cách thức
if get(handles.togglebutton1,'value')==1 hoạt động của đối
x=-pi:0.1:pi; tượng Table, xây
y=sin(x); dựng giao diện như
axes(handles.axes1); sau
plot(x,y); • Tạo một Push
end
Button, một Edit
% --- Executes on button press in pushbutton2. Text, một Table.
function pushbutton2_Callback(hObject, eventdata, handles) • Nhập một giá trị a
% hObject handle to pushbutton2 (see GCBO) vào Edit Text.
% eventdata reserved - to be defined in a future version of MATLAB • Cột 1 của Table sẽ
% handles structure with handles and user data (see GUIDATA) liệt kê các giá trị từ
x=-pi:0.1:pi; (1->10)*a.
y=cos(x);
• Cột 2 của Table sẽ
axes(handles.axes2);
plot(x,y); Tương tác giữa
togglebutton1 và liệt kê các giá trị từ
pushbutton1: Nếu togglebutton1 đang ở trạng (1->10)*2*a.
thái “on” (tức là khi chìm) sẽ có giá trị = 1, thì
pushbutton1 mới có thể hoạt động.

Đối tượng table này có Tag là uitable1


Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật

Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng
Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật

7.2.10. Slider
% --- Executes on button press in pushbutton1.
function pushbutton1_Callback(hObject, eventdata, handles)
% hObject handle to pushbutton1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
a=str2double(get(handles.edit1,'string'));
x=1:1:10; Lấy chuyển vị của hai
du_lieu = [a*x' 2*a*x']; mảng handles.t1 và
ten_cot = {'nhan voi a','nhan voi 2a'}; handles.xt1 rồi gán hai
set(handles.uitable1,'ColumnName',ten_cot,'data',du_lieu); mảng này vô biến data

Đặt tên cho hai cột của bảng


lần lượt là t và x(t) rồi gán
vào biến cnames

Gán tên cột trong biến cnames và các giá trị


trong biến data vào đối tượng bảng uitable1.

Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật

Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng
Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật

function slider1_Callback(hObject, eventdata, handles)


10.2.10. Check box
% hObject handle to slider1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)

% Hints: get(hObject,'Value') returns position of slider


% get(hObject,'Min') and get(hObject,'Max') to determine range of
slider Lấy giá trị của checkbox1 và gán vào
biến handles.val1.
a=get(hObject,'Value'); % lay gia tri tuong ung voi vi tri hien tai cua
thanh truot
x=-10:1:10;
y=a*x.^2;
plot(x,y);
axis([-10 10 0 1000]);

Check box khi được check sẽ có Lấy giá trị của checkbox2 và gán vào
giá trị bằng 1 biến handles.val2.

Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật
9/3/2019

Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng
Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật

10.2.11. Radio button

Tạo hai đối tượng


radio button và
thay đổi tên Tạo đối tượng Button Group và đổi tên
Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật

Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng
Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật

Kéo hai đối tượng Radio Button và thả vào đối tượng Button Group (nhóm lại).
Khi đã nhóm hai radio button vào một button group thì chỉ có thể check một lựa
Mở View Callback của đối tượng Button Group và chọn dòng như trong hình
chọn duy nhất
Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật

Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng
Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật

Trong M-file sẽ xuất hiện dòng function mới

Thêm code vào đây để đối


tượng uipanel2 tác động vào hai
đối tượng radio button vừa
nhóm lại

Đối tượng Radio Button này có Tag là radiobutton1

Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật
9/3/2019

Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng
Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật

Thêm đoạn code sau

Nếu radiobutton1 được check thì handles.luccan=1

Nếu radiobutton2 được check thì handles.luccan=0


Đối tượng Radio Button này có Tag là radiobutton2
Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật

Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng
Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật

10.2.12. Popup menu 10.2.13. Listbox


function popupmenu1_Callback(hObject, eventdata, handles) function pushbutton2_Callback(hObject, eventdata, handles)
% hObject handle to popupmenu1 (see GCBO) % hObject handle to pushbutton2 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB % eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA) % handles structure with handles and user data (see GUIDATA)
handles.dong1=[];
% Hints: contents = cellstr(get(hObject,'String')) returns popupmenu1 contents handles.dong1{1}=sprintf('elem');
as cell array handles.dong1{2}=sprintf('%d%24d%40d',1,5);
% contents{get(hObject,'Value')} returns selected item from popupmenu1 set(handles.listbox1,'string',handles.dong1);
val = get(hObject,'Value');
switch val
case 1
a =2
case 2
a =3
otherwise
a =0
end

Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật

Đại học Quốc gia Thành phố Hồ Chí Minh Khoa Khoa học ứng dụng
Trường đại học Bách Khoa Bộ môn Cơ kỹ thuật

10.2.14. Biến toàn cục trong GUI


GUI 1

GUI 2

Matlab® – Matrix Laboratory Lập trình tính toán Cơ kỹ thuật

You might also like