You are on page 1of 42

GIỚI THIỆU MÔN HỌC

Giảng viên:
Họ tên:Đinh Trần Hiệp
Email: tranhiep.dinh@vnu.edu.vn

Thời lượng môn học: 3 tín chỉ

Tài liệu môn học:


- Matlab và ứng dụng trong cơ kỹ thuật, Đặng Thế Ba, Đinh Trần
Hiệp
- MATLAB a practical introduction to programming and problem
solving, Stormy Attaway

Đánh giá môn học:


Giữa kỳ: 40%
Cuối kỳ: 60%
BẮT ĐẦU
VỚI MATLAB
• Một số ứng dụng đơn giản của MATLAB
• Các cửa sổ chính của MATLAB
• Làm việc với cửa sổ Command
• Các phép toán cơ bản
• Các lệnh format hiển thị
• Một số hàm có sẵn đơn giản
• Làm việc với biến
• Quy tắc đặt tên biến
• Các biến có sẵn
• Các lệnh quản lý biến
• Script file (m-file)
• Ví dụ
MỘT SỐ ỨNG DỤNG ĐƠN GIẢN CỦA MATLAB

Tính toán với ma trận

A = rand(8,8)
b = det(A)

A=

0.2599 0.8693 0.4018 0.9027 0.7803 0.5752 0.6491 0.6868


0.8001 0.5797 0.0760 0.9448 0.3897 0.0598 0.7317 0.1835
0.4314 0.5499 0.2399 0.4909 0.2417 0.2348 0.6477 0.3685
0.9106 0.1450 0.1233 0.4893 0.4039 0.3532 0.4509 0.6256
0.1818 0.8530 0.1839 0.3377 0.0965 0.8212 0.5470 0.7802
0.2638 0.6221 0.2400 0.9001 0.1320 0.0154 0.2963 0.0811
0.1455 0.3510 0.4173 0.3692 0.9421 0.0430 0.7447 0.9294
0.1361 0.5132 0.0497 0.1112 0.9561 0.1690 0.1890 0.7757

b = -0.0117
MỘT SỐ ỨNG DỤNG ĐƠN GIẢN CỦA MATLAB

Vẽ hình 2D

x = -pi:pi/10:pi;
y = tan(sin(x)) - sin(tan(x));

h = plot(x,y,'--rs')
set(h,'linewidth',2,'markeredgecolor','k','markerfacecolor','g','markersize',10)

Đồ thị hàm số
2 y = tan(sinx) - sin(tanx)
1

-1

-2

-3
-4 -3 -2 -1 0 1 2 3 4
MỘT SỐ ỨNG DỤNG ĐƠN GIẢN CỦA MATLAB

Vẽ hình 3D

x = -3:.1:3; 6
y = -3:.1:3;
[X,Y] = meshgrid(x,y); 4
Z = X.^2./3 + 2.*sin(3.*Y);
surf(X,Y,Z) 2

-2
4
2 4
0 2
0
-2 -2
-4 -4

Đồ thị hàm số
z = x2/2 + 2sin(3y)
MỘT SỐ ỨNG DỤNG ĐƠN GIẢN CỦA MATLAB

Giải phương trình - Tìm nghiệm hàm số

160
y = @(x)exp(x/2) - sqrt(x) - 3;
140
x1 = fzero(y,[0,10])
120

100

80

60
x1 = 3.1236
40

20

-20
0 1 2 3 4 5 6 7 8 9 10
MỘT SỐ ỨNG DỤNG ĐƠN GIẢN CỦA MATLAB

Giải hệ phương trình

syms x y x0 = 3
eq1 = x*sqrt(12 - y) + sqrt(y*(12 - x^2)) - 12; y0 = 3
eq2 = x^3 - 8*x - 1 - 2*sqrt(y-2);
[x0,y0] = solve(eq1,eq2)
MỘT SỐ ỨNG DỤNG ĐƠN GIẢN CỦA MATLAB

Tìm giá trị nhỏ nhất, lớn nhất của hàm số

sin(x)/(x6+1)

f = @(x) sin(x)./(x.^6 + 1); 0.6


ezplot(f,-2,2)
fmin = fminbnd(f,-2,2) 0.4

0.2

fmin = -0.7344
0

-0.2

-0.4

-0.6

-2 -1.5 -1 -0.5 0 0.5 1 1.5 2


