TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI
VIỆN CƠ KHÍ – BỘ MÔN CƠ HỌC ỨNG DỤNG
TS. Nguyễn Quang Hoàng
C
MATLAB à SIMULINK
Hà Nội 2010
ii
Lời nói đầu
Hệ chương trình MATLAB là một công cụ xử lý số các hệ kỹ thuật từ đơn giản đến
phức tạp. Chương trình này phù hợp với việc phân tích và tổng hợp nhanh các quá
trình động lực đặc biệt trong nghiên cứu và phát triển, ngày nay Matlab đang được
sử dụng nhiều trong công nghiệp. Matlab ngày càng có vai trò trong các trường đại
học và cao
228 trang |
Chia sẻ: Tài Huệ | Ngày: 16/02/2024 | Lượt xem: 397 | Lượt tải: 1
Tóm tắt tài liệu Giáo trình Cơ sở MATLAB và SIMULINK - Nguyễn Quang Hoàng, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
đẳng kỹ thuật. Matlab cĩ thể trợ giúp đắc lực các sinh viên và kỹ sư
trong việc giải quyết các vấn đề tính tốn số các bài tốn kỹ thuật. Đặc biệt đối với
sinh viên và kỹ sư ngành Cơ khí, điện, điện tử, cơ điện tử Matlab là một cơng cụ
khơng thể thiếu.
Mục đích c a cuốn sách là cung cấp cơ s Matlab và Simulink cho các sinh viên kỹ
thuật từ n m thứ hai sau khi đ cĩ các kiến thức cơ bản về tốn, vật lý, cơ học kỹ
thuật cũng như kỹ thuật lập trình. Ngồi ra nếu cĩ được thêm các kiến thức về kỹ
thuật điều khiển, xử lý dữ liệu số người đọc cĩ thể m rộng thêm được các ứng
dụng c a Matlab và Simulink.
Nội dung c a cuốn sách này được phân bố trong chín chương. Các chương từ một
đến bảy trình bày việc sử dụng các lệnh c a Matlab cho các bài tốn cơ bản như
tính tốn trên v ctơ, ma trận, đ họa, giải phương trình vi phân thường, và một số
ph p biến đổi tích phân như ouri r, Laplace. Chương giới thiệu về ph n
imulink – một cơng cụ sử dụng các khối hàm để mơ ph ng hệ. Trong mỗi
chương, sau ph n giới thiệu cách sử dụng các lệnh c a Matlab đều cĩ những ví dụ
cụ thể và ph n bài tập thực hành để người học cĩ thể tự thực hành. Trong chương
một số bài tốn kỹ thuật thường gặp trong l nh vực cơ học và kỹ thuật được trình
bày.
Cuốn sách này được biên soạn trên cơ s bài giảng c a tác giả cho sinh viên ngành
Cơ điện tử Trường Đại học Kinh doanh và Cơng nghệ Hà nội. Tuy nhiên, cuốn
sách này khơng chỉ là tài liệu học tập cho sinh viên các trường đại học định hướng
ứng dụng mà cịn là tài liệu học tập cho sinh viên các trường đại học và cao đẳng
kỹ thuật. Cuốn sách cũng là tài liệu bổ ích cho các kỹ sư trong cơng việc chuyên
mơn c a họ.
Trong quá trình biên soạn chúng tơi đ nhận được sự trợ giúp quý báu c a nhiều
đ ng nghiệp. Chúng tơi xin cảm ơn G .TSKH. Nguyễn V n Khang và G .T .
Nguyễn hong Điền đ xem giúp bản thảo và cĩ nhiều đề nghị cải tiến quý báu.
iii
Mặc dù đ cố gắng nhiều, nhưng chắc chắn khơng tránh kh i các sai sĩt, tác giả
mong muốn nhận được sự gĩp ý c a các bạn đ ng nghiệp và c a các m sinh viên
để cĩ điều kiện sửa chữa, hồn thiện hơn trong các l n tái bản sau.
Mọi ý kiến đĩng gĩp xin gửi về địa chỉ c a tác giả:
T . Nguyễn uang Hồng, Bộ mơn Cơ học ứng dụng,
Trường Đại học Bách khoa Hà Nội.
E-mail: hoangnq-dam@mail.hut.edu.vn, hoặc T l. 04.3 6 046 .
10 ăm 2010
Tác giả
iv
M
Lời nĩi đ u iii
1.1 Matlab là gì? 1
1.2 Giao diện người sử dụng 2
1.3 Các ph p tính số học cơ bản 3
1.4 Tốn tử gán 4
1.5 Các định ngh a tốn học cơ bản 8
1.6 ố phức 11
1.7 Xử lý lỗi khi gõ lệnh 12
1.8 Kết thúc phiên làm việc với Matlab 12
1.9 Bài tập thực hành 13
,
2.1 V ctơ và các ph p tính trên v ctơ 15
Nhập v ctơ 15
Các ph p tính cộng và trừ hai v cto cùng cỡ 16
Tạo v ctơ cỡ lớn từ các biến sẵn cĩ 17
Tạo v ctơ cĩ các ph n tử cách đều 18
Các đặc trưng c a v ctơ 19
Tích vơ hướng và tích cĩ hướng hai v ctơ 21
Tham chiếu đến các ph n tử v ctơ 22
Một số hàm định sẵn cho v ctơ 23
2.2 Biểu diễn một đa thức b ng v ctơ 23
Nhập đa thức 23
Các ph p tính trên đa thức 24
h p nhân đa thức 24
Phép chia đa thức 25
h p cộng và trừ đa thức 25
Khơng điểm hay nghiệm c a phương trình đa thức 26
Xây dựng đa thức từ các khơng điểm cho trước 26
Giá trị c a đa thức tại một điểm 26
Đạo hàm đa thức 27
2.3 Ma trận và các ph p tính cơ bản trên ma trận 28
Nhập ma trận 28
v
Nhân ma trận với một số, ph p cộng và trừ hai ma trận 28
Chuyển vị ma trận 29
h p nhân ma trận 29
Một số ph p tính cơ bản khác 30
Các ma trận đặc biệt 31
Tham chiếu đến các ph n tử c a ma trận 33
Ma trận khối 35
h p nhân mảng hai ma trận cùng cỡ 36
Tính định thức và giải hệ phương trình đại số tuyến tính 37
Tìm hạng c a ma trận 39
Tìm ma trận nghịch đảo và tựa nghịch đảo 41
Trị riêng và v ctơ riêng c a ma trận vuơng 46
hân tích ma trận vuơng A thành tích các ma trận 47
2.4 Bài tập thực hành 51
3.1 Các kiểu dữ liệu 53
Kiểu v ctơ và ma trận 53
Chuỗi ký tự (ký tự, xâu - string) 54
Kiểu ơ, mảng (C ll-Array) 54
Kiểu cấu trúc 54
3.2 oạn thảo Script file trong Matlab 56
Scripts 57
Các hàm, MATLAB - Function 60
3.3 Các vịng lặp và rẽ nhánh 62
Vịng lặp OR 62
Vịng lặp WHILE 63
Lệnh if, cấu trúc if - else - end 65
Cấu trúc switch-case 66
3.4 Các Mat-File 71
3.5 Bài tập thực hành 71
4 Đồ ọ
4.1 Đ họa 2D 73
Đặt màu và kiểu đường cho đ thị 76
Một số tùy chọn khi vẽ đ thị 2D 77
Vẽ nhiều đ thị trên cùng một hệ trục 79
vi
Thêm các chú thích 81
Các lệnh axis 82
Đặt giới hạn miền vẽ với lệnh axis 83
Lệnh ubplots 84
Vẽ các đ thị xếp ch ng và lệnh linspace 87
Đ thị th o tọa độ cực và Đ thị với thang chia Logarith 89
Đ thị c a dữ liệu rời rạc 92
Vẽ biểu đ với lệnh contour – vẽ đường đ ng mức 96
Thêm chú thích trên đ thị 101
Vẽ đ thị các hàm cĩ điểm khơng xác định 101
4.2 Các lệnh vẽ trong khơng gian – 3D 103
4.3 Bài tập thực hành 113
5 ị ĩ đ
5.1 Mịn hĩa b ng đa thức 115
5.2 Mịn hĩa b ng hàm e mũ 120
5.3 Nội suy đa thức 122
5.3 Bài tập thực hành 125
6 P â
6.1 Giải phương trình vi phân bậc nhất với od 23 và od 45 127
6.2 Giải các phương trình vi phân bậc hai 133
6.3 Bài tập thực hành 139
7 á ế đổ í â
7.1 h p biến đối Laplac 141
7.2 h p biến đổi Laplac ngược 143
7.3 p dụng Laplac giải phương trình vi phân 145
7.4 h p biến đổi ouri r 148
7.5 h p biến đổi ouri r ngược 151
7.6 h p biến đổi ouri r một tín hiệu rời rạc 151
7.7 h p biến đổi ouri r nhanh (FFT) 152
7.8 Bài tập thực hành 154
8 G ớ ệu ề S u k
8.1 Khái niệm về simulink 157
vii
8.2 Nguyên lý hoạt động và việc thực hành trong simulink 159
Kh i động simulink 159
Các khối trong simulink 160
8.3 Một số ví dụ đơn giản 164
Mơ hình hĩa một phương trình b ng sơ đ khối 164
Mơ ph ng một quá trình động học 166
Mơ hình hĩa một hệ động lực liên tục đơn giản 168
Mơ tả hệ dao động một bậc tự do 169
Mơ ph ng số tay máy một bậc tự do 171
8.4 Đơn giản sơ đ simulink 174
Đơn giản sơ đ simulink b ng khối cn 174
Đơn giản sơ đ simulink b ng khối subsyst m 175
Kết hợp simulink và script fil (m-file) 177
8.5 Xử lý kết quả mơ ph ng 184
8.6 Bài tập thực hành 185
g 9. G á k u
9.1 Bài tốn hệ thanh 189
Hệ thanh t nh định 189
Hệ thanh siêu t nh 191
9.2 Bài tốn uốn phẳng c a d m 193
9.3 Bài tốn qu đạo chuyển động c a viên đạn 199
9.4 Bài tốn bắn trúng đích 203
9.5 Bài tốn dao động 206
Con lắc đơn 206
Con lắc đơn dây tr o đàn h i 208
Con lắc k p 211
Dao động nh c a con lắc lliptic 213
Hệ dao động ba bậc tự do 214
9.6 hân tích động học cơ cấu 216
hân tích động học cơ cấu bốn khâu bản lề 218
9.7 Bài tốn động học ngược rơbốt 221
Tài liệu tham khảo 225
viii
Chương 1.
Mơi trư ng Matlab
1.1 Matlab là gì?
MATLAB đư c vi t t t t “MATrix LABoratory”, là m t cơng c tính tốn s và
mơ ph ng s , cơng c này đư c phát tri n d a trên các thư vi n hàm tính tốn s
vi t b ng ngơn ng l p trình FORTRAN. Matlab cĩ giao di n thân thi n v i ngư i
s d ng.
M t đ nh nghĩa khác: Matlab là m t ph n m m đa năng tính tốn s , th hi n các
s li u b ng hình nh tr c quan và là m t ngơn ng đa năng cung c p m t mơi
trư ng linh ho t cho vi c tính tốn k thu t.
Matlab bao g m nhi u cơng c đ :
- thu th p d li u (Data acquisition)
- phân tích và x lý d li u (Data analysis and exploration)
- hi n th hình nh tr c quan và x lý hình nh (Visualization and image
processing)
- t o m u và phát tri n thu t tốn (Algorithm prototyping and development)
- mơ hình hĩa và mơ ph ng (Modeling and simulation)
- l p trình và phát tri n ng d ng (Programming and application development).
Matlab cĩ th ch y trên h u h t các h máy tính: máy tính sách tay - Labtop, máy
tính cá nhân PC, đ n các h th ng siêu máy tính (super computer). Matlab đư c
đi u khi n b i các t p l nh, tác đ ng qua bàn phím trên c a s đi u khi n. Nĩ cũng
cho phép m t kh năng l p trình v i cú pháp thơng d ch l nh – cịn g i m-file. Các
l nh hay b l nh c a Matlab lên đ n con s hàng trăm và ngày càng đư c m r ng
nh các thư vi n tr giúp hay do ngư i s d ng t o ra.
Đ kh i đ ng Matlab trong mơi trư ng Windows b n ch c n nháy đúp chu t vào
bi u tư ng Matlab cĩ trên màn hình - Desktop.
Các l nh c a Matlab r t m nh và hi u qu , nĩ cho phép gi i các lo i bài tốn khác
nhau và đ c bi t khi x lý các d li u cĩ c u trúc ki u véctơ và ma tr n. Trong các
phiên b n m i, ngư i ta đã đưa vi c tính tốn ký t vào ph n m m Matlab.
1
1.2 Giao di n ngư i s d ng
Giao di n c a Matlab sau khi kích ho t đư c th hi n như trên hình 1-1 ho c m t
d ng tương t tùy theo l a ch n c a ngư i s d ng (b ng các l a ch n khác nhau
trong m c Desktop cho ta các d ng giao di n tương ng).
4
5
3
1
2
6
Hình 1-1. Cửa số giao diện của Matlab
Các ph n t chính c a giao di n này g m:
1. C a s l nh (Command Window).
2. C a s ghi l i các l nh đã th c hi n (Command History).
3. C a s cho bi t thư m c hi n th i (Current Directory) và danh sách các
bi n đang s d ng (Workspace).
4. Thanh ch đư ng d n c a thư m c hi n th i, cho phép ch n thư m c hi n
th i.
5. Thanh Shortcut.
6. Nút Start.
2
1.3 Các phép tính s h c cơ b n
Đ i v i ngư i m i b t đ u s d ng Matlab, trư c h t ta c n làm quen v i các phép
tính s h c (c ng, tr , nhân và chia: +, − , *, / ). V i hai s a và b trong Matlab ta
cĩ th th c hi n đư c các phép tính s h c như li t kê trong b ng dư i đây.
Phép tính Cách vi t tốn h c cách vi t trong Matlab
phép c ng c= a + b c= a + b
phép tr c= a − b c= a − b
phép nhân c= a ⋅ b c= a* b
phép chia c= a: b c= a/ b
phép chia ph i c= a: b c= a/ b
phép chia trái c= ba/ c= a\ b
lũy th a c= ab c = a^b
Ví d
>> a=3.5; b=7.5; % gan gia tri so cho hai bien a
>> a+b % phep cong hai so
ans =
11
>> a-b % phep tru hai so
ans =
-4
>> a*b % phep nhan hai so
ans =
26.2500
>> a/b % phep chia hai so, a:b (= phep chia phai)
ans =
0.4667
>> a\b % phep chia trai (hieu la b chia cho a, b/a)
ans =
2.1429
>> a^b % phep luy thua, a mu b
ans =
1.2037e+004
Chú ý r ng, m i dịng ch sau d u ‘%’ đ u đư c MATLAB b qua và đư c s
d ng đ di n gi i, bình lu n. Dịng l nh k t thúc v i d u ch m ph y ‘;’ s khơng
3
xu t k t qu ra, cịn dịng l nh khơng cĩ d u ‘;’ k t thúc (đ tr ng) s đưa k t qu
ra khi dịng l nh đư c th c hi n. M t dịng cĩ th đư c kéo dài b ng vi c đánh
‘’ vào cu i dịng và ti p t c câu l nh (phép tính) dịng k ti p.
Th t ưu tiên các phép tốn
Khi tính tốn m t bi u th c g m nhi u s h ng, nhi u phép tính thì th t ưu tiên
các tốn t r t quan tr ng.
Th t ưu tiên Tốn t
1 Ngo c đơn
2 Lũy th a
3 Nhân và chia, t trái qua ph i
4 C ng và tr , t trái qua ph i
Ví d
C n tính giá tr hàm
xxx2( 4− 5 3 + 1.5) + 5( x + 10)
f( x ) =
xx2( 2 + 2.5 x + 5) + 1.5( x + 10)
= =
t i x x0 nào đĩ, ch ng h n x 5 .
>> x=5;
>> tuso=x^2*(x^4-5*x^3+1.5)+5*(x+10);
>> mauso=x^2*(x^2+2.5*x+5)+1.5*(x+10);
>> f=tuso/mauso
f =
0.1037
1.4 Phép gán
Trong Matlab d u b ng “=” đư c s d ng cho phép gán. M c dù trong cách vi t
thơng thư ng ta hi u d u b ng th hi n m t phương trình, nhưng trong Matlab d u
b ng đư c đ nh nghĩa là phép gán. Đ phân bi t gi a hai cách th hi n ta xét ví d
sau. N u trong c a s l nh ta vi t
>> x+18=120
Matlab s báo l i v i dịng hi n th m u đ :
??? x+18=120
Error: The expression to the left of the equals sign is not a
valid target for an assignment.
4
Matlab khơng hi u cách b n vi t m t phương trình như trên gi y, mà nĩ ch cĩ th
th c hi n đư c các phép tính và gán giá tr tính đư c cho m t bi n nào đĩ. Ch ng
h n ta cĩ th gán giá tr c a phép tính 120-18 cho bi n x b ng cách vi t
>> x=120-18
M t cách vi t khác ta cĩ th s d ng phép gán cho m t phép tính l p trong chương
trình tính. T c là ta cĩ th vi t
>> x=x+12
Phép gán này ch h at đ ng đư c n u như trư c đĩ ta đã cĩ giá tr c a bi n x. Ví
d , chu i các phép tính sau đây đư c th c hi n
>> x=32^3
x =
32768
>> x=x+124
x =
32892
Đ s d ng m t bi n trong v ph i c a phép gán, chúng ta ph i gán m t giá tr cho
bi n đĩ trư c khi s d ng. Khi vi t các dịng l nh sau Matlab s báo l i
>> x= 124
x =
124
>> t=x+y
??? Undefined function or variable 'y'.
Lý do c a l i trên là do bi n y chưa đư c gán giá tr trư c khi th c hi n c ng v i
bi n x. Trong khi đĩ các dịng l nh sau đư c th c hi n đúng.
>> x=124
x = 124
>> y=126
y = 126
>> t=x+y
t = 250
Trong nhi u phép gán (cĩ th là phép tính trung gian) n u khơng mu n k t qu
hi n ra dư i phép gán thì ta s d ng d u ch m ph y (;) vào cu i bi u th c. Như th
trong c a s l nh ta khơng b lãng phí khơng gian. Ví d
>> x=124;
>> y=126;
>> t=x+y
t = 250
Chúng ta cũng cĩ th gom nhi u phép gán trên cùng m t dịng l nh. Ch ng h n
>> x=124; y=126; t=x+y
t = 250
5
Lưu ý r ng, các d u “;” trong dịng l nh trên báo cho Matlab bi t là ta khơng mu n
các giá tr c a x và y hi n ra dịng dư i. N u mu n các giá tr này đư c hi n th ,
ta thay chúng b ng các d u ph y “,”. N u ta khơng s d ng d u “;” ho c d u “,”
gi a các phép gán Matlab s báo l i.
>> x=124, y=126, t=x+y >> x=124 y=126 t=x+y
x = 124 ??? x=124 y=126 t=x+y
y = 126 |
t = 250 Error: Unexpected MATLAB
expression.
Khi th c hi n nhi u phép tính, n u mu n xĩa b t ho t xĩa t t c các bi n đã s
d ng đ gi m b t khơng gian s d ng c a b nh , ta s d ng l nh
clear tên-bi n ho c clear all
Trư c khi làm vi c đĩ ta nên xem l i danh sách các bi n đã s d ng b ng l nh
who. Khi th c hi n l nh who, Matlab s li t kê cho b n bi t t t c các bi n đã đư c
s d ng. Ch ng h n, v i các l nh đã th c hi n trên ta cĩ
>> r=10; a=5^5; x=182; y=235; z=x+y
z = 417
>> V=4/3*pi*r^3
V = 4.1888e+003
>> t=x+a
t = 3307
>> who
Your variables are:
V a r t x y z
B ng l nh whos, ta s nh n đư c nhi u thơng tin hơn v các bi n như: tên bi n s
d ng trong b nh , c , s lư ng bytes đã s d ng, ki u c a bi n.
>> whos
Name Size Bytes Class
V 1x1 8 double array
a 1x1 8 double array
r 1x1 8 double array
t 1x1 8 double array
x 1x1 8 double array
y 1x1 8 double array
z 1x1 8 double array
Grand total is 7 elements using 56 bytes
V i l nh clear ho c clear all t t c khơng gian làm vi c s b xĩa. Khi
khơng c n s d ng đ n m t hay nhi u bi n nào đĩ ta cĩ th xĩa chúng b ng l nh
clear var_name. Ch ng h n đ xĩa bi n V, a và t ta th c hi n
6
>> clear V a t
N u mu n s d ng l i dịng l nh đã nh p vào cho các cơng vi c ti p theo (gi
nguyên ho c đ s a đ i thành dịng l nh m i), ta s d ng hai mũi tên lên xu ng
trên bàn phím (↑, ↓). Các dịng l nh đã nh p vào s xu t hi n và b n cĩ th s a đ i
n u c n. Các l nh này cĩ th đư c s a đ i ngay t i dịng l nh hi n th i. Ta cũng cĩ
th copy và paste các dịng l nh ngay trên Command-Window.
Đ i v i các dịng l nh dài ph i vi t xu ng dịng thì trư c khi xu ng dịng, b n ph i
k t thúc dịng th nh t b ng d u ch m l ng – d u ba ch m (). Ví d
>> FirstClassHolders=109;
>> SecondClass=100;
>> Coach=121;
>> Crew=8;
>> TotalPeopleonPlane=FirstClassHolders + SecondClass + Coach...
+ Crew
TotalPeopleonPlane = 338
D u ba ch m “” phía sau Coach trên dịng đĩ cho bi t dịng l nh này chưa k t
thúc. Sau d u ba ch m này b n đánh ENTER, Matlab s chuy n xu ng dịng dư i
và ch các đ u vào ti p theo.
Cho đ n đây chúng ta đã bi t cách đưa vào và s d ng các bi n cho các phép tính
gán. Các k t qu tính tốn đưa ra màn hình cĩ b n s sau d u ch m n u s đĩ cĩ
ph n l .
>> co = cos(0.2), si = sin(0.2), tn = tan(0.2)
co = 0.9801
si = 0.1987
tn = 0.2027
Đĩ là đ nh d ng short trong Matlab. D ng này đã đư c m c đ nh khi b n kh i đ ng
và s d ng Matlab. N u các k t qu v i b n s sau d u ch m khơng đ t đư c đ
chính xác yêu c u c a b n, hãy th c hi n l nh
>> format long
Matlab s hi n th k t qu tính v i 14 s sau d u ch m. Hãy quan sát ví d sau
>> format long
>> co = cos(0.2), si = sin(0.2), tn = tan(0.2)
co = 0.98006657784124
si = 0.19866933079506
tn = 0.20271003550867
>> format short
7
>> co = cos(0.2), si = sin(0.2), tn = tan(0.2)
co = 0.9801
si = 0.1987
tn = 0.2027
Hãy so sánh các k t qu trên, chú ý r ng v i format short thì s h ng th tư sau d u
ch m đã đư c làm trịn. N u b n tính tốn v i ngành tài chính, liên quan đ n đơn
v đo là ti n thì ch c n hai s th p phân sau d u ch m là đ , khi đĩ b n s d ng
format bank. Sau đĩ các k t qu tính tốn s đư c làm trịn v i hai s sau d u
ch m.
>> format bank
>> luonggio=35.55
luonggio = 35.55
>> luongtuan=luonggio*40
luongtuan = 1422.00
V i các s l n, Matlab s hi n th b ng ký hi u e mũ. S 4.1264× 105 s đư c vi t
d ng e mũ là 4.1264e + 005 . N u mu n t t c các s đư c hi n th d ng e mũ thì
b n s d ng l nh format short e ho c format long e. C th như trong ví d sau:
>> format short e
>> x=5.125*3.16
x = 1.6195e+001
>> format long e
>> x=5.125*3.16
x = 1.619500000000000e+001
N u b n gõ vào l nh format rat, Matlab s hi n th k t qu b ng m t phân s g n
nh t v i k t qu c a b n, ví d
>> format rat
>> x=5.125*3.16
x = 3239/200
1.5 Các đ nh nghĩa tốn h c cơ b n
Đ thu n ti n cho vi c tính tốn, trong Matlab ngư i ta đã đ nh nghĩa s n r t nhi u
đ i lư ng tốn h c và các hàm cơ b n. Ví d như s π đã đư c đ nh nghĩa s n v i
= 4 π 3
tên g i là pi, và khi tính th tích hình c u bán kính R theo cơng th c V3 R ,
trong Matlab ta th c hi n như sau
>> R = 2;
8
>> V = 4/3*pi*R^3
V = 33.5103
M t s quen thu c khác trong tốn h c đư c s d ng trong nhi u ng d ng là s e
v i giá tr x p x b ng 2.718. Trong Matlab hàm mũ cơ s e , ex đư c vi t là
exp(x ). Dư i đây là m t s ví d
>> exp(1)
ans = 2.7183
>> exp(2)
ans = 7.3891
Đ tính căn c a m t s x ta s d ng hàm sqrt(x ). Ví d
>> x = sqrt(9)
x = 3
>> y = sqrt(11)
y = 3.3166
Đ tính lơgarít t nhiên c a s x , ta s d ng hàm log(x ). Ví d
>> log(3.2)
ans = 1.1632
>> x = 5; log(x)
ans = 1.6094
ð i v i lơgarít cơ s 10 ta s d ng hàm log10(x )
>> x = 3; log10(x)
ans = 0.4771
Dư i đây là các hàm tốn h c cơ b n
Các hàm tốn h c
sqrt(x) Tính căn c a bi n x
exp(x) Hàm e mũ, Exponential
expm1(x) Tính giá tr exp(x)-1
log(x) Logarithm cơ s t nhiên, cơ s e
log1p(x) Tính giá tr log(1+x)
log10(x) Logarithm cơ s 10
log2(x) Logarithm cơ s 2
pow2(x) Hàm mũ cơ s 2, pow2(x) = 2^x
9
realpow(x,y) Tính x^y, v i x, y là th c
reallog(x) Logarithm cơ s t nhiên c a s th c
realsqrt(x) Căn b c hai c a s l n hơn ho c b ng 0
nthroot(x, n) Căn b c n c a s th c
nextpow2(n) Tr l i s p đ u tiên sao cho 2^p >= abs(n)
Các hàm làm trịn và l y ph n dư
(Rounding and remainder)
fix(x) Làm trịn s x b ng m t s nguyên g n 0
floor(x) Làm trịn s x b ng m t s nguyên bé hơn g n
nh t
ceil Làm trịn s x b ng m t s nguyên l n hơn
g n nh t
round Làm trịn s x b ng m t s nguyên g n nh t
mod L y ph n nguyên c a phép chia
rem L y ph n dư c a phép chia
sign Hàm d u
Các hàm lư ng giác cơ b n như sin, cos, tan, cot đ u đư c đ nh nghĩa trong Matlab
v i đ i s đư c m c đ nh cho b ng radian. Các hàm lư ng giác ngư c đư c m c
đ nh là tr v giá tr radian. Các hàm này đư c đ nh nghĩa trùng v i tên hàm
thư ng dùng, đư c vi t b ng ch nh .
>> cos(pi/4)
ans = 0.7071
Đ s d ng các hàm lư ng giác ngư c như arcsin, arccos, arctan ta ch vi c thêm
a vào phía trư c tên c a hàm lư ng giác, ví d như asin(x), acos(x), atan(x)
>> format rat
>> atan(pi/3)
ans = 1110/1373
B ng dư i đây li t kê m t s hàm lư ng giác và các hàm lư ng giác ngư c:
Các hàm lư ng giác - Trigonometric functions
sin Hàm sin
sind Hàm sin v i đ i s là đ
sinh Hàm sin Hyperbolic
asin Hàm sin ngư c, t c arcsin
10
asind Hàm sin ngư c cho k t qu là đ
asinh Hàm sin Hyperbolic ngư c
cos Hàm cos
cosd Hàm cos v i đ i s là đ
cosh Hàm cos Hyperbolic
acos Hàm cos ngư c, t c arccos
acosd Hàm cos ngư c cho k t qu là đ
acosh Hàm cos Hyperbolic ngư c
tan Hàm tang, Tangent.
tand Hàm tang v i đ i s là đ
tanh Hàm tang Hyperbolic
atan Hàm tang ngư c, arctang
atand Hàm tang ngư c cho k t qu là đ
atan2 Hàm tang ngư c cho k t qu t –pi đ n pi
atanh Hàm tang Hyperbolic ngư c
cot Hàm cotang
cotd Hàm cotang v i đ i s là đ
coth Hàm cotang Hyperbolic
acot Hàm cotang ngư c, arccotang
acotd Hàm cotang ngư c cho k t qu là đ
acoth Hàm cotang hyperbolic ngư c
1.6 S ph c
Chúng ta cũng cĩ th đưa s ph c vào trong Matlab. Nh l i r ng đơn v ph c
đư c đ nh nghĩa là căn c a −1 . Trong Matlab s ph c ký hi u là i ho c j
i = −1
M t s ph c cĩ th đư c vi t d ng z= x + iy , trong đĩ x là ph n th c và y là
ph n o c a z . Vi c nh p m t s ph c vào Matlab th t đơn gi n, v i i đư c m c
đinh là đơn v o. Các phép tính trên s ph c cũng đư c th c hi n m t các d hi u.
Ví d v i hai s ph c
a = 2 + 3i
b = 1 - i
⇒ a + b = 3 + 2i
Phép tính này đư c th c hi n trong Matlab như sau
>> format short
>> a = 2 + 3i;
11
>> b = 1 - i;
>> c = a + b
c = 3.0000 + 2.0000i
M t s hàm liên quan đ n s ph c đư c li t kê trong b ng dư i đây
Các hàm v i s ph c
abs Cho đ l n hay modul véctơ ph c
angle Cho gĩc pha hay argument c a s ph c, radian
complex T o l p d li u ph c t các ph n th c vào o
conj Cho s ph c liên h p
imag Cho ph n o
real Cho ph n th c
isreal Tr l i giá tr đúng, 1, n u đ i s là th c
cplxpair S p x p các s ph c thành c p liên h p
Ví d v i hai s ph c z1 và z2 ta cĩ:
>> format short
>> z1=2.5+6.5i >> z1/z2
z1 = 2.5000 + 6.5000i ans = 1.3659 - 0.7073i
>> z2=-0.5+4.5i >> real(z1)
z2 = -0.5000 + 4.5000i ans = 2.5000
>> z1+z2 >> imag(z1)
ans = 2.0000 +11.0000i ans = 6.5000
>> z1-z2 >> abs(z1)
ans = 3.0000 + 2.0000i ans = 6.9642
>> z1*z2 >> angle(z1)
ans = -30.5000 + 8.0000i ans = 1.2036
1.7 X lý l i khi gõ l nh
Như đã th y trên, khi th c hi n các dịng l nh b n cĩ th làm khơng đúng và
Matlab đã báo l i cho b n. Error !. N u khi b n k t thúc dịng l nh b ng gõ phím
ENTER và nh n ra r ng dịng l nh trên cĩ l i, b n khơng nh t thi t ph i gõ l i
dịng l nh đĩ, mà đơn gi n b n ch c n s d ng các phím mũi tên lên ho c xu ng,
↑, ↓ , đ hi n th l i dịng l nh c n s a. Sau khi s a l i, và đánh phím ENTER
Matlab s đưa ra k t qu .
12
1.8 K t thúc phiên làm vi c v i Matlab
Chúng ta v a b t đ u v i m t s l nh cơ b n c a Matlab, và bây gi cĩ th b n
mu n ghi l i các cơng vi c v a th c hi n và thốt kh i Matlab. Làm th nào đ k t
thúc Matlab trên màn hình c a b n? Th t đơn gi n b n vào exit trong menu File,
như khi s d ng các chương trình khác trong Windows. M t cách khác là b n gõ
l nh quit vào d u nh c trong c a s l nh và Matlab s đĩng l i. K t thúc phiên làm
vi c.
1.9 Bài t p th c hành
S d ng Matlab đ th c hi n tính các đ i lư ng sau:
13
1. x = 12 ;
17
13
2. y =16 + 47
17
3. z = 91.25
4. Đúng hai sai. Khi bi n y chưa đư c gán giá tr , Matlab cho phép b n th c
hi n phép gán x= y2 vào trong b nh đ s d ng cho vi c ti p theo.
5. Cho bi t th tích c a hình tr cĩ chi u cao h và bán kính đáy r là
V= π rh2 , hãy s d ng Matlab đ tính th tích hình tr cĩ chi u cao 12
cm và đư ng kính đáy là 4 cm.
6. S d ng Matlab tính giá tr sin c a π / 3 và bi u di n k t qu dư i d ng
m t s h u t .
7. Hãy t o m t m-file đ tính k t qu c a sin(π /4),sin( π /3) và sin(π /2) ;
bi u di n chúng b ng các s h u t .
13
Chương 2.
Véctơ, ma tr n và Matlab
Các phép tính s h c thơng thư ng đư c th c hi n trên các s riêng l đư c g i là
đ i lư ng vơ hư ng (scalar). Tuy nhiên trong r t nhi u bài tốn ta c n th c hi n các
phép tính l p l i nhi u l n v i nh ng b s li u. Cơng vi c này đư c th c hi n m t
cách d dàng trong Matlab khi các b s li u đĩ đư c lưu tr dư i d ng m ng.
M ng trong Matlab cĩ th là m t, hai hay nhi u chi u. M ng m t chi u cịn g i là
véctơ, m ng hai chi u là ma tr n. Véctơ và ma tr n là hai đ i tư ng này đư c
Matlab coi như ki u d li u chính c a mình. Và do đĩ trong Matlab cĩ r t nhi u
cơng c h u ích x lý các m ng s ki u véctơ và ma tr n. Chú ý r ng trong Matlab
véctơ đư c bi u di n là m t ma tr n c t ho c ma tr n hàng.
2.1 Véctơ và các phép tính trên véctơ
Nh p véctơ
Véctơ là m t m ng m t chi u ch a các s . Matlab cho phép b n t o ra các véctơ
c t ho c véctơ hàng. M t véctơ c t cĩ th đư c t o ra trong Matlab b ng cách li t
kê các ph n t trong d u ngo c vuơng [ ] và gi a các ph n t là d u ch m ph y
“;”. Các véctơ cĩ s ph n t tùy ý. Ch ng h n đ t o ra véctơ c t v i ba ph n t , ta
vi t
>> a = [2; 1; 4]
a =
2
1
4
Các phép tính cơ b n trên véctơ c t cĩ th đư c th c hi n v i tên bi n đã s d ng
đ t o ra nĩ. N u mu n nhân m t s v i m t véctơ, hay tích v i m t vơ hư ng. Gi
s mu n t o ra m t véctơ cĩ các ph n t b ng ba l n các ph n t c a véctơ v a
đư c t o ra, t c là nhân véctơ đã cĩ v i 3. T t nhiên ta cĩ th gán s 3 này vào m t
bi n, c, ch ng h n. Ta th c hi n
>> c = 3;
>> b = c*a
15
b =
6
3
12
Đ t o ra m t véctơ hàng, chúng ta li t kê các ph n t trong d u ngo c vuơng [], và
s d ng d u cách ho c d u ph y đ n m gi a các ph n t . Ví d
>> v = [2 0 4]
v = 2 0 4
Ho c s d ng d u ph y
>> w = [1,1,9]
w = 1 1 9
Véctơ c t cũng cĩ th chuy n thành véctơ hàng và ngư c l i nh phép chuy n v .
Gi s cĩ véctơ c t v i n ph n t ký hi u b i:
v1
v2
v =
...
v
n
chuy n v c a véctơ này là
T =
v [v1 v 2 ... vn ].
Trong Matlab, phép chuy n v đư c th hi n b ng d u nháy đơn (’). Chuy n v
véctơ hàng cho ta véctơ c t như trong ví d
>> a = [2; 1; 4];
>> y = a'
y = 2 1 4
Chuy n v véctơ c t cho ta véctơ hàng
>> Q = [2 1 3]
Q = 2 1 3
>> R = Q'
R =
2
1
3
16
Các phép tính c ng và tr hai véctơ cùng c
Các phép tính c ng và tr hai véctơ t o ra cho ta m t véctơ m i. Đ th c hi n đư c
các phép tính cơng ho c tr , hai véctơ ph i cùng d ng (cùng là c t ho c cùng là
hàng) và cùng cĩ s ph n t . Các phép tính đư c th c hi n v i tên bi n c a chúng.
Ví d , th c hi n phép c ng hai véctơ
>> A = [1; 4; 5];
>> B = [2; 3; 3];
>> C = A + B
C =
3
7
8
Và đây là phép tr hai véctơ hàng
>> W = [3,0,3];
>> X = [2,1,1];
>> Y = W – X
Y = 1 –1 2
T o m t véctơ t các véctơ khác
Matlab cho phép b n n i các véctơ l i v i nhau đ t o ra m t véctơ cĩ nhi u ph n
t . G i u và v là hai véctơ c t v i s ph n t tương ng là m và n , mà đã đư c
t o ra trong Matlab. Chúng ta cĩ th t o ra véctơ w v i m+ n ph n t , trong đĩ
m ph n t đ u là c a véctơ u và n ph n t cu i là c a véctơ v . Vi c này đư c
th c hi n b ng cách vi t w= [u; v]. Ví d
>> A = [1; 4; 5];
>> B = [2; 3; 3];
>> D = [A;B]
D =
1
4
5
2
3
3
Vi c này cũng cĩ th th c hi n đ i v i các véctơ hàng. Đ t o véctơ hàng w v i
m+ n ph n t t hai véctơ hàng u cĩ m ph n t và v cĩ n ph n t , ta vi t w =
[u, v]. Ví d
17
>> u = [12, 11, 9]
>> v = [1, 4];
>> w = [u, v]
w = 12 11 9 1 4
T o véctơ hàng cĩ các ph n t cách đ u
Matlab cung c p cơng c đ t o ra véctơ cĩ các ph n t cách đ u v i bư c h , xu t
phát t giá tr a1 và k t thúc t i giá tr an . Ph n t th k c a véctơ này cĩ giá tr là
= + − ⋅
aakk 1 ( 1) h . Tốn t hai ch m (:) cho ta th c hi n vi c này v i cú pháp
như sau
=
a [a1 :: han ]
Ví d đ t o ra m t véctơ ch a danh sách các s ch n t 0 đ n 10 ta vi t
>> x = [0:2:10]
x = 0 2 4 6 8 10
Nh cĩ k thu t này mà vi c v đ th hàm s y= fx( ) trên đo n x= [, a b ] đư c
th c hi n m t cách d dàng. Đo n [,a b ] s đư c chia đ u v i bư c h đ nh thành
m t véctơ x , sau đĩ tính giá tr c a hàm s t i các đi m chia và ta nh n đư c m t
=
véctơ y cĩ s ph n t b ng s ph n t c a véctơ x , yi fx( i ). Ví d
>> x = [0:0.1:1]
x = 0 0.10 0.20 0.30 0.40 0.50 0.60 0.70 0.80 0.90 1.00
Trư ng h p f( x ) = ex ta cĩ
>> y = exp(x)
y =
Columns 1 through 9
1.0000 1.1052 1.2214 1.3499 1.4918 1.6487 1.8221 2.0138 2.2255
Columns 10 through 11
2.4596 2.7183
ho c v i fx( ) = x 2
>> y = x.^2
y = 0 0.01 0.04 0.09 0.16 0.25 0.36 0.49 0.64 0.81 1.00
Chú ý r ng phép tính lũy t a đư c ký hi u b i d u mũ (^), và phép tính lũy th a
trên đư c vi t là .^ ; n u trong ví d trên b n gõ vào >> y = x^2 thì Matlab s báo
l i !
18
??? Error using ==> mpower
Matrix must be square.
Các phép tính .* ./ .^ s đư c nĩi k hơn ph n sau.
Trong quá trình t o véctơ v i các ph n t cách đ u, b n cĩ th s d ng bư c h
âm, t c là véctơ b n t o ra s gi m đ u t giá tr đ u v giá tr cu i. Ví d đ t o ra
dãy s gi m t 100 v 80 v i bư c là 5, ta vi t
>> u = [100:–5:80]
u = 100 95 90 85 80
M t cách khác đ t o ra véctơ hàng v i các ph n t cách đ u là s d ng l nh
linspace. L nh x = linspace(a,b) cho ta m t véctơ hàng x g m 100 ph n t ... c gi i h phương trình đ i s
tuy n tính. Các ví d dư i đây s ch ra m t cách đ nh n đư c nghi m c a phương
trình Ax= b . Xét h phương trình
3x+ 2 y = 5
6x+ 2 y = 2
T đây ta bi t đư c ma tr n h s A và véctơ v ph i b :
3− 2 5
= =
A− , b
6 2 2
Ta s nh p chúng vào Matlab:
>> A = [3 –2; 6 –2];
>> b = [5; 2];
Trư c h t ki m tra xem ma tr n h s A cĩ ph i là ma tr n chính qui:
>> det(A)
ans = 6
Do đĩ t n t i ma tr n ngh ch đ o, và tính đư c nghi m theo:
>> x=inv(A)*b
x =
-1.0000
-4.0000
43
Cách mà ta v a s d ng đ nh n đư c nghi m c a h phương trình đ i s tuy n
tính, ch áp d ng đư c khi ma tr n h s là vuơng và khơng suy bi n. Trong h này
ta th y s phương trình b ng s n c n tìm. Trư ng h p s phương trình ít hơn s
n ta g i là h h t (thi u) phương trình (underdetermined). Khi đĩ h phương trình
cĩ th cĩ vơ s nghi m th a mãn. B i vì ta ch cĩ th xác đ nh đư c m t s bi n
trong các n đĩ, s cịn l i cĩ th nh n các giá tr tùy ý. Ví d như h hai phương
trình dư i đây v i ba n
x+2 y − z = 3
5y+ z = 0
Sau khi bi n đ i ta nh n đư c
x=3 − 7 y
z= −5 y
Giá tr c a hai bi n x và z ph thu c vào bi n y . V i m i giá tr c a y ta s nh n
đư c các giá tr tương ng c a x và z . H cĩ vơ s nghi m.
N u vi t h trên d ng ma tr n Ax= b v i
1 2− 1 3
A=0 5 1 , b = 0
0 0 0 0
Ta th y ngay det(A )= 0 . Đ bi t đư c nghi m c a h này cĩ t n t i khơng ta c n
so sánh h ng c a ma tr n A và ma tr n m r ng C = [A b], n u chúng b ng nhau
thì t n t i nghi m, và cĩ th s d ng phép chia trái. Ví d c n gi i h phương trình
3x+ 2 y − z = 7
4y+ z = 2
ta th c hi n:
>> A= [3 2 -1; 0 4 1]; b = [7;2];
>> C = [A b]
C =
3 2 -1 7
0 4 1 2
>> rank(A)
ans = 2
>> rank(C)
ans = 2
>> x=A\b
x =
2.0000
0.5000
0
44
Trong trư ng h p này Matlab đã cho z = 0 , th c t z cĩ th nh n giá tr b t kỳ.
V i m t h phương trình cĩ vơ s nghi m, thì ta cĩ th tìm đư c m t nghi m cĩ đ
dài nh nh t ch ng h n. Cơng th c c a nghi m cĩ đ dài nh nh t như sau
x= A† b = AT[ AA T ]− 1 b .
Ma tr n A†= AAAT[ T ]− 1 đư c g i là ma tr n t a ngh ch đ o trái c a ma tr n A .
Trong Matlab đã s n cĩ m t hàm đ tính ma tr n t a ngh ch đ o này, đĩ là
pinv(A). Như th nghi m cĩ chu n nh nh t (t i ưu) c a h trên đư c tính là
>> A= [3 2 -1; 0 4 1]; b = [7; 2];
>> x=pinv(A)*b
x =
1.6667
0.6667
-0.6667
Hãy th l i v i
>> x=A'*inv(A*A')*b
x =
1.6667
0.6667
-0.6667
Khi tính tốn v i các đ i lư ng, ta c n ph i lưu ý đ n th t ưu tiên các phép tốn,
ví d khi gi i h phương trình đ i s tuy n tính
Kx = 0.5 b⇒ x = 0.5 K−1 b
Sau đây s tính trong Matlab v i các ki u vi t khác nhau
>> K=[2 2 3; 4 5 6; 7 8 9]; b=[2 3 4]';
>> x=0.5*K\b % cho ket qua sai
x = 0
-2.0000
2.6667
>> x=0.5*(K\b) % cho ket qua dung
x = 0
-0.5000
0.6667
>> x=0.5*inv(K)*b
x =
0.0000
-0.5000
0.6667
45
>> x=K\b*0.5
x =
0
-0.5000
0.6667
Tr riêng và véctơ riêng c a ma tr n vuơng
Cho A là m t ma tr n vuơng c p n . S λ đư c g i là tr riêng và véctơ khác khơng
x là véctơ riêng c a A n u chúng tho mãn đi u ki n :
Ax= λ x hay (A−λ E ) x = 0
v i E là ma tr n đơn v .
V i m i giá tr λi , ta s cĩ vơ s các véctơ xi tho mãn. Các véctơ riêng cùng
tương ng v i m t λi rõ ràng là ph thu c tuy n tính và ch khác nhau m t h ng s
α. Do đĩ ta cĩ th ch n m t véctơ duy nh t làm cơ s (ví d đư c chu n hố theo
chu n Euclide đ cĩ chu n b ng 1...). T p h p n véctơ riêng ng v i n tr riêng
khác nhau t o thành m t h véctơ đ c l p tuy n tính. Ma tr n g m các c t là các
véctơ riêng c a ma tr n A g i là ma tr n d ng riêng c a A (Modal matrix).
N u cĩ hai ma tr n vuơng A và B cùng c p n . S λ và véctơ khác khơng x tho
mãn đi u ki n :
Ax= λ Bx hay (A− λ Bx ) = 0
thì s λ g i là tr riêng suy rộng c a hai ma tr n A và B, véctơ x là véctơ riêng
tương ng.
Vi c tìm tr riêng và véctơ riêng trong Matlab đư c th c hi n b ng l nh eig():
L nh eig tính tốn tr riêng và véctơ riêng c a ma tr n vuơng
cho m t véctơ l ch a các tr riêng c a
l = eig(A);
ma tr n vuơng A.
cho ta ma tr n chéo D ch a các tr riêng
[V, D] = eig(A); c a A, ma tr n V cĩ các c t là các véctơ
riêng c a A th a mãn AV = VD.
cho ta véctơ ch a các tr riêng suy r ng
d = eig(A,B); c a các ma tr n vuơng A và B.
cho ta ma tr n chéo D ch a các tr riêng
suy r ng c a hai ma tr n A và B, ma tr n
[V, D] =eig(A,B);
V cĩ các c t là các véctơ riêng th a mãn
AV = BVD.
tương t như eig(A,B) đ i v i ma tr n
đ i x ng A và ma tr n đ i x ng xác đ nh
eig(A,B,'chol')
dương B. Phương pháp tính đây d a trên
khai tri n Cholesky ma tr n B.
Các ví d sau minh h a vi c tìm tr riêng và véctơ riêng trong Matlab
46
>> C=[2 1 0; >> [V, D]=eig(C)
1 4 -1; V =
0 -1 7]; 0.9119 -0.4064 -0.0571
-0.4037 -0.8630 -0.3037
-0.0742 -0.3000 0.9510
>> eig(C) D =
ans = 1.5573 0 0
1.5573 0 4.1233 0
4.1233 0 0 7.3194
7.3194
Phân tích ma tr n vuơng A thành tích các ma tr n
Phân tích LU
V i m i ma tr n vuơng A khơng suy bi n, det(A )≠ 0 , luơn phân tích đư c thành
tích c a hai ma tr n tam giác
A= LU ,
v i L là ma tr n tam giác dư i cĩ các ph n t trên đư ng chéo chính b ng 1, và U
ma tr n tam giác trên.
Trong trư ng h p cĩ s d ng s hốn v các hàng cho nhau trong quá trình phân
tích thì, các phép hốn v s đư c th hi n trong ma tr n P , th a mãn
PA= LU
Ma tr n hốn v cĩ tính ch t sau
PPEPPT= ⇒ T = −1
Ví d
>> A = [-1 2 0; 4 1 8; 2 7 1]
A =
-1 2 0
4 1 8
2 7 1
>> [P, L, U]=lu(A)
P =
1.0000 0 0
0.5000 1.0000 0
-0.2500 0.3462 1.0000
L =
4.0000 1.0000 8.0000
0 6.5000 -3.0000
0 0 3.0385
47
U =
0 1 0
0 0 1
1 0 0
Ý nghĩa c a phân tích LU cĩ th th y trong vi c gi i h Ax= b . Sau phi phân tích
LU ta nh n đư c
Ax= LUx = b
ð t y= Ux , suy ra Ly= b . Như th thay vì gi i h Ax= b , ta gi i hai h
Ly= b và Ux= y
Do L và U là các ma tr n tam giác nên vi c gi i hai h này khá đơn gi n.
V i L là ma tr n tam giác dư i nên d dàng nh n đư c nghi m y . Sau đĩ gi i tìm
x . Ví d c n gi i h phương trình
3x+ 2 y − 9 z = − 65
−9x + 5 y + 2 z = 16
6x+ 7 y + 3 z = 5
Nh p h vào Matlab, phân tích LU và gi i tìm nghi m:
>> A = [3 2 -9; -9 -5 2; 6 7 3]; b = [-65; 16; 5];
>> [L, U] = lu(A)
L =
-0.3333 0.0909 1.0000
1.0000 0 0
-0.6667 1.0000 0
U =
-9.0000 -5.0000 2.0000
0 3.6667 4.3333
0 0 -8.7273
>> x = U\(L\b)
x =
2.0000
-4.0000
7.0000
Phân tích Cholesky
Ma tr n vuơng A đ i x ng xác đ nh dương luơn phân tích đư c thành tích
ALL= T ,
v i L là ma tr n tam giác dư i.
Ma tr n vuơng A xác đ nh dương n u th a mãn xAxT >0, ∀ x ≠ 0 .
48
Ví d
>> M = [2 3 4;3 5 6;4 6 9];
>> L=chol(M)
L =
1.4142 2.1213 2.8284
0 0.7071 0.0000
0 0 1.0000
>> L'*L-M
ans =
1.0e-015 *
0.4441 0 0
0 0 0
0 0 0
Phân tích QR
Phân tích QR là phép phân tích m t ma tr n vuơng ho c ch nh t thành tích c a
ma tr n tr c giao và m t ma tr n tam giác trên:
A= QR
v i QQT = E , R là ma tr n tam giác trên. Ví d
>> A = [2 3 4 5; 3 5 6 8; 4 6 9 10];
>> [Q, R] = qr(A)
Q =
-0.3714 0.2491 -0.8944
-0.5571 -0.8305 -0.0000
-0.7428 0.4983 0.4472
R =
-5.3852 -8.3563 -11.5131 -13.7415
0 -0.4152 0.4983 -0.4152
0 0 0.4472 -0.0000
>> Q*R - A
ans =
1.0e-014 *
0 -0.1332 -0.1776 0
0.0444 -0.0888 -0.0888 0
0 -0.0888 0 0.1776
49
>> Q*Q'
ans =
1.0000 -0.0000 -0.0000
-0.0000 1.0000 -0.0000
-0.0000 -0.0000 1.0000
>> inv(Q)-Q'
ans =
1.0e-015 *
0 0 0
-0.0833 0.1110 -0.0555
0.1110 -0.1066 -0.2220
Phân tích SVD (Singular Value Decomposition)
Phân tích SVD là bi u di n ma tr n A c m× n d ng tích các ma tr n
A= USVT
v i U là ma tr n tr c giao c m× m , V là ma tr n tr c giao c n× n , và S là
ma tr n th c c m× n cĩ d ng đư ng chéo ch a các giá tr kỳ d (singular values)
c a A theo tr t t t l n đ n bé. Đĩ là các giá tr khai căn c a các tr riêng c a ma
tr n AT A .
Ví d
>> A = [1 2;2 3;3 5];
>> [U,S,V] = svd(A)
U =
-0.3092 0.7557 -0.5774
-0.4998 -0.6456 -0.5774
-0.8090 0.1100 0.5774
S =
7.2071 0
0 0.2403
0 0
V =
-0.5184 -0.8552
-0.8552 0.5184
>> err = U*S*V'-A
err =
1.0e-015 *
0 0.4441
0.8882 0.4441
0.8882 0
50
2.4 Bài t p th c hành
1. Tìm đ dài c a véctơ
a = [−1 7 3 2].
2. Tìm đ dài c a véctơ ph c
b = [−1 + i 7i 3 −2−2i].
3. Nh p các s 1, 2, 3 đ t o ra m t véctơ hàng và m t véctơ c t.
4. Cho hai véctơ c t a = [1; 2; 3] và b = [4; 5; 6].
Hãy tìm tích ph n t hai véctơ.
5. L nh nào cĩ th t o ra m t ma tr n c 5 × 5 cĩ các ph n t trên đư ng chéo
chính b ng 1 cịn l i là 0?
6. Cho hai ma tr n
8 7 11 2 1 2
AB=6 5 1 , = 1 6 4
0 2 8 2 2 2
Hãy tính tích ph n t (tích m ng) và tích hai ma tr n A và B.
7. Cho ma tr n
8 7 11 3 2 8
A = 6 5 1 , t A hãy t o ra ma tr n B = 3 2 8 .
3 2 8 6 5 1
8. Tìm nghi m c a h phương trình :
x+2 y + 3 z = 12
−4x + y + 2 z = 13
9y− 8 z = − 1
Đ nh th c c a ma tr n h s b ng bao nhiêu?
9. Hãy xem xét h sau cĩ nghi m duy nh t khơng? t i sao
x−2 y + 3 z = 1
x+4 y + 3 z = 2
2x+ 8 y + z = 3
10. S d ng phân tích LU tìm nghi m c a h sau:
x+7 y − 9 z = 12
2x− y + 4 z = 16
x+ y −7 z = 16
51
Chương 3.
L p trình trong Matlab
Trong các chương trư c đã trình bày vi c s d ng các hàm, l nh đ nh nghĩa s n
c a Matlab đ gi i các bài tốn đơn gi n. Ngồi các l nh, hàm đ nh s n cĩ này,
Matlab cịn là mơi trư ng cho phép l p trình gi i các bài tốn ph c t p, ho c t o ra
các hàm ti n l i cho ngư i s d ng. Trong chương này s trình bày kh năng l p
trình trong Matlab.
3.1 Các ki u d li u
Trong Matlab cĩ nhi u ki u d li u, sau đây ch trình bày m t s ki u liên quan
đ n d ng th hi n và lưu tr . Đ cĩ th nh n đư c s tr giúp tr c ti p t Matlab,
b n c n t n d ng câu l nh help.
==> help class, help strfun, help struct
Ki u véctơ và ma tr n
Bi u di n s các ma tr n hai hay nhi u chi u cũng như các véctor trong chương 2
là m t ki u d li u đ c bi t. M i ph n t c a véctơ hay ma tr n theo chu n c n ơ
nh 8 Byte (class double) ho c 4 Byte (class single). Các đ i lư ng ph c c n m t ơ
nh g p đơi, ph n th c và o đư c ghi riêng r .
Ví d đ i v i m ng 3 chi u (3D), v i c u trúc K(hàng, c t, chi u sâu)
>> K(1,1,1)=2; K(2,2,2)=4; K(3,3,3)=5;
>> K(:,:,3) % lop 3
ans =
0 0 0
0 0 0
0 0 5
K(:,:,2) % lop 2
ans =
0 0 0
53
0 4 0
0 0 0
K(:,:,1) % lop 1
ans =
2 0 0
0 0 0
0 0 0
Chu i ký t (ký t , xâu - string)
Chu i ký t đư c đ t trong c p d u nháy đơn trên
>> ’Day la chuoi ky tu’
M i ph n t c a chu i ký t (Ma tr n ký t ) c n ơ nh 2 Byte.
Ki u ơ, m ng (Cell-Array)
Các d li u c a các ki u khác nhau, ví d chu i ký t , các ma tr n cĩ c khác
nhau, cĩ th đư c s d ng như các ơ c a m t m ng. Các ph n t ơ đư c g i đ n
thơng qua ch s c a nĩ. Các ph n t c a m t ơ đư c đ t trong d u ngo c nh n
{}. Ví d
>> A(1,1)={[1 2 3; 4 2 6; 1 7 9]};
>> A(1,2)={'Ma tran thu'};
>> A(2,1)={3+8i};
>> A(2,2)={0:pi/20:2*pi}; %hoac
>> A{1,1}=[1 2 3; 4 2 6; 1 7 9];
>> % goi den cac phan tu
>> A(1,1)
ans =
[3x3 double]
>> A{1,1}
ans =
1 2 3
4 2 6
1 7 9
>> A{1,2} % o (1,2)
ans = Ma tran thu
>> A(1,2)
ans = 'Ma tran thu'
Ki u c u trúc
C u trúc đư c s d ng đ làm vi c v i các ki u d li u khác nhau. Tên c a m t
c u trúc g m hai ph n, tên c u trúc trư c d u ch m ( . ) và tên trư ng trong c u
54
trúc sau d u ch m, (struct_name.field_name). Các ph n t c a c u trúc đư c g i
đ n qua tên và ch s .
Cú pháp:
% tao mot cau truc
structur=struct(’name_1’, value1, ’name_2’, value2,.. )
% tro den phan tu cua cau truc
structur.name
ho c
structur.name_1 = value_1;
structur.name_2 = value_2;
Ví d
>> A=[1 2 3; 4 2 6; 1 7 9];
>> my_structur=struct('data', A, 'dimension',[3 3])
my_structur =
data: [3x3 double]
dimension: [3 3]
>> my_structur.dimension
ans =
3 3
>> my_structur.data
ans =
1 2 3
4 2 6
1 7 9
>> my_structur(2).data=inv(A) % mo rong truong data
my_structur =
1x2 struct array with fields:
data
dimension
>> my_structur.data % in ra ma tran A va inv(A)
ans =
1 2 3
4 2 6
1 7 9
ans =
4.0000 -0.5000 -1.0000
5.0000 -1.0000 -1.0000
-4.3333 0.8333 1.0000
>> % goi den cac phan tu
>> my_structur(1).data(1,2) % phan tu A(1,2)
ans =
55
2
>> my_structur(2).data(1,2) % phan tu (1,2) cua inv(A)
ans =
-0.5000
>> my_structur(2).data(3,2) % phan tu (3,2) cua inv(A)
ans =
0.8333
3.2 So n th o Script file trong Matlab
Matlab là m t ngơn ng tương tác, nghĩa là các l nh đư c đánh t i d u nh c ‘>>’
đư c th c hi n ngay sau khi k t thúc dịng l nh b ng phím ‘Enter’. Tuy nhiên th t
đơn đi u khi đánh (gõ) m t chu i l nh dài m i khi s d ng Matlab th c hi n cơng
vi c. Đ tránh vi c này trong Matlab cĩ hai bi n pháp m r ng cơng năng: scripts
và functions (dùng t p văn b n và các hàm). C hai bi n pháp này s d ng lo i t p
cĩ tên là m-file (file cĩ ph n m r ng là .m) đư c t o ra nh trình so n th o. Ưu
đi m c a m-file là cĩ th ghi l i các dịng l nh và cĩ th s a đ i m t cách d dàng
mà khơng ph i đánh l i tồn b danh sách các l nh.
Script và Matlab-function
function [out_1, . . .] = name(in_1, . . .)
% Matlab–function / Hàm trong matlab
@ Tham chi u đ n hàm
function handle
nargin S tham s đ u vào
narout S tham s đ u ra
global Đ nh nghĩa, khai báo bi n t ng
th / tồn c c
persistent Đ nh nghĩa, khai báo bi n
persistent
%, %{ . . . %} Các dịng chú thích, di n gi i
Xu ng dịng khi dịng l nh quá dài
eval(str) Xác đ nh giá tr m t xâu
feval(F, in_1, ,in_n) Xác đ nh giá tr m t hàm
inline(’function’,’t’,) Hàm ngay trong m t script
clear function_name Xĩa các hàm
== > help function, help function_handle, help funfun
56
Các th t c vào / ra
disp(string) Hi n th m t chu i ký t , m t xâu
Hi n th d li u khơng đư c đ nh
disp(variable)
d ng
Chuy n đ i m t bi n th c thành xâu
num2str(variable)
ký t
Chuy n đ i m t bi n nguyên thành
int2str(variable)
xâu ký t
variable = input(string) Đưa vào m t bi n
string = input(string,’s’) Đưa vào m t xâu ký t
D ng cho đ n khi gõ vào phím b t
pause
kỳ
D ng l i m t kho ng th i gian n
pause(n)
giây
In ra m t d li u cĩ đ nh d ng
fprintf(format, variable)
sprintf(format, variable) In ra m t ký t , m t xâu
→
tic operations toc Cho ta th i gian tính tốn tic
toc
== > help function, help function_handle, help funfun
Scripts
bi u tư ng
“t gi y tr ng”
Hình 3-1.
57
Matlab Script files là m t chu i các l nh đư c gõ vào trong c a s so n th o và
đư c ghi vào t p cĩ ph n m r ng là m (filename.m, hay đư c g i là m-file). Đ
t o m-file, trong menu chính b n ch n New ==> M-file ho c b n nháy chu t vào
bi u tư ng “t gi y tr ng” trên thanh cơng c (hình 3-1).
Vi c ch y m-file tương đương v i vi c đánh tồn b các dịng l nh trên c a s l nh
t i d u nh c ‘>>’ c a Matlab. Các bi n s d ng trong m-file đư c đ t vào trong
khơng gian làm vi c c a Matlab. Khơng gian làm vi c này là tr ng khi kh i đ ng
Matlab, và nĩ s ch a t t c các bi n đư c đ nh nghĩa trong phiên làm vi c. Mu n
xĩa t t c các bi n ta s d ng l nh.
>> clear all
M t script-file cĩ th s d ng các bi n trong mơi trư ng làm vi c và đưa ra mơi
trư ng làm vi c (workspace) các d li u t o ra. Các d li u này t n t i trong quá
trình ch y chương trình và nĩ cĩ th đư c s d ng cho các cơng vi c x lý ti p
theo và cĩ th hi n th chúng b ng đ th ch ng h n.
Script-file khơng ch a các ph n khai báo và khơng b gi i h n b i begin / end. Các
chú thích và di n gi i trong file đư c vi t t ng dịng m t sau d u %. Đ i v i
MATLAB 7 ta cĩ th so n m t kh i g m nhi u dịng b t đ u b ng %{ và k t thúc
b i %}. Đ ng t dịng trong m t bi u th c hay m t dịng l nh ta s d ng ba ch m
liên ti p cu i dịng, . Matlab s hi u dịng dư i là n i ti p c a dịng trên.
Hình 3-2. C a s so n th o script – file, MATLAB 7
58
Vi c g i hay ch y m t chương trình trong m-file đã đư c so n th o trư c cĩ th
đư c th c hi n b ng cách: trong c a s l nh sau d u nh c >> ta gõ tên m-file đĩ,
c n nh là khơng cĩ ph n m r ng (.m). Ho c ta cĩ th ch y chương trình ngay
trên c a s so n th o b ng cách n F5, ho c dùng chu t ch n Debug -- > Run trên
thanh Menu.
Dư i đây là m t Script file th c hi n vi c tính và đưa th tích c a m t hình c u, mà
tham s bán kính đư c ngư i s d ng nh p vào t bàn phím
function volume
r = input('Hay cho ban kinh cua hinh cau')
vol = (4/3)*pi*r^3;
disp('The tich hinh cau nay la:')
disp(vol)
Dư i đây là m t s dịng l nh minh h a cho eval, feval, inline, hàm n tên và
fprintf, spritf, disp.
• eval
>> x='1/y*sin(y)'; % Bieu dien ham nhu mot xau ky tu
>> y=0.725; % gan cho bien y mot gia tri
>> a=eval(x) %
a =
0.9147
N u cĩ m t hàm foo.m đã đư c so n trong m t m-file thì sau dịng l nh
>> fooHandle=@foo
ba l nh sau đây s cho k t qu như nhau.
>> feval(fooHandle,8.75)
>> fooHandle(8.75)
>> foo(8.75)
• inline
>> g=inline('5*a+6.5*sin(b)') % hoac
>> g=inline('5*a+6.5*sin(b)','a','b') % a, b la hai bien
g =
Inline function:
g(a,b) = 5*a+6.5*sin(b)
>> c=0:2
c =
0 1 2
>> b=pi/4
b =
59
0.78539816339745
>> z=g(c,b)
z =
4.59619407771256 9.59619407771256 14.59619407771256
Hàm n tên, cú pháp
fhandle = @(argumlist) . . . . .
>> om=5; % gan gia tri 5 cho bien om
>> f = @(y) cos(om*y); % viet bieu thuc ham
>> t=linspace(0,2*pi/om); % chuoi thoi gian
>> f(t)
Đ nh d ng hi n th
>> x='1/y*sin(y)'; % Bieu dien ham nhu mot xau ky tu
>> y=0.725; % gan cho bien y mot gia tri
>> a=eval(x) %
a =
0.91466957608738
>> fprintf('%3.3f',a)
0.915
>> fprintf('% s %3.3f','Gan cho bien a gia tri', a)
Gan cho bien a gia tri 0.915
>> sprintf('%3.3f',a)
ans =
0.915
>> sprintf('%3.3e',a)
ans =
9.147e-001
>> disp(['a = ', num2str(a, '%4.3f')])
a = 0.915
>> disp(['a = ', sprintf('%4.3f',a)])
a = 0.915
Các hàm, MATLAB - Function
Ngồi các hàm s n cĩ (built-in functions), Matlab cho phép t o ra các hàm c a
riêng b n, đĩ là các hàm d ng m-file. Các hàm m-file này cĩ ph n m r ng là .m
tương t như các Script file. Tuy nhiên, đi u khác v i các script file là các hàm m-
file đư c s d ng v i các tham s vào và tham s ra. Vi c s d ng các hàm m-file
là r t c n thi t, chúng cho phép chia nh m t bài tốn l n thành nhi u mơđun, m i
60
mơđun s đư c gi i b ng m t hàm. Các hàm m-file d ng này đư c g i là Matlab-
function v i c u trúc t ng quát như sau:
function [output 1, output 2] = function_name(input1,input2)
%
% Some comments that explain what the function does go here.
%
MATLAB command 1;
MATLAB command 2;
MATLAB command 3;
Tên c a m-file lưu tr hàm này ph i l y đúng tên hàm đã đ nh nghĩa trong chương
trình function_name và nĩ đư c g i t dịng l nh c a MATLAB ho c t m t m-file
khác như l nh sau:
>> [output1, output2] = function_name(input1, input2)
Khi làm vi c v i các hàm m-file ta c n phân bi t hai lo i bi n đư c s d ng: Bi n
tồn c c (global variable) và bi n c c b hay bi n đ a phương (local variable).
Bi n tồn c c đư c khai báo theo cú pháp
global var_1 var_2
Các bi n tồn c c đư c xĩa kh i mơi trư ng tính tốn b ng l nh clear [tên bi n].
Bi n c c b ch đư c s d ng trong m t hàm, bi n này khơng đư c li t kê trong
c a s workspace, và do đĩ khơng th tác đ ng đ n đư c trong mơi trư ng làm
vi c.
Ngồi ra, các bi n persistent trong m t hàm cĩ th đư c th ng nh t v i cách khai
báo
persistent var_1 var_2
Trái v i các đ i lư ng đã đư c khai báo b ng global, các đ i lư ng v i khai báo
persistent ch đư c bi t đ n trong hàm mà nĩ đư c khai báo. Do đĩ các hàm khác
khơng th tác đ ng đư c đ n bi n này. Các bi n persistent ch đư c xĩa khi hàm
ch a nĩ thốt ra kh i b nh (clear function_name) ho c khi hàm đư c thay đ i
sau đĩ đư c ghi l i.
Sau đây s trình bày hai ví d đ làm sáng t vi c thao tác đ i v i hàm. Ví d đ u
tiên là vi c so n m t hàm đ v các đư ng trịn cĩ các bán kính khác nhau v i tên
hàm (file_name=fcircle.m, function_name=fcircle). Thơng s đ u vào là bán kính
r , đ u ra là t a đ x, y c a các đi m trên đư ng trịn. Trong hàm này cĩ s d ng
l nh plot đ v đư ng trịn. Hàm này đư c vi t như sau:
function [x,y]=fcircle(r)
% chia nho goc 2pi thanh 100 goc nho bang nhau
goc=linspace(0,2*pi,100);
x=r*cos(goc); % toa do x
y=r*sin(goc); % toa do y
plot(x,y), grid on; % ve duong tron
61
axis('equal'); % hai truc cung ty le
axis([-1.1*r 1.1*r -1.1*r 1.1*r]);
title(['Duong tron co ban kinh r = ',num2str(r)]);
Trong mơi trư ng làm vi c (Workspace) hàm này cĩ hai cách g i v i sau
>> fcircle(3) % ve duong tron ban kinh r = 3
>> [x,y]=fcircle(4)% ve duong tron ban kinh r = 4, va dua
% ra man hinh hai vector chua toa do cac diem
Hãy th c hi n và xem k t qu !
3.3 Các vịng l p và r nhánh
Khi l p trình tính tốn trên d li u ki u ma tr n, vectơ các vịng l p đi u khi n r t
h u ích và đư c s d ng r ng rãi. Matlab đưa ra các d ng vịng l p và r nhánh:
vịng l p for, vịng l p while, c u trúc if-else-end và c u trúc switch-case.
Các vịng l p và r nhánh
for var_=dieukien, L nh for
các l nh
end
while dieukien, L nh while
các l nh
end
if dieukien L nh if (n u .. thì ..)
...
end
switch .. L nh switch (chuy n)
case ..
end
break L nh ng t vịng l p trong for và while
Vịng l p FOR
Vịng l p for cho phép th c hi n m t nhĩm l nh l p l i v i s l n xác đ nh v i cú
pháp như sau
62
for index = start: increment : finish
statement_1,
...,
statement_n
end
Ví d c n xây d ng m t hàm s d ng vịng l p for đ tính t ng các ph n t c a
m t véctơ v. Trên thanh cơng c , ta l a ch n New –> m-file đ m m t c a s
so n th o, trong c a s này ta so n n i dung sau
function tong = tongvector(v)
% ham tinh tong cac phan tu cua mot vector
n=length(v); % tra lai so phan tu, chieu dai cua vector
s = 0; % khoi gan cho tong
for i = 1:n % hoac for i = 1 : 1 : n
s = s + v(i);
end;
tong = s;
% save with file name tongvector.m
V i hàm đ nh nghĩa như v y, ta cĩ th s d ng ngay trên d u nh c trong c a s
l nh, ví d
>> x=[1:2:50];
>> s=tongvector(x)
s = 625
Đ ki m tra v i l nh s n cĩ c a Matlab ta g i l nh sum
>> sum(x)
ans = 625
M t s ví d khác v s d ng l nh for:
n=36; n=5;
for i = 1:n for i = 1:n
a(i) = sin(i*pi/n); for j = 1:n
end a(i,j) = 1/(i+j-1);
end
end
Vịng l p WHILE
While là l nh l p v i s l n l p khơng xác đ nh. Cú pháp
WHILE expression
statements
END
63
Ví d c n tính t ng sau
1 1 1100 1
S =1 + + + ... + = ∑
2 3 100 i=1 i
% Tinh tong S = 1+1/2+1/3+ ... +1/100
% su dung vong lap while % su dung vong lap for
function tongS function tong_Sn
n=100; n=100;
S=0; i=1; S=0;
while i<=n for i=1:n
S = S+1/i; S=S+1/i;
i = i+1; end
end tong=S;
tong=S; disp('Voi n = 100, tong la :')
disp('Voi n = 100, tong la :') disp(tong)
disp(tong)
% Ket qua la % Ket qua la
>> tong_S >> tong_Sn
Voi n = 100, tong la : Voi n = 100, tong la :
5.1874 5.1874
Đ vi t thành m t hàm cĩ giao di n v i ngư i s d ng ta vi t m t hàm như sau
function S = tong_Sn(n)
% su dung vong lap for
T=1;
while T
disp('Vao so duong n: ')
n = input('n = ')
if n>1 T = 0; end
end
tong=0;
for i=1:n
tong=tong+1/i;
end
S=tong;
disp(['Voi n = ', sprintf('%4d',n),' Tong S(n) la'])
disp(S)
% save with file name tong_Sn.m
64
Dư i đây là m t s ví d v vi c s d ng l nh while:
while 1
disp('Vao so n. Neu n <= 0, thi thoat chuong trinh.')
n = input(n = ')
if n <= 0, break, end
r = rank(magic(n))
end
disp('Nhu vay do !.')
E = 0*A; F = E + eye(size(E)); N = 1;
while norm(E+F-E,1) > 0,
E = E + F; F = A*F/N; N = N + 1;
end
Ví d tìm s n l n nh t sao cho t ng sau nh hơn 7
1 1 1n 1
S =1 + + + ... + =∑ < 7
2 3 ni=1 i
function n = timn(S)
% tim so n lon nhat thoa man
% tongS(n) = 1+1/2+1/3+...+1/n < S
% gia tri S > 1 vao tu ban phim
T=1;
while T
disp('Vao so duong S')
S = input('S = ')
if (S>1 & S<10) T = 0; end
end
format long
tong=0; i=0;
while(tong<S)
i = i+1;
tong = tong+1/i;
end
n=i-1;
tong=tong-1/i;
disp('So n tim duoc la: ')
disp(n)
disp('Gia tri cua tong S(n) la: ')
disp(tong)
65
L nh if, c u trúc if - else - end
L nh đi u ki n n u - thì. Cú pháp
IF expression
statements
ELSEIF expression
statements
ELSE
statements
END
Ví d
if I == J
A(I,J) = 2;
elseif abs(I-J) == 1
A(I,J) = -1;
else
A(I,J) = 0;
end
k=5; % ket qua chuong trinh
for i=1:k
for j=1:k >> A
if i==j A =
A(i,j)=4; 4 0 1 0 0
elseif(abs(j-i)==2) 0 4 0 1 0
A(i,j)=1; 1 0 4 0 1
else 0 1 0 4 0
A(i,j)=0; 0 0 1 0 4
end
end
end
Ma tr n A trên cĩ th nh n đư c b ng các l nh sau
>> k=5;
>> d1=4*ones(k,1); d2=ones(k-2,1);
>> a=diag(d1)+diag(d2,-2) +diag(d2, 2)
C u trúc switch-case
L nh chuy n trong nhi u trư ng h p d a trên bi u th c và cĩ d ng t ng quát như
sau
66
SWITCH switch_expr
CASE case_expr,
statement, ..., statement
CASE {case_expr1, case_expr2, case_expr3,...}
statement, ..., statement
...
OTHERWISE,
statement, ..., statement
END
Ví d
method = 'Bilinear';
switch lower(method)
case {'linear','bilinear'}
disp('Method is linear')
case 'cubic'
disp('Method is cubic')
case 'nearest'
disp('Method is nearest')
otherwise
disp('Unknown method.')
end
% ket qua la
Method is linear
Ví d
diem = 1;
switch diem
case 1
disp('Diem gioi')
case 2
disp('Diem tot')
case 3
disp('Diem kha')
case 4
disp('Diem trung binh')
otherwise
disp('Diem kem.')
end
67
Đ thốt ra kh i vịng l p for ho c while, ta s d ng l nh break. Khi chương trình
ch y đ n dịng l nh này thì nĩ t đ ng nh y ra kh i vịng l p cĩ ch a break. Ví d
for p = 7:8
for q = 3:5
for r = 1:2
fprintf('\n %3.0f, %3.0f, %3.0fn' , p, q, r)
end
if q == 4, break; end
end
end
fprintf('\n Xuong dong \n')
% Ket qua la
7, 3, 1n
7, 3, 2n
7, 4, 1n
7, 4, 2n
8, 3, 1n
8, 3, 2n
8, 4, 1n
8, 4, 2n
Xuong dong
Ví d sau đây ch ra s tương tác gi a các hàm khi l p trình. Xét phương trình vi
phân
= =
yɺ f(, t y ) v i đi u ki n đ u y( t0 ) y 0 .
=
Ta c n tìm nghi m y( t ) trong kho ng th i gian t[, t0 tf ].
Đ gi i bài tốn b ng phương pháp Euler, ta s chia kho ng th i gian trên thành N
= − =
đo n, v i đ dài hay cịn g i là bư c th i gian là h()/ tf t0 N . G i zi zt( i )
= + =
là tr g n đúng c a hàm y( t ) t i th i đi m ttihii 0 , ( 1,2,..., N ) , theo
phương pháp Euler dãy các giá tr zi đư c tính theo cơng th c sau
= = + ⋅
z0 y(), t 0 zi z i− 1 h f (,) t i − 1 z i − 1
Khi ti n hành th c hi n trong Matlab ta s so n ba m-file: m t mơ t phương trình
vi phân, m t mơ t phương pháp g n đúng Euler, và m t chương trình chính.
C th đ gi i phương trình vi phân
=1 − = =
yɺ m ( F0 byyt ), ( 0 ) 0 , t0 0, tf =10 .
Ta bi t gnhi m chính xác c a phương trình này là
−
=F0 − (/b mt )
y() tb [1 e ]
68
Dư i đây là ba m-file đư c so n.
% file_name = ptvp_vantoc.m
function dydt=ptvp_vantoc(t,y)
global m b F0 % khai bao cac bien tong the
dydt=1/m*(F0-b*y);
= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
% file_name = Euler_method.m
function [t, z]=Euler_method(ptvp, t0, tf, y0, N)
% Cac bien:
% ptvp - ten file chua ve phai cua phuong trinh vi phan can
giai
% t0 - thoi diem dau
% tf - thoi diem cuoi (t0 < tf)
% y0 - gia tri ham tai thoi diem dau
% N - so doan ma khoang thoi gian (tf-t0) duoc chia ra
global m b F0 % khai bao cac bien tong
h = (tf - t0)/N; % buoc thoi gia
t = t0+[0:N]'*h; % vector chua cac diem c
z(1,:) = y0;
for k = 1:N
z(k + 1,:) = z(k,:)+h*ptvp(t(k),z(k,:));
end
= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
% file_name = tuy_chon__.m
% chuong trinh chinh
global m b F0 % khai bao cac bien tong the
m=1; b=0.2; F0=4; % Gan gia tri cho cac tham so
t0=0; tf=10; N=20; y0=0;
% nghiem gan dung z
[t, z]=Euler_method(@ptvp_vantoc, t0, tf, y0, N);
%nghiem chinh xac
y=F0/b*(1-exp(-b/m.*t));
figure(1)
subplot(211)
plot(t,y,'k',t,z,'-.k','Linewidth',1);
% so sanh ket qua tinh voi nghiem chinh xac
legend('y','z')
ylabel('y, z [m/s]');
subplot(212)
plot(t,abs(z-y),'k','Linewi... khơng khí: cl=1, c n = 0
Qui dao chuyen dong khi bo qua luc can khong khi
2500
2000
1500
y y [m]
1000
500
0
0 500 1000 1500 2000 2500 3000 3500 4000
x [m]
Hình 9 15. Quĩ đ o chuy n đ ng c a viên đ n khi cĩ c n tuy n tính
v i các gĩc b n khác nhau 10, 20, . , 90o
T các mơ ph ng trên, ta cĩ th t ng h p các k t qu trong b ng 9 3.
B ng 9 2. B ng 9 3.
K t qu mơ ph ng khi khơng cĩ c n K t qu mơ ph ng khi cĩ c n t l
Th i Th i
Gĩc b n T m xa T m cao Gĩc b n T m xa T m cao
gian bay gian bay
(đ ) (m) (m) (đ ) (m) (m)
(s) (s)
10 10.60 3146.461 138.319 10 9.95 2435.036 121.402
20 20.90 5905.968 536.595 20 18.60 3705.257 422.214
30 30.55 7950.113 1146.789 30 26.10 4213.168 823.918
40 39.30 9043.155 1895.302 40 32.45 4179.547 1263.938
50 46.85 9044.022 2691.851 50 37.70 3755.920 1691.532
60 52.95 7950.000 3440.366 60 41.80 3046.891 2066.010
70 57.45 5899.847 4050.560 70 44.75 2137.729 2355.927
80 60.20 3138.691 4448.835 80 46.55 1100.429 2538.861
90 61.15 0000.000 4587.154 90 47.15 0000.000 2601.335
c) Trư ng h p l c c n khơng khí t l bình phương v n t c: cl=0, c n = 0.1
202
Qui dao chuyen dong khi bo qua luc can khong khi
400
300
y y [m] 200
100
0
0 100 200 300 400 500 600
x [m]
Hình 9 16. Quĩ đ o chuy n đ ng c a viên đ n khi c n t l bình phương v n t c
v i các gĩc b n khác nhau 10, 20, . , 90o
T các mơ ph ng trên, ta cĩ th t ng h p các k t qu trong b ng 9 4 sau
B ng 9 4. K t qu mơ ph ng khi cĩ c n t l b c nh t và b c 2
Gĩc b n (đ ) Th i gian bay (s) T m xa (m) T m cao (m)
10 5.40 498.857 39.726
20 8.70 578.956 103.061
30 11.35 592.698 173.318
40 13.65 566.398 244.065
50 15.65 507.712 310.553
60 17.35 419.968 368.575
70 18.60 304.410 414.172
80 19.45 162.797 443.653
90 19.70 000.000 453.958
9.4 Bài tốn b n trúng đích
Xét bài tốn: M t qu đ n kh i lư ng m bay t do trong khơng khí ch u l c c n
2
khí đ ng h c FD = cv , v i v là v n t c và c là h s c n. Phương trình vi phân
phân chuy n đ ng c a viên đ n là
203
mxɺɺ= − cvx ɺ,
myɺɺ=− mg − cvy ɺ,
v= xɺ2 + y ɺ 2
Bi t r ng v n t c c a viên đ n khi thốt kh i mi ng là nịng v0 . Hãy xác đ nh gĩc
nghiêng θ đ viên đ n đ t m c tiêu kho ng cách 8 km. S d ng các s li u
−4 2
m = 20 kg, c =3.2 × 10 kg/m ,v0 = 500 m/s , và g = 9.80665 m/s .
Phương pháp gi i bài tốn như sau, trư c h t ta b n th v i gĩc b n θ nào đĩ gi i
phương trình vi phân chuy n đ ng ta nh n đư c đi m ti p đ t v i t m xa
L= L(θ ) , so sánh đi m rơi này m c tiêu ta đư c m t sai l ch
r()θ= L () θ − Lmt
T phương trình sai s này cho ta xác đ nh đư c gĩc b n c n thi t.
Trong matlab ta c n xây d ng các m file sau:
function F = dEqs(t,y) % First-order differential equations.
m = 20; c = 3.2e-4; g = 9.80665;
x_ = y(1); vx = y(2); y_ = y(3); vy = y(4);
v = sqrt(vx^2+vy^2);
xdot = vx; vxdot = 1/m*(-c*v*vx);
ydot = vy; vydot = 1/m*(-m*g-c*v*vy);
F = [xdot, vxdot, ydot, vydot]';
function y = inCond(v0, theta)
y = [0 v0*cosd(theta) 0 v0*sind(theta)]';
function r = residual(theta)
global tSTART tSTOP h k v0
k=k+1
[tSol,ySol] = ode45(@dEqs,[tSTART:h:tSTOP],inCond(v0, theta));
% tim thoi gian chuyen dong
for j = 50:length(tSol)
if ySol(j,3)>=0 && ySol(j+1,3)<0
t_ground(j) = tSol(j); ki = j+1;
end
end
% Tam xa L(theta)
tamxa = ySol(ki, 1); r = tamxa-8000;
function root = newtonRaphson2(func,x,tol)
if nargin == 2; tol = 1.0e-8; end
if size(x,1) == 1; x = x'; end % x must be column vector
for i = 1:30
[jac,f0] = jacobian(func,x);
if sqrt(dot(f0,f0)/length(x)) < tol root = x; return end
204
dx = jac\(-f0);
x = x + dx;
if sqrt(dot(dx,dx)/length(x)) < tol*max(abs(x),1.0)
root = x; return
end
end
error('Too many iterations')
function [jac,f0] = jacobian(func,x)
% Returns the Jacobian matrix and f(x).
h = 1.0e-4; n = length(x);
jac = zeros(n); f0 = feval(func,x);
for i =1:n
temp = x(i);
x(i) = temp + h;
f1 = feval(func,x);
x(i) = temp;
jac(:,i) = (f1 - f0)/h;
end
function main
global tSTART tSTOP h k v0
k=0; %so lan ban thu
tSTART = 0; tSTOP = 150;
h = 0.01; v0 = 500;
theta = 40; % thu ban voi theta = 40 do
theta = newtonRaphson2(@residual,theta);
[tSol,ySol] = ode45(@dEqs,[tSTART:h:tSTOP],inCond(v0, theta));
% tim thoi gian chuyen dong
for j = 50:length(tSol)
if ySol(j,3)>=0 && ySol(j+1,3)<0
t_ground(j) = tSol(j); ki = j+1;
end
end
% Tam xa L(theta)
tSTOP = tSol(ki)
[t,y] = ode45(@dEqs,[tSTART:h:tSTOP],inCond(v0, theta));
plot(y(:,1), y(:,3), 'k-', 'Linewidth', 2), grid on
xlabel('x'), ylabel('y')
disp('Goc ban can tim (do)')
theta
K t qu thu đư c gĩc b n c n thi t đ đ t m c tiêu là θ = 77.8777o . Th i gian bay
c a viên đ n là 91.35 giây. Quĩ đ o chuy n đ ng c a viên đ n như trên hình 9 17.
205
15000
10000
y 5000
0
-5000
0 1000 2000 3000 4000 5000 6000 7000 8000 9000
x
Hình 9 17. Quĩ đ o chuy n đ ng c a viên đ n
9.5 Bài tốn dao đ ng
Con l c đơn
Xét con l c tốn là m t qu c u nh , kh i lư ng m treo vào dây m m khơng kh i
lư ng, khơng giãn. Phương trình vi phân chuy n đ ng c a con l c trong trư ng
h p khơng c n:
ml2ϕɺɺ + mgl sin ϕ = 0 ⇒ϕɺɺ =−(g / l )sin ϕ
N u k đ n l c c n t l v i v n t c h s k , l c c n l
F= kv = klϕɺ , ta cĩ
c ϕ
ml2ϕɺɺ=− mglsin ϕ − kl 2 ϕ ɺ m
ð t y1=ϕ, y 2 = ϕɺ , ta cĩ
Hình 9 18
yɺ1= y 2
1
yɺ =−( mgl sin ykly +=−2 ) (/)sin gl y − (/) kmy
2ml 2 1 2 1 2
Tri n khai trong Matlab
function ydot = conlac_don(t,y)
global m l k
g = 9.81; % gia toc trong truong
v = l*y(2);
ydot = zeros(2,1);
ydot(1) = y(2);
ydot(2) = -g/l*sin(y(1)) - k/m*y(2);
206
Trong ph n sau ta s kh o sát chuy n đ ng c a con l c cĩ kh i lư ng m = 0.25
kg, chi u dài dây l = 0.5 m, v i các gĩc l ch ban đ u khác nhau t 10 đ n 110 đ .
Các k t qu mơ ph ng đư c đưa ra như trên hình 9 19, 9 20 và 9 21.
global m l k
m = 0.25; l = 0.5;
k = 0.0; % khong can
% k = 0.1; % co can
t_start = 0; t_end = 6.0;
phi = [10 : 20 : 110];
for i = 1:length(phi)
y1 = phi(i)*pi/180; y2 = 0; y0 = [y1 y2]';
[t,y] = ode45('conlac_don',[0: 0.02: t_end],y0);
plot(t, y(:,1),'k-', 'linewidth',1), grid on
xlabel('t [s]'), ylabel('\phi [rad]'),
hold on
end
2
1
0
[rad]
φ
-1
-2
0 1 2 3 4 5 6
t [s]
Hình 9 19. ð th theo th i gian c a gĩc l c khi khơng cĩ c n, k = 0
2
1
0
[rad]
φ
-1
-2
0 1 2 3 4 5 6
t [s]
Hình 9 20. ð th theo th i gian c a gĩc l c khi cĩ c n, k = 0.2
207
0.4 0
0.1
0.2
0.2
0
[rad]
y [m]
φ 0.3
-0.2 0.4
0.5
-0.4
0 2 4 6 -0.2 0 0.2
t [s] x [m]
Hình 9 21. Chuy n đ ng c a con l c, v i k = 0.20
Xét trư ng h p dao đ ng nh , ta cĩ th tuy n tính hĩa quanh v trí cân b ng và
nh n đư c phương trình vi phân:
yɺ1= y 2, y ɺ 2 =− (/)(/) g l y 1 − k m y 2
K t qu mơ ph ng trong trư ng h p khơng c n v i các đi u ki n đ u khác nhau
đư c đưa ra như trên hình 9 22. T trên hình v ta th y r ng con l c dao đ ng v i
chu kỳ khơng đ i, khơng ph thu c vào đi u ki n đ u.
0.5
0
[rad]
φ
-0.5
0 1 2 3 4 5 6
t [s]
Hình 9 22. Dao đ ng nh , khơng c n k = 0
Con l c đơn dây treo đàn h i
Xét con l c là m t qu c u nh đư c treo vào lị xo cĩ đ c ng c , chi u dài t
nhiên là l (hình 9 23). H hai b c t do v i các t a đ suy r ng s,ϕ . ð ng năng
và th năng c a h :
1 2 2 21 2
Tmls=2 [() ++ϕɺ sɺ ], Π=−+2 csmgls ()cosϕ
S d ng phương trình Lagrange lo i 2 ta nh n đư c phương trình vi phân chuy n
đ ng c a con l c như sau:
208
mls(+++++ )2ϕɺɺ 2( mlss )ɺ ϕ ɺ mgls ( )sin ϕ = 0
msɺɺ −+− m( l s )ϕɺ2 mg cos ϕ += cs 0
Tri n khai trong Matlab
c
l+ s
function ydot = conlac_danhoi(t,y) ϕ
% ptvp cd cua con lac dan hoi (m, c, L)
% vector y = [q1, q2, v1, v2]'
global m c L
g = 9.81; m
q1 = y(1); q2 = y(2);
qd1 = y(3); qd2 = y(4); Hình 9 23
qd = [qd1; qd2];
M_q = [m, 0; 0, m*(L+q1)^2];
C_q = [ 0, -m*(L+q1)*qd2; m*(L+q1)*qd2, -m*(L+q1)*qd1];
g_q = [c*q1-m*g*cos(q2); m*g*(L+q1)*sin(q2)];
ydot = zeros(4,1);
qdot = qd;
qd_dot = inv(M_q)*(-C_q*qd - g_q);
ydot = [qdot; qd_dot];
% save conlac_danhoi.m
= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
% main program
global m L c
m = 0.5; L = 0.5; c = 50; % gan cac thong so he
t_start = 0; t_end = 3.0;
q10 = 0.05; q20 = 30.0;
y1 = q10; y2 = q20*pi/180;
y3 = 0; y4 = 0;
y0 = [y1 y2 y3 y4]';
[t,y] = ode45('conlac_danhoi',[0: 0.01: t_end],y0);
figure(1)
subplot(2,1,1), plot(t, y(:,1),'k-','linewidth',1), grid on
ylabel('q_1 [m]')
subplot(2,1,2), plot(t, y(:,2),'k-','linewidth',1), grid on
ylabel('q_2 [rad]'), xlabel('t [s]'),
figure(2)
x0 = 0; y0 = 0;
hold on, plot(x0,y0,'o-','linewidth',1)
r = 0.02;
for i = 1:5:length(t)/2
x1(i) =(L+y(i,1))*sin(y(i,3)); y1(i)=-(L+y(i,1))*cos(y(i,3));
x_day = [x0, x1(i)]; y_day = [y0, y1(i)];
209
plot(x_day, y_day, 'k-','linewidth',1), grid on, axis equal
tam1 = [x1(i), y1(i)];
vehinhtron(tam1,r);
end
xlabel('x [m]'), ylabel('y [m]')
axis([-0.8*L 0.8*L -1.5*L 0.05*L]);
figure(3)
for i = 1:1:length(t)
xC(i) = (L+y(i,1))*sin(y(i,3));
yC(i) = -(L+y(i,1))*cos(y(i,3));
end
plot(xC,yC,'k-','linewidth',1), grid on
= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
Dư i đây là k t qu mơ ph ng v i các s li u khác nhau c a lị xo, và các đi u ki n
đ u khác nhau.
0.2 0.1
[m]
0.1 [m] 0.05
1
1
q
q
0 0
0 1 2 3 0 1 2 3
1 1
0 0
[rad]
[rad]
2
2
q
q
-1 -1
0 1 2 3 0 1 2 3
t [s] t [s]
-0.45 -0.45
-0.5
-0.5
-0.55
-0.55
y [m] y
y [m] y -0.6
-0.6
-0.65
-0.7 -0.65
-0.4 -0.2 0 0.2 0.4 -0.4 -0.2 0 0.2 0.4
x [m]
x [m]
210
0 0
-0.1 -0.1
-0.2 -0.2
-0.3
-0.3
y [m]y
y y [m] -0.4
-0.4
-0.5
-0.5
-0.6
-0.2 0 0.2
-0.2 0 0.2 0.4
x [m]
x [m]
m = 0.5; L = 0.5; c = 50; m = 0.5; L = 0.5; c = 150;
q10 = 0.05; (mét) q10 = 0.05; (mét)
q20 = 30.0; (đ ) q20 = 30.0; (đ )
Hình 9 24. K t qu mơ ph ng con l c đàn h i
Con l c kép
Phương trình vi phân chuy n đ ng c a con l c kép nh n
đư c nh phương trình Lagrănge 2 đư c vi t g n l i
d ng ma tr n như sau: l1
Mqq( )ɺɺ+ Cqqq ( , ɺ ) ɺ += gq ( ) 0 ϕ
1 m
v i 1
2 2 l2
m1 l 1+ m 2 l 2 m 2 l 1 l 2cos( q 1 − q 2 )
M( q ) =
mllcos( qq− ) ml 2 ϕ2 m2
2 1 2 1 2 2 2
0m2 l 1 l 2 sin( q 1− q 2 ) qɺ 2
Cq(, qɺ ) = Hình 9 25. Con l c kép
−m l lsin( q − q ) qɺ 0
2 1 2 1 2 1
T
g( q )= (m l + m l ) g sin q m gl sin q .
1 1 2 2 2 2 2 2
Tri n khai trong Matlab
function ydot=conlactoan_kep(t,y)
% vector y = [q1, q2, v1, v2]'
global m1 m2 l1 l2
g = 9.81;
q1 = y(1); q2 = y(2); qd1 = y(3); qd2 = y(4);
qd = [qd1; qd2];
211
M_q = [m1*l1^2+m2*l1^2, m2*l1*l2*cos(q1-q2);
m2*l1*l2*cos(q1-q2), m2*l2^2 ];
C_q = [ 0, m2*l1*l2*sin(q1-q2)*qd2;
-m2*l1*l2*sin(q1-q2)*qd1, 0];
g_q = [g*l1*sin(q1)*(m1+m2); g*m2*l2*sin(q2)];
ydot = zeros(4,1);
qdot = qd;
qd_dot = inv(M_q)*(-C_q*qd - g_q);
ydot = [qdot; qd_dot];
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% main program
global m1 m2 l1 l2
m1 = 0.25; l1 = 0.5;
m2 = 0.25; l2 = 0.5;
t_start = 0; t_end = 6.0;
q10 = 10; q20 = 12;
y1 = q10*pi/180; y2 = q20*pi/180; y3 = 0; y4 = 0;
y0 = [y1 y2 y3 y4]';
[t,y] = ode45('conlactoan_kep',[0: 0.01: t_end],y0);
plot(t, y(:,1),'k-', t, y(:,2),'k--', 'linewidth',1), grid on
legend('q_1','q_2'), xlabel('t [s]')
axis([0 t_end -0.3 0.3]);
Ch y chương trình v i các đi u ki n đ u khác nhau cho ta các k t qu như trên
hình 9 26 và 9 27.
0.3 0
0.2
-0.2
0.1
-0.4
0
-0.1
y y [m] -0.6
-0.2
-0.8
0 2 4 6
t [s] -1
q q -0.4 -0.2 0 0.2
1 2
x [m]
Hình 9 26. K t qu mơ ph ng v i đi u ki n đ u q10 = 10; q20 = 12;
212
0.3 0
0.2
-0.2
0.1
-0.4
0
y [m] y -0.6
-0.1
-0.2 -0.8
0 1 2 3 -1
t [s]
q q -0.4 -0.2 0 0.2
1 2
x [m]
Hình 9 27. K t qu mơ ph ng v i đi u ki n đ u q10 = 10; q20 = 12;
Dao đ ng nh c a con l c elliptic
Xét con l c elliptic như hình 9 28. Xe A cĩ kh i x
lư ng m1 chuy n đ ng trên đư ng ngang, lị xo cĩ đ
m1
c ng c . Dây AB cĩ chi u dài l, kh i lư ng khơng c
đáng k và luơn căng. T i tr ng đư c coi như ch t A
đi m cĩ kh i lư ng m2. Bi t khi x = 0 lị xo khơng b
bi n d ng. l
S d ng phương trình Lagrange lo i 2, ta nh n đư c
ϕ m
phương trình vi phân chuy n đ ng: 2
B
2
(mmxml1++ 2 )ɺɺ 2ϕɺɺ cos ϕ − ml 2 ϕ ɺ sin ϕ += cx 0,
Hình 9 28
2
ml2ϕɺɺ + mlx 2ɺɺcos ϕ + mgl 2 sin ϕ = 0
Trư ng h p xét xét dao đ ng nh , coi sinϕ≈ ϕ , cos ϕ ≈ 1 và b qua s h ng phi
tuy n ϕɺ2 , ta nh n đư c phương trình vi phân dao đ ng nh .
2
(m1+++= mxml 2 )ɺɺ 2ϕɺɺ cx 0, mlxml 2 ɺɺ ++ 2 ϕ ɺɺ mgl 2 ϕ = 0
hay d ng ma tr n
m+ m ml ɺɺ
1 2 2 x c 0 x 0
+ = .
ml ml 2 ϕɺɺ 0 m gl ϕ 0
2 2 2
T đây ta s s d ng Matlab tìm các t n s dao đ ng riêng và các d ng dao đ ng
riêng.
213
function Daodongnho_enliptic
m1 = 50; m2 = 40; % kg
l = 5; % m
g = 9.81; % m/s^2
c = 2000; % N/m
M = [m1 + m2, m2*l; m2*l m2*l^2];
C = [c, 0; 0, m2*g*l];
n = size(M,1);
[V, D] = eig(C,M);
for i=1:n ome(i)=sqrt(D(i,i)); end
ome, v1 = V(:,1), v2 = V(:,2)
x = [0:1:n];
subplot(2,1,1)
plot(x, [0; V(:,1)],'k-','linewidth',1), grid on, ylabel('v_1')
subplot(2,1,2)
plot(x,[0; V(:,2)],'k-','linewidth',1), grid on, ylabel('v_2')
Các t n s riêng và các d ng 0
dao đ ng riêng
1 -0.02
ome = v
1.3727
-0.04
6.4535 0 0.5 1 1.5 2
0.2
v1 =
-0.0062
2 0
-0.0303 v
v2 = -0.2
0 0.5 1 1.5 2
-0.1413
0.0297 Hình 9 29. Các d ng dao đ ng riêng
H dao đ ng ba b c t do
Cho h dao đ ng ba b c t do như trên hình 9 30. Các lị xo tuy n tính cĩ đ c ng
ci , kh i lư ng các v t n ng là mi , (i = 1,2, 3 ). G i xi là d ch chuy n c a các kh i
lư ng k t v trí mà các lị xo khơng b bi n d ng. Áp d ng phương pháp tách v t
(ho c phương trình Lagrange lo i 2) nh n đư c phương trình vi phân chuy n đ ng
d ng ma tr n như sau:
T
Mxɺɺ + Cx = p , x = [x1 x 2 x 3 ]
214
v i
m1 0 0 m g c c
1 1 2
M = 0m 0 , p = m g
2 2 m x1
g 1
0 0 m m3 g
3
c3
c+++ c c c − c − c x c5
1 2 3 5 3 5 2
m2
C =−c3 c 3 +− c 4 c 4 , c4
−c5 − c 4 c 4 + c 5
m3 x3
Cho bi t các thơng s c a h :
Hình 9 30
c1=== c 2 c 310 N/mm, c 4 == c 5 5 N/mm ,
m1 g== m 3 g98.1 N, m 2 g = m 3 g .
1. Tìm v trí cân b ng tĩnh c a h , b ng cách gi i h phương trình đ i s tuy n tính
đ tìm bi n d ng c a các lị xo
Cx= p .
2. Tìm các t n s dao đ ng riêng và các d ng dao đ ng riêng c a h t phương
trình dao đ ng t do
Mxɺɺ + Cx = 0 .
Bài tốn đư c gi i trong Matlab b ng m t m file như sau:
function Daodon_3DOF
m1 = 10; m2 = 5; m3 = m1; % kg
c1 = 10000; % N/m
c2 = c1; c3 = c1; c4 = 5000; c5 = c4;
g = 9.81; % m/s^2
M = diag([m1, m2, m3]);
C = [ c1+c2+c3+c5, -c3, -c5;
-c3, c3+c4, -c4;
-c5, -c4, c4+c5];
p = g*[m1; m2; m3];
x0 = inv(C)*p % tinh do dan tinh cua cac lo xo
n = size(M,1);
[V, D] = eig(C,M);
for i=1:n ome(i)=sqrt(D(i,i)); end
ome'
v1 = V(:,1)
v2 = V(:,2)
v3 = V(:,3)
215
x = [0:1:n];
subplot(3,1,1)
plot(x,[0; V(:,1)],'k-','linewidth',1), grid on, ylabel('v_1')
subplot(3,1,2)
plot(x,[0; V(:,2)],'k-','linewidth',1), grid on, ylabel('v_2')
subplot(3,1,3)
plot(x,[0; V(:,3)],'k-','linewidth',1), grid on, ylabel('v_3')
ð dãn tĩnh c a lị xo
x0 =
0.0123
0.0201
0.0260
Các t n s dao đ ng riêng
ome = 0.4
21.2572
1 0.2
48.5851 v
68.4662
0
Các véctơ d ng riêng 0 1 2 3
v1 = 0.5
0.1053
2 0
0.1875 v
0.2671
-0.5
v2 = 0 1 2 3
0.1756 0.5
0.2847
3 0
-0.1692 v
v3 =
-0.5
-0.2410 0 1 2 3
0.2895
-0.0066 Hình 9 31. Các d ng dao đ ng riêng
9.6 Phân tích đ ng h c cơ c u
Bài tốn phân tích đ ng h c cơ c u d a trên các phương trình liên k t thư ng d n
đ n vi c gi i h phương trình đ i s phi tuy n. Sau đây trình bày vi c gi i h
phương trình đ i s phi tuy n b ng phương pháp Newton Raphson.
Bài tốn: c n tìm nghi m x th a mãn h phương trình đ i s phi tuy n
fx0(),= f ∈RRn , x ∈ n
hay vi t dư i d ng h n phương trình
fxxxk(1 , 2 ,..., n )= 0, k = 1,2,..., n .
216
ð thi t l p các bư c c a bài tính, trư c h t ta khai tri n Taylor hàm f( x ) t i lân
c n x0
∂f
fx(+=+δ xfx )() () xx δ +O () δ x 2
0 0∂x 0
2
=fx()()0 + Jxx 0 δ +O () δ x
v i J( x0 ) là ma tr n Jacobi đư c xác đ nh t i đi m x0
∂f1 ∂ f 1 ∂ f 1
..
∂xx1 ∂ 2 ∂ xn
∂f ∂ f ∂ f
∂f 2 2.. 2
Jxx()()0= 0 = ∂xx1 ∂ 2 ∂ xn () x0
∂x .. .. .. ..
∂f ∂ f ∂ f
nn.. n
∂xx1 ∂ 2 ∂ xn
Gi s x0 là m t x p x ban đ u c a nghi m c n tìm và đ (x0 + δ x ) là m t giá tr
g n nghi m hơn (chính xác hơn), ta cho f( x0 +δ x ) = 0 . T đĩ nh n đư c m t h
phương trình đ i s tuy n tính đ i v i δx
−1
Jx()0δ x= − fx () 0 suy ra δx= − Jx()0 ⋅ fx () 0 .
L y giá tr x1= x 0 + δ x là x p x g n đúng m i c a nghi m. L p l i nhi u l n
cơng vi c trên, n u phương pháp h i t s cho ta nghi m c a h phương trình đ i
s phi tuy n.
Thu t gi i
Bư c 1. Kh i gán k = 0 , ch n x p x ban đ u x(0) .
Bư c 2. Tính f( x(k ) ) . N u ||f ( x(k ) )||< ε thì d ng, n u khơng thì ti p t c t 3.
Bư c 3. Tính ma tr n Jacobi t i x(k ) , t c là J( x(k ) ).
Bư c 4. Gi i Jx()()kδ x= − fx () () k đ tìm δx(k ) .
Bư c 5. L y x(1)k+ = x () k + δ x .
Bư c 6. Tăng k , k= k + 1 . N u k > M v i M là s bư c l p đã ch n trư c, thì
d ng. N u khơng, ti p t c t Bư c 2.
Trong thu t gi i trên ta đã thốt ra kh i vịng l p trong hai tình hu ng. Khi khơng
đ t đư c đ chính xác c n thi t, ta bu c ph i k t thúc sau m t s bư c l p nh t
đ nh (bư c 6). Quá trình l p s k t thúc t t n u như ta đ t đư c đ chính xác ch n
trư c (bư c 2). Chú ý r ng đây ta ch n đi u ki n d ng b ng cách xét chu n
Euclide c a vectơ f. Cũng cĩ th thay đi u ki n này b ng các đi u ki n khác như
217
||δx ||< ε .
S thành cơng c a phương pháp ph thu c vào vi c ch n x p x ban đ u. N u ch n
đư c đi m xu t phát t t, phương pháp h i t r t nhanh. Ngư c l i, thì khĩ cĩ th
đốn đư c và yêu c u thu t tốn ph i d ng l i sau m t s bư c l p nh t đ nh.
Khi áp d ng phương pháp Newton Raphson đ gi i bài tốn, ngồi vi c nh p các
hàm f( x ) vào, cịn yêu c u ph i cĩ ma tr n Jacobi J( x ) . Trong trư ng h p n u
vi c đ o hàm ∂fi/ ∂ x j g p khĩ khăn, ho c khĩ th c hi n đư c ta cĩ th s d ng
x p x sau đây đ tính ma tr n jacobi
∂fi fi(xe+ j h ) − f i () x
≈
∂xj h
v i h là bư c nh và ej là véctơ đơn v theo hư ng c a tr c x j .
Phân tích đ ng h c cơ c u b n khâu b n l .
Cho cơ c u 4 khâu b n l OABC như hình 9 y
32. Các kích thư c c a cơ c u OA = l2, AB = B
l3, BC = l4, dx và dy. Hãy vi t các phương
trình liên k t cho cơ c u, t đĩ gi i bài tốn
v trí c a cơ c u b ng phương pháp Newton q
A 2 q3
Raphson. Cho bi t qq1= 10 + t , hãy xác
đ nh các gĩc ϕ3(t ) và ϕ4(t ) t i các th i đi m q1
dy C
tk , k = 1,2,3,... ng v i các gĩc quay c a O
x
thanh OA, qq1= 10 + tk . Cho bi t các
dx
thơng s c a cơ c u l1=0.20, l 2 = 0.60,
Hình 9 32
l3 =0.40, dx = 0.45, d y = 0.12 m.
T hình v ta vi t đư c các phương trình liên k t
fqqq1(,,) 1 2 3= l 1 cos+cos ql 1 2 qdl 2 −−=x 3 cos q 3 0
fqqq2(,,) 1 2 3= l 1 sin ql 1 + 2 sin qdl 2 −−y 3 sin q 3 = 0
Tính đư c các ma tr n jacobi
−l2sin q 2 l 3 sin q 3 −l1sin q 1
Jq = , Jq =
23 lcos q− l cos q 1 lcos q
2 2 3 3 1 1
ð o hàm các phương trình liên k t theo th i gian cho ta phương trình đ gi i bài
tốn v n t c và gia t c:
J qɺ+ J q ɺ = 0 ⇒qɺ =− J−1 J q ɺ
q2323 q 1 1 23q23 q 1 1
J qɺɺ+ Jɺ q ɺ + Jq ɺɺ +J ɺ q ɺ =⇒0 qɺɺ=− J−1 ( Jɺ q ɺ + Jq ɺɺ + Jɺ q ɺ )
q2323 q 23 23 q 1 1 q 1 1 23q23 q 23 23 q 1 1 q 1 1
218
v i
−qɺ lcos q q ɺ l cos q −lcos q
ɺ 2 2 2 3 3 3 ɺ 1 1
Jq = , Jq = qɺ1
23 −qɺ lsin q q ɺ l sin q 1 −lsin q
2 2 2 3 3 3 1 1
Tri n khai trong Matlab v i các m file
1. Các phương trình liên k t
function f = bkbl_ ptlk(q1, q2, q3)
global l1 l2 l3 dx dy
f1 = l1*cos(q1) + l2*cos(q2) - l3*cos(q3) - dx;
f2 = l1*sin(q1) + l2*sin(q2) - l3*sin(q3) - dy;
f=[f1; f2];
2. Các ma tr n Jacobi
function [J1, J23] = bkbl_Jacob(q1,q2,q3)
global l1 l2 l3 dx dy
J1 = [-l1*sin(q1); l1*cos(q1)];
J23 = [-l2*sin(q2), l3*sin(q3);
l2*cos(q2), -l3*cos(q3)];
3. ð o hàm c a ma tr n Jacobi
function [dJ1, dJ23] = bkbl_Jacdot(q1,q2,q3, dq1, dq2,dq3)
global l1 l2 l3 dx dy
dJ1 = -l1*dq1*[cos(q1); sin(q1)];
dJ23 = [-dq2*l2*cos(q2), dq3*l3*cos(q3);
-dq3*l2*sin(q2), dq3*l3*sin(q3)];
4. Chương trình chính
function bkbl_main
global l1 l2 l3 dx dy
l1 = 0.12; l2 = 0.70; l3 = 0.40; dx = 0.50; dy = 0.10;
%cho goc cua tay quay OA
q10 = 0.5; % rad
omega = 1.0; % rad/s
t = linspace(0, 5*pi/omega, 360);
a(1) = 0.2; b(1) = 0.542; % chon xap xi ban dau cho q2, q3
for i=1:length(t)
q1(i)= q10+omega*t(i);
dq1(i) = omega; ddq1(i) = 0;
f = ptlk_bkbl(q1(i), a(1), b(1));
k = 1;
while (norm(f,2) > 1.0e-10 && k < 30)
[J1, J23] = Jacob_bkbl(q1(i), a(1), b(1));
deltax = inv(J23)*(-f);
a(2) = a(1)+deltax(1);
219
b(2) = b(1)+deltax(2);
a(1) = a(2); b(1) = b(2);
f = ptlk_bkbl(q1(i), a(1), b(1));
k = k+1;
end
q2(i)=a(1); q3(i)=b(1);
% van toc
[J1, J23] = Jacob_bkbl(q1(i), q2(i), q3(i));
dq23 = -inv(J23)*J1*dq1(i);
dq2(i) = dq23(1); dq3(i) = dq23(2);
% gia toc
[dJ1, dJ23] =
Jacdot_bkbl(q1(i),q2(i),q3(i),dq1(i),dq2(i),dq3(i));
ddq23 = -inv(J23)*(dJ23*dq23 + J1*ddq1(i) + dJ1*dq1(i));
ddq2(i) = ddq23(1); ddq3(i) = ddq23(2);
end
figure(1)
plot(t,q2,'k-', t, dq2,'k--', 'linewidth',1), grid on
xlabel('t [s]'), legend('q_2', 'dq_2')
axis([0 max(t) -0.5 1.1])
figure(2)
plot(t,q3,'k-', t, dq3,'k--', 'linewidth',1), grid on
xlabel('t [s]'), legend('q_3', 'dq_3')
axis([0 max(t) -0.8 2.2])
x0 = 0; y0 = 0; r = 0.005;
figure(3), hold on
plot(x0,y0,'o-','linewidth',1), plot(dx,dy,'o-','linewidth',1)
for i = 1:5:length(t)/2
x1(i) = l1*cos(q1(i)); x2(i) = x1(i) + l2*cos(q2(i));
y1(i) = l1*sin(q1(i)); y2(i) = y1(i) + l2*sin(q2(i));
x4(i) = dx; x3(i) = dx + l3*cos(q3(i));
y4(i) = dy; y3(i) = dy + l3*sin(q3(i));
x_day = [x0, x1(i), x2(i), x3(i), x4(i), x0];
y_day = [y0, y1(i), y2(i), y3(i), y4(i), y0];
plot(x_day, y_day, 'k-','linewidth',1), grid on, axis equal
tam1 = [x1(i), y1(i)]; vehinhtron(tam1,r);
tam2 = [x2(i), y2(i)]; vehinhtron(tam2,r);
end
axis([-0.2 0.8 -0.2 0.6])
ð th c a các gĩc q2, q 3 cùng các đ o hàm qɺ2, q ɺ 3 đư c th hi n như trên hình 9
33. C u hình c a cơ c u t i m t s v trí đư c ch ra trên hình 9 34.
220
1 2
0.5 1
0 0
-0.5
0 5 10 15 0 5 10 15
t [s] t [s]
q dq
q2 dq2 3 3
Hình 9 33. ð th các gĩc q2 và q3 theo th i gian
0.6
0.5
0.4
0.3
0.2
0.1
0
-0.1
-0.2
-0.2 0 0.2 0.4 0.6 0.8
Hình 9 34. C u hình cơ c u b n khâu b n l
9.7 Bài tốn đ ng h c ngư c rơb t
Trong bài tốn đ ng h c ngư c rơb t, ta c n xác đ nh các gĩc kh p – hay t a đ
kh p – khi mu n bàn k p c a rơb t m t v trí mong mu n. Trong ph n này ta xét
m t tay máy hai b c t do ph ng cĩ sơ đ như trên hình 9 35. C n tìm các t a đ
suy r ng q1, q 2 đ bàn k p E m t v trí mong mu n cho trư c xE, y E . Bi t chi u
dài các khâu là OA= L1 = 0.50 m , AE= L2 = 0.70 m .
ð i v i bài tốn này, rơb t cĩ c u trúc khá đơn gi n, ta cĩ th gi i b ng phương
pháp hình h c, b ng cách gi i tam giác OAE khi bi t chi u dài ba c nh c a nĩ.
221
đây ta s s d ng phương pháp gi i h
phương trình phi tuy n, đ gi i bài tốn này, E
q
vì l phương pháp cĩ th đư c m r ng d 2
yE
dàng cho các rơb t cĩ s b c t do l n hơn và A
cĩ c u trúc ph c t p hơn.
M i liên h gi a t a đ đi m E v i các t a đ
q1
suy r ng đư c xác đ nh b i O
xE
xE = l1cos q 1 + l 2 cos( q 1 − q 2 )
yE = l1sin q 1 + l 2 sin( q 1 − q 2 )
Hình 9 35
ðây là m t h hai phương trình phi tuy n đ i
v i hai n q1, q 2 . Phương pháp Newton Raphson đư c s d ng đ gi i h này, v i
ma tr n Jacobi như sau
−l1sin q 1 l 2 sin( q 1 − q 2 )
J =
q lcos q− l cos( q − q )
1 1 2 1 2
Tri n khai trong Matlab v i các m file sau:
1. Phương trình liên k t
function f = taymay2dof_bkbl(q1, q2, xE, yE)
global l1 l2
f1 = l1*cos(q1) + l2*cos(q1 - q2) - xE;
f2 = l1*sin(q1) + l2*sin(q1 - q2) - yE;
f=[f1; f2];
2. Ma tr n Jacobi
function Jq = taymay2dof_Jacob(q1, q2)
global l1 l2
Jq = [-l1*sin(q1), l2*sin(q1 - q2);
l1*cos(q1), -l2*cos(q1 - q2)];
3. Chương trình chính
function taymay2dof_main
global l1 l2
l1 = 0.50; l2 = 0.70;
n = 20; % so diem chia
xE = linspace(1.1, 0.1, n);
yE = linspace(0.1, 1.1, n);
a(1) = 0.5; b(1) = 0.2; % chon xap xi ban dau cho q1, q2
for i=1:n
f = taymay2dof_ptlk(a(1), b(1), xE(i), yE(i));
k = 1;
while (norm(f,2) > 1.0e-10 && k < 30)
222
Jq = taymay2dof_Jacob(a(1), b(1));
dq = inv(Jq)*(-f);
a(2) = a(1)+dq(1); b(2) = b(1)+dq(2);
a(1) = a(2); b(1) = b(2);
f = taymay2dof_ptlk(a(1), b(1), xE(i), yE(i));
k = k+1;
end
q1(i) = a(1); q2(i) = b(1);
end
k = 1:1:n;
figure(1)
plot(k, q1,'k-', k, q2,'k--', 'linewidth',1), grid on
legend('q_1', 'q_2'), xlabel('k = 1..n'), ylabel('[rad]')
axis([0 n+1 0 2.1])
figure(2)
x0 = 0; y0 = 0; plot(x0,y0,'o-','linewidth',1), hold on
for i = 1:n
xA(i) = l1*cos(q1(i)); xE(i) = xA(i)+l2*cos(q1(i)-q2(i));
yA(i) = l1*sin(q1(i)); yE(i) = yA(i)+l2*sin(q1(i)-q2(i));
x_day = [x0, xA(i), xE(i)];
y_day = [y0, yA(i), yE(i)];
plot(x_day, y_day, 'k-','linewidth',1), grid on, axis equal
end
Ch y chương trình cho ta các k t qu như trong b ng 9 5. ð th c a các gĩc kh p
và c u hình tương ng c a rơb t đư c đưa ra như trên hình 9 36.
2 1
0.8
1.5
0.6
1 y [m] 0.4
[rad]
0.2
q
0.5 1
0
q2
0 -0.2
0 5 10 15 20 0 0.5 1
k = 1..n x [m]
Hình 9 36. ð th các t a đ q1, q 2 và c u hình c a rơb t
223
B ng 9 5. K t qu tính tốn bài tốn đ ng h c ngư c
Cho trư c Gi i tìm đư c
k xE [m] yE [m] q1 [rad] q2 [rad]
1 1.1000 0.1000 0.5701 0.8152
2 1.0474 0.1526 0.7334 0.9965
3 0.9947 0.2053 0.8806 1.1411
4 0.9421 0.2579 1.0181 1.2600
5 0.8895 0.3105 1.1488 1.3584
6 0.8368 0.3632 1.2738 1.4387
7 0.7842 0.4158 1.3931 1.5024
8 0.7316 0.4684 1.5063 1.5499
9 0.6789 0.5211 1.6123 1.5816
10 0.6263 0.5737 1.7098 1.5974
11 0.5737 0.6263 1.7974 1.5974
12 0.5211 0.6789 1.8739 1.5816
13 0.4684 0.7316 1.9380 1.5499
14 0.4158 0.7842 1.9889 1.5024
15 0.3632 0.8368 2.0257 1.4387
16 0.3105 0.8895 2.0478 1.3584
17 0.2579 0.9421 2.0545 1.2600
18 0.2053 0.9947 2.0444 1.1411
19 0.1526 1.0474 2.0148 0.9965
20 0.1000 1.1000 1.9596 0.8152
224
Tài li u tham kh o
[1] Ottmar Beucher: Matlab und Simulink: Grundlegende Einführung für
Studenten und Ingenierure in der Praxis. Pearson Studium Verlag; Auflage 3
(2006).
[2] Helmut Bode: MATLAB Simulink Analyse und Simulation dynamischer
Systeme. Springer Verlag, 2006.
[3] Jưrg Kahlert: Simulation technischer Systeme: Eine beispielorientierte
Einführung. Vieweg & Sohn Verlag, Wiesbaden, 2004.
[4] Jaan Kiusalaas: Numerical Methods in Engineering with MATLAB.
Cambridge University Press, 2005.
[5] David McMahon: MATLAB Demystified A Self Teaching Guide. McGraw
Hill, 2007.
[6] John H. Mathews, Kurtis D. Fink: Numerical methods using MATLAB. 3.
Ed. Prentice Hall 1999.
[7] Dieter Pietruszka: MATLAB in der Ingenieurpraxis. Modellbildung,
Berechnung und Simulation. 2. Ed. Vieweg+Teubner Verlag, 2006.
[8] L.F. Shampine, I. Gladwell, S. Thomson: Solving ODEs with Matlab.
Cambridge University Press, 2003.
[9] Won Young Yang, Wenwu Cao, Tae Sang Chung, John Morris: Applied
Numerical Methods Using Matlab. John Wiley & Sons, Inc., 2005.
[10] D. Gross, W. Hauger, W. Schnell, J. Schrưder: Technische Mechanik, Band
1: Statik. (8. Auflage). Springer Verlag, Berlin 2004.
[11] D. Gross, W. Hauger, W. Schnell, J. Schrưder: Technische Mechanik, Band
2: Elastostatik (8. Auflage). Springer Verlag, Berlin 2005.
[12] D. Gross, W. Hauger, W. Schnell, J. Schrưder: Technische Mechanik, Band
3: Kinetik (8. Auflage). Springer Verlag, Berlin 2004.
[13] Dankert/Dankert: Technische Mechanik: Statik, Festigkeitslehre,
Kinematik/Kinetik. (3. Auflage). Teubner B.G. 2004.
[14] R.C. Hibbele: Engineering Mechanics –Strength of Materials (10.Edition).
Prentice Hall, Upper Saddle River , New Jersey 2004.
[15] Nguy n Hồng H i. Nguy n Vi t Anh: L p trình Matlab và ng d ng. NXB
Khoa h c và K thu t, Hà N i 2006.
[16] Nguy n Văn Khang: Dao đ ng k thu t (in l n 4). NXB Khoa h c và K
thu t, Hà N i 2005.
[17] ðinh Văn Phong: Phương pháp s trong cơ h c. Nhà xu t b n Khoa h c và
K thu t, 1999.
225
[18] Nguy n Phùng Quang: Matlab & Simulink dành cho k sư đi u khi n t
đ ng. NXB Khoa h c và K thu t, Hà N i 2006.
[19] ð Sanh: Cơ h c k thu t, t p 1 và t p 2. Nhà xu t b n Giáo d c, Hà n i
2008.
[20] Ph m Th Ng c Y n, Ngơ H u Tình, Lê T n Hùng và Nguy n Th Lan
Hương: Cơ s Matlab & ng d ng. NXB Khoa h c và K thu t, Hà N i,
2007.
[21] Lê Quang Minh, Nguy n Văn Vư ng: S c b n v t li u, T p 1,2,3. NXB
Giáo d c, Hà n i 1997.
[22] ð ng Vi t Cương, Nguy n Nh t Thăng, Nh Phương Mai: S c b n v t li u,
t p 1 và 2. NXB Khoa H c và K Thu t, 2002.
[23] Ph m Minh Hồng: Maple và các bài tốn ng d ng. NXB Khoa h c và K
thu t, 2008.
226
Các file đính kèm theo tài liệu này:
- giao_trinh_co_so_matlab_va_simulink_nguyen_quang_hoang.pdf