x
MỘT SỐ ỨNG DỤNG ĐƠN GIẢN CỦA MATLAB

Tính tích phân không xác định

syms x b
f = sqrt(x^2 + b)
I4 = int(f,x)

I4 =
1/2*x*(x^2+b)^(1/2)
+ 1/2*b*log(x+(x^2+b)^(1/2))
MỘT SỐ ỨNG DỤNG ĐƠN GIẢN CỦA MATLAB

Tính tích phân xác định

f12 = @(x) sqrt(exp(x)-1);


I12 = quad(f12,0,log(2))

f13 = @(x) x.*sin(x)./(1+cos(x).*cos(x));


I13 = quad(f13,0,pi)

I12 = 0.4292

I13 = 2.4674
MỘT SỐ ỨNG DỤNG ĐƠN GIẢN CỦA MATLAB

Giải phương trình vi phân bậc 1

Tìm nghiệm tổng quát của phương trình vi phân sau

nghiem = dsolve('Dy = (x^4 - 2*y)/2/x','x') nghiem = 1/10*(x^5+10*C1)/x

Vẽ đồ thị nghiệm của phương trình vi phân sau trên đoạn [1,2], biết y(1) = 1/10
1.6

1.4

1.2

f = @(x,y) (x^4 - 2*y)/2/x; 1

y0 = 1/10; 0.8
[x,y] = ode45(f,[1:.01:2],y0)
plot(x,y) 0.6

0.4

0.2

0
1 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 2
MỘT SỐ ỨNG DỤNG ĐƠN GIẢN CỦA MATLAB

Giải phương trình vi phân bậc cao

Giải phương trình vi phân sau, vẽ đồ thị nghiệm với t trong khoảng [0,7]

nghiem = dsolve('D2y - 0.08*Dy + 0.6*t=0','y(0) = 2','Dy(0) = 3')


ezplot(nghiem,[0,7])
15/4 t2-9075/8 exp(2/25 t)+375/4 t+9091/8

nghiem = 15/4*t^2
10

8
- 9075/8*exp(2/25*t)
6
+ 375/4*t+9091/8
4

-2

-4

-6

-8

-10
0 1 2 3 4 5 6 7
t
MỘT SỐ ỨNG DỤNG ĐƠN GIẢN CỦA MATLAB

Giải phương trình vi phân bậc cao

Xét phương trình sau nhận hàm y(x) = sinx là nghiệm


y2 + (y’)2 + y’’ + sinx = 1
trên đoạn [0,2*pi], y(0) = 0, y’(0) = 1

1
function ptvp_baccao 0.8

0.6

[x,y] = ode45(@F,[0,2*pi],[0,1]); 0.4

plot(x,y(:,1)) 0.2

function dy = F(x,y) -0.2

dy(1) = y(2) ; -0.4

dy(2) = 1 - sin(x) - y(1)^2 - y(2)^2; -0.6

dy = dy'; -0.8

-1
0 1 2 3 4 5 6 7
MỘT SỐ ỨNG DỤNG ĐƠN GIẢN CỦA MATLAB

Lập trình giải bài toán

Viết chương trình giải phương trình bậc hai với hệ số a,b,c tùy ý nhập từ bàn phím

function [x1,x2] = ptb2(a,b,c) >> [x1,x2] = ptb2(1,-5,6)


d = b^2 - 4*a*c; Phuong trinh co 2 nghiem phan biet
if d > 0 x1 = 3
fprintf('Phuong trinh co 2 nghiem phan biet \n') x2 = 2
x1 = (-b + sqrt(d))/2/a;
x2 = (-b - sqrt(d))/2/a; >> [x1,x2] = ptb2(1,-2,1)
elseif d == 0 Phuong trinh co nghiem kep
fprintf('Phuong trinh co nghiem kep \n') x1 = 1
x1 = -b/2/a; x2 = 1
x2 = x1;
else >> [x1,x2] = ptb2(1,2,3)
x1 = NaN; Phuong trinh vo nghiem
x2 = NaN; x1 = NaN
fprintf('Phuong trinh vo nghiem \n') x2 = NaN
end
MỘT SỐ ỨNG DỤNG ĐƠN GIẢN CỦA MATLAB

Lập trình giải bài toán

n = input('Nhap n di em '); Viết chương trình tìm và hiển


kq = []; thị tất cả các số nguyên tố từ 1
for k = 2:n đến n, với n tùy ý nhập từ bàn
if kiemtra_nguyento(k)==1 phím
kq = [kq;k];
end
Nhap n di em 1000
end
Cac so nguyen to tim duoc la
disp('Cac so nguyen to tim duoc la')
2
disp(kq)
3
function y = kiemtra_nguyento(n) 5
y=1; 7
for k = 2:floor(sqrt(n)) 11
if rem(n,k) == 0 .....
y = 0; 977
break 983
end 991
end 997
CÁC CỬA SỔ CHÍNH CỦA MATLAB
CÁC CỬA SỔ CHÍNH CỦA MATLAB

Cửa sổ Command: Cửa số chính, nhập biến,


chạy chương trình
Cửa sổ Figure: Chứa kết quả của các
lệnh vẽ hình
Cửa sổ Editor: Tạo, chỉnh sửa và debug
m-file
Cửa sổ Help: Cung cấp phần Help
Cửa sổ Command History: Lưu trữ lịch sử câu lệnh
Cửa sổ Workspace: Cung cấp danh sách và
thông tin của các biến
hiện hành
Cửa sổ Current Folder: Hiển thị các m-file có
thể được thực thi
CÁC CỬA SỔ CHÍNH CỦA MATLAB

Cửa sổ figure
CÁC CỬA SỔ CHÍNH CỦA MATLAB

Cửa sổ Editor, dùng để soạn thảo các m-file và function file


CÁC CỬA SỔ CHÍNH CỦA MATLAB

Cửa sổ Help
LÀM VIỆC VỚI CỬA SỔ COMMAND

Cửa sổ Command, dùng để nhập và thực thi các câu lệnh

Để nhập một lệnh, cần đặt con trỏ


sau dấu >>
LÀM VIỆC VỚI CỬA SỔ COMMAND

- Kết thúc dòng lệnh bằng phím Enter


- Nhiều lệnh có thể được viết trong cùng một dòng. Khi đó các lệnh
được ngăn cách nhau bởi dấu phẩy (,)
- Có thể dùng các mũi tên lên xuống để gọi nhanh lại các lệnh
trước đó
- Nếu một câu lệnh quá dài, có thể xuống dòng bằng dấu ba chấm
(...)
- Nếu một lệnh kết thúc bằng dấu chấm phẩy (;) thì lệnh đó sẽ được
thực hiện nhưng không bất kỳ kết quả nào được hiển thị ra màn
hình
- Các ký hiệu % được dùng để tạo các ghi chú. MATLAB sẽ không thực
thi nội dung được đặt sau các dấu % trong dòng lệnh
- Lệnh clc dùng để làm trắng màn hình (lưu ý các kết quả đã thực
thi không bị xoa bỏ)
- Cửa sổ Command History là nơi lưu trữ các lệnh đã thực thi
CÁC PHÉP TOÁN CƠ BẢN

Phép toán Ký hiệu Ví dụ


Cộng + 5 + 3
Trừ - 5 - 3
Nhân * 5 * 3
Chia phải / 5/3
Chia trái \ 5\3 = 3/5
Lũy thừa ^ 5^3 = 53

Thứ tự ưu tiên:
Dấu ngoặc > Lũy thừa > Nhân, Chia > Cộng, Trừ
CÁC PHÉP TOÁN CƠ BẢN
>> 7 + 8/2 Lưu ý thứ tự thực hiện phép toán
ans = 11

>> (7 + 8)/2
ans = 7.5000

>> 27^(1/3) + 32^0.2 Lưu ý thứ tự thực hiện phép toán


ans = 5

>> 27^1/3 + 32^.2


ans = 11

>> 2*2... Lưu ý màu sắc dấu ...


- 1*4 + 5 (dấu ... có hiệu lực sẽ có màu xanh dương)
??? 2*2... Câu lệnh đúng cú pháp nếu trước dấu ba
| chấm có phím cách
Error: Unexpected MATLAB operator.

>> 2*2 ...


-1*4 + 5
ans = 5
CÁC LỆNH FORMAT HIỂN THỊ
Lưu ý rằng các lệnh Lệnh Mô tả Ví dụ
format chỉ có hiệu ứng Hiển thị 4 chữ số
hiển thị chứ không làm thập phân với các số
trong khoảng 0.001
thay đổi giá trị thực
đến 1000
của các biến
Hiển thị 15 chữ số
thập phân với các số
trong khoảng 0.001
đến 1000
Giai thừa của 10 với
4 chữ số thập phân
Giai thừa của 10 với
15 chữ số thập phân

Hiển thị kết quả tối


ưu với 5 chữ số
Hiển thị kết quả tối
ưu với 15 chữ số

Hiển thị 2 chữ số


thập phân
Bỏ đi 2 dòng trắng giữa các dòng lệnh, dòng kết quả

Thêm 2 dòng trắng giữa các dòng lệnh, dòng kết quả
MỘT SỐ HÀM CÓ SẴN ĐƠN GIẢN

>> sqrt(64) Đối số là một số


ans = 8

>> sqrt(50 + 14*3) Đối số là biểu thức


ans = 9.5917

>> sqrt(54 + 9*sqrt(100)) Đối số có chứa hàm số


ans = 12

>> (15 + 600/4)/sqrt(121) Biểu thức có chứa hàm số


ans = 15
MỘT SỐ HÀM CÓ SẴN ĐƠN GIẢN

Lệnh Mô tả Ví dụ

sqrt(x) Căn bậc 2

nthroot(x,n) Căn bậc n

exp(x) ex

abs(x) |x|

log(x) Logarit cơ số tự
nhiên (ln)

log10(x) Logarit cơ số 10

factorial(x) x!
MỘT SỐ HÀM CÓ SẴN ĐƠN GIẢN

Lệnh Mô tả Ví dụ

sin(x) sin(x), radian


sind(x) sin(x), độ

cos(x) cos(x), radian


cosd(x) cos(x), độ

tan(x) tan(x), radian


tand(x) tan(x), độ

cot(x) cotg(x), radian


cotd(x) cotg(x), độ
MỘT SỐ HÀM CÓ SẴN ĐƠN GIẢN

Lệnh Mô tả Ví dụ

round(x) làm tròn đến số


nguyên gần nhất

fix(x) làm tròn về 0

ceil(x) làm tròn lên

floor(x) làm tròn xuống

rem(x,y) phần dư khi


chia x cho y
= 1 nếu x > 0
sign(x)
= -1 nếu x < 0
= 0 nếu x = 0
LÀM VIỆC VỚI BIẾN

>> x = 15 x được gán bằng 15


x = 15

>> x = 3*x - 12 x được gán lại giá trị


x = 33

>> a = 12 a được gán bằng 12


a = 12

>> B = 4 B được gán bằng 4


B= 4

>> C = (a - B) *(a/B) C được gán bằng một


C = 24 biểu thức chứa a và B
LÀM VIỆC VỚI BIẾN

>> a = 12; a, B, C được gán giá trị, nhưng không


>> B = 4; được hiển thị do có dấu ; cuối dòng lệnh
>> C = (a - B) *(a/B);
>> C Giá trị của C được hiển thị bằng câu lệnh
C = 24 gọi C

>> a = 12, B = 4; C = (a - B) *(a/B) B không được hiển thị do có dấu ; ở


a = 12 cuối câu lệnh định nghĩa B
C = 24
LÀM VIỆC VỚI BIẾN

Khai báo lại biến: một biến có thể được khai báo lại giá trị
vào bất kỳ thời điểm nào

>> ABB = 72; ABB được gán bằng 72

>> ABB = 9; ABB được gán lại bằng 9

>> ABB Giá trị hiện tại của ABB được hiển thị (là 9)
ABB = 9
QUY TẮC ĐẶT TÊN BIẾN

- Tên biến phải bắt đầu bằng 1 chữ cái


- Tên biến dài nhất là 63 ký tự
- Tên biến có thể bao gồm chữ cái, con số và dấu gạch dưới
- Không cho phép khoảng trống giữa các ký tự trong tên biến
(ví dụ ‘chu vi’ là sai, có thể đặt là ‘chu_vi’)
- Tên biến không được bao gồm các dấu phẩy, chấm phẩy...
- MATLAB phân biệt chữ hoa và chữ thường trong tên biến: AA,
Aa, aA, aa là các biến khác nhau
- Nên tránh đặt tên biến trùng với các hàm có sẵn của MATLAB
(trong trường hợp đặt tên trùng đó thì các hàm này sẽ
không sử dụng được nữa)
- 20 từ không thể dùng để đặt tên biến (các từ này là từ
khóa của các cấu trúc lệnh):
CÁC BIẾN CÓ SẴN

ans Biến này có giá trị bằng với giá trị của biểu thức
cuối cùng không được gán cho một biến cụ thể nào

Số pi
pi

Khoảng cách bé nhất giữa hai số trong MATLAB, bằng


eps 2-52 (xấp xỉ 2.2204e-16

Vô cùng
inf

Căn của -1
i,j

Not-a-number, ví dụ 0/0
NaN
CÁC LỆNH QUẢN LÝ BIẾN

clear Xóa toàn bộ các biến hiện có

clear x y z Chỉ xóa các biến x,y,z

who Liệt kê danh sách các biến

whos Liệt kê danh sách và thông tin các


biến (giá trị và loại biến)
SCRIPT FILE (m - file)

- Là tập hợp nhiều câu lệnh, định dạng tệp là .m nên còn gọi là m-file
- Khi thực thi một m-file thì MATLAB sẽ thực hiện tất cả các lệnh có trong m-file
đó
- Sử dụng m-file tạo sự thuận tiên cho việc chỉnh sửa lặp lại nhiều lần
- Có thể tạo m-file bằng bất kỳ phần mềm xử lý văn bản nào, rồi copy và paste
lại vào MATLAB. Ngược lại, có thể mở một m-file bằng một phần mềm xử lý
văn bản bất kỳ
- Quy tắc đặt tên m-file cũng giống với quy tắc đặt tên các biến
SCRIPT FILE (m - file)
Phím Run

Gán giá trị cho


3 tham số Các dòng
ghi chú

Tính toán hai nghiệm


SCRIPT FILE (m - file)
Một m-file chỉ có thể được thực thi nếu nó đang nằm trong Current Folder của MATLAB

Nếu một m-file nằm ngoài Current Folder được gọi, thì sẽ xuất hiện cửa sổ sau, đề nghị
thay đổi Current Folder
VÍ DỤ 1
x tanx  sinx
Kiểm tra đẳng thức lượng giác: cos 2 
2 2tanx

bằng cách thay thế giá trị x 
5

>> x = pi/5;

>> VT = cos(x/2)^2
VT = 0.9045

>> VP = (tan(x) + sin(x))/(2*tan(x))


VP = 0.9045
VÍ DỤ 2

Một vật có nhiệt độ ban đầu T0 tại thời điểm t = 0 được đặt vào trong bình chứa
có nhiệt độ TS sẽ có nhiệt độ biến đổi theo thời gian theo công thức

T  TS  T0  TS  e  kt

trong đó k là hằng số cho trước, thời gian tính bằng giờ.


Cho vật có nhiệt độ đầu là 1200F, đặt vào bình chứa có nhiệt độ 380F. Hỏi nhiệt
độ của vật đó sau 3 giờ, cho k = 0.45

>> Ts = 38; T0 = 120; k = .45; t = 3;

>> T = round(Ts + (T0 - Ts)*exp(-k*t))


T = 59
VÍ DỤ 3
nt
 r
Cho công thức tính tiền lãi gửi tiết kiệm ngân hàng: B  P 1  
 n
trong đó P là tiền gốc, B là tiền gốc + lãi, r là lãi suất tính theo thời hạn 1 năm, t là
thời gian tính theo đơn vị năm, và n là số lần đáo hạn trong 1 năm.
Nếu gửi theo thời hạn 1 năm thì công thức sẽ là: B  P 1  r 
t

Với P = 5000 gửi vào tài khoản 1 có thời hạn 1 năm trong 17 năm, lãi suất
0.085/năm
Cũng với P = 5000 gửi vào tài khoản 2 có thời hạn 1 tháng, cũng với lãi suất
0.085/năm
Tính số tháng cần gửi theo tài khoản 2 để có được giá trị B giống như tài khoản 1.
P = 5000; r = .085; t1 = 17; n = 12; >> format short g
B = P*(1 + r)^t1 B= 20011
t2 = log(B/P)/(n*log(1 + r/n)) t2 = 16.374
nam = 16
nam = fix(t2) thang = 5
thang = ceil((t2 - nam)*12)

You might also like