Ch-ơng trình này hiện đang đ-ợc sử dụng nhiều trong nghiên cứu các vấn đề tính toán của các bài toán kĩthuật nh-: Lý thuyết điều khiển tự động, kĩ thuật thống kê xác suất, xử lý số các
Trang 1Phần 1 Ngôn ngữ lập trình Matlab Bài 1 Giới thiệu phần mềm Matlab 1.1 Matlab là gì?
Ch-ơng trình MATLAB là một ch-ơng trình viết cho máy tính PC nhằm hỗ trợ cho các tính toán khoa học và kĩ thuật với các phần tử cơ bản là ma trận trên máy tính cá nhân do công ty
"The MATHWORKS" viết ra
Thuật ngữ MATLAB có đ-ợc là do hai từ MATRIX và LABORATORY ghép lại Ch-ơng
trình này hiện đang đ-ợc sử dụng nhiều trong nghiên cứu các vấn đề tính toán của các bài toán kĩthuật nh-: Lý thuyết điều khiển tự động, kĩ thuật thống kê xác suất, xử lý số các tín hiệu, phân
tích dữ liệu, dự báo chuổi quan sát, v.v…
Matlab đ-ợc điều khiển bởi tập các bộ lệnh, t-ơng tác bằng bàn phím trên cửa sổ điều khiển,
đồng thời Matlab còn cho phép khả năng lập trình với cú pháp thông dịch lệnh hay còn gọi là script file Các lệnh, bộ lệnh của Matlab lên đến con số hàng trăm và ngày càng đ-ợc mở rộng bởi các phần Tools box trợ giúp, hay các hàm ứng dụng tạo ra bởi ng-ời sử dụng
Các lệnh của Matlab rất mạnh và hiệu quả cho phép giải các loại hình toán khác nhau
và đặc biệt hiệu quả cho các hệ ph-ơng trình tuyến tính cũng nh- thao tác trên các bài toán ma trận Khônng những thế Matlab còn rấtt hữu hiệu trong việc trợ giúp thao tác và truy xuất đồ hoạ trong không gian 2D cũng nh- 3D cũng khả năng tạo hoạt cảnh cho việc mô tả bài toán một cách sinh động Cùng với trên 25 Tools box (th- viện trợ giúp) khác nhau Matlab đ-a đến cho ng-ời
sử dụng sự lựa chọn hoàn chỉnh và phong phú về các công cụ trợ giúp đắc lực cho những lĩnh vực khác nhau trên con đ-ờng nghiên cứu đã lựa chọn
1.2 Môi tr-ờng làm việc của Matlab
Matlab là ch-ơng trình phần mềm trợ giúp cho việc tính toán và hiển thị Matlab có thể chạy trên hầu hết các hệ máy tính từ máy tính cá nhân đến các hệ máy tính lớn super computer
MATLAB 5.1, 5.2, 6.5 …7.0 hoạt động trong môi tr-ờng WINDOWS Ch-ơng trình Matlab có thể chạy liên kết với các ch-ơng trình ngôn ngữ cấp cao nh- C, C++, Fortran, … Việc cài đặt MATLAB thật dễ dàng và ta cần chú ý việc dùng thêm vào các th- viện trợ giúp hay muốn liên kết phần mềm này với một vài ngôn ngữ cấp cao
1.2.1 Màn hì nh Matlab
Sau khi khởi động màn hình Matlab có giao diện nh- trên hình:
Trang 2Cửa sổ th- mục hiện tại Current Directory Browser (1): giúp ng-ời sử dụng có thể nhanh
chóng nhận biết, chuyển đổi th- mục hiện tại của môi tr-ờng công tác, mở file, tạo th- mục mới
Cửa sổ Command Windows (2): Đây là cửa sổ chính của Matlab Tại đây ta thực hiện toàn
bộ công việc nhập dữ liệu và xuất kết quả tính toán dấu nhấp nháy >> báo hiệu ch-ơng trình sẵn sàng hoạt động
Cửa sổ Command history (3): L-u trữ tất cả các lệnh đã thực hiện trong cửa sổ Comman
Windows(2) có thể lặp lại lệnh cũ bằng cách nháy kép chuột vào lệnh đó Cũng có thể cắt, sao hoặc xoá cả nhóm lệnh hoặc từng lệnh riêng rẽ
Cửa sổ Workspace browser (4): Tất cả các biến, các hàm tồn tại trong môi tr-ờng công tác
đều đ-ợc hiện tại cửa sổ này
Cửa sổ Editor : soạn thảo ch-ơng trình
Ngoài ra còn có Cửa sổ trợ giúp Help rất phong phú giúp ng-ời sử dụng trong quá trình tính toán Bằng câu lệnh Help [command]
Caự c phớm chửự c naờ ng ủaở t bieọ t (chuyeõ n duứ ng) vaứ caự c leọ nh duứ ng cho heọ thoỏ ng:
Ctrl + P hoaở c Goùi laùi leọnh vửứa thửùc hieọn trửụực ủoự tửứ cuỷa soồ leọnh cuỷa MATLAB
Ctrl + n hoaở c Goùi laùi leọnh ủaừ ủaựnh vaứo trửụực ủoự
Ctrl + f hoaở c Chuyeồn con troỷ sang phaỷi moọt kớ tửù
Ctrl + b hoaở c Chuyeồn con troỷ sang traựi moọt kớ tửù
Ctrl + l hoaở c Ctrl + Chuyeồn con troỷ sang phaỷi moọt tửứ
Ctrl + r hoaở c Ctrl + Chuyeồn con troỷ sang traựi moọt tửứ
Ctrl + a hoaở c HOME Chuyeồn con troỷ veà ủaàu doứng
Ctrl + k Xoaự cho ủeỏn doứng cuoỏi cuứng
Trang 3Caự c leọ nh heọ thoỏ ng :
Caực leọnh treõn cuừng nhử sau naứy ủửụùc vieỏt tửứ cửỷa soồ leọnh cuỷa MATLAB
Casesen off Boỷ thuoọc tớnh phaõn bieọt chửừ hoa vaứ chửừ thửụứng
Casesen on Sửỷ duùng thuoọc tớnh chửừ hoa vaứ chửừ thửụứng
clc Xoựa cửỷa soồ doứng leọnh
clf Xoự cửỷa soồ ủoà hoùa
computer Leọnh in ra moọt xaõu kớ tửù cho bieọt loaùi maựy tớnh
exit hoaở c quit Thoaựt khoỷi chửụng trỡnh MATLAB
Ctrl + C Dửứng chửụng trỡnh khi noự rụi vaứo tỡnh traùng laởp khoõng keỏt thuực
Help Xem trụù giuựp
Input Nhaọp dửừ lieọu tửứ baứn phớm
Load Taỷi caực bieỏn ủaừ lửu trong moọt file ủửa vaứo vuứng laứm vieọc
Pause Ngửứng taùm thụứi chửụng trỡnh
Save Lửu giửừ caực bieỏn vaứo file coự teõn laứ matlab.mat
Demo Leọnh cho pheựp xem caực chửụng trỡnh maóu (minh hoùa khaỷ naờng laứm vieọc
cuỷa MATLAB)
Edit Leọnh ủeồ vaứo cửỷa soồ soaùn thaỷo (duứng ủeồ vieỏt moọt chửụng trỡnh)
1.2.2 Các tệp trong Matlab
+ Tệp * m: Tệp soạn thảo ch-ơng trình Scrippts, hàm function, l-u trữ số liệu
+ Tệp *.mat: Tệp l-u trữ số liệu (ở cửa sổ Workspace ) >> save ; >> load *.mat
+ Tệp *.fig: tệp l-u trữ các tệp đồ hoạ
+ Tệp *.mdl : Tệp sơ đồ khối Simulink
1.3 Đồ hoạ trong Matlab
MATLAB có các công cụ hết sức hữu hiệu để hiển thị các véc tơ và ma trận ở dạng đồ thị cũng nh- việc chú thích và in ấn đồ thị này một cách trực quan
1.4 Lập trình ứng dụng trong Matlab
Matlab là một phần mềm rất đ-ợc -a chuộng cho các lập trình tính toán trong kỹ thuật hiện nay
Nó hầu nh- đ-ợc phổ biến rộng khắp trong các tr-ờng đại học ở nhiều n-ớc.Với Matlab công việc tính toán trở nên đơn giản và nhẹ nhàng hơn so với nhiều ngôn ngữ lập trình khác nhờ
đã thiết kế sẵn các toolbox giúp cho ng-ời sử dụng:
Control System Tollbox: là nền tảng của họ toolbox thiết kế điều khiển bằng Matlab Nó chứa các hàn cho việc mô phỏng, phân tích và thiết kế các hệ thống trong tự động điều khiển
Frequency Domain System Identification Tollbox: Bao gồm các M -file giúp cho việc mô phỏng các hệ thống tuyến tính trên cơ sở phép đo đáp ứng tần số của hệ thống
Trang 4 Fuzzy Logic Tollbox: Cung cấp một tập hợp đầy đủ các công cụ cho việc thiết kế, mô phỏng
và phân tích các hệ thống logic mờ (Fuzzy Inferencs)
Higher Order Spectral Analysis Toolbox: cung cấp các công cụ cho việc xử lý tín hiệu dùng phổ bậc cao Các ph-ơng này đặc biệt hữu dụng cho phân tích các tín hiệu có nguồn gốc từ một quá trình phi tuyến hay bị nhiễu phi Gaussian ( non-Gaussian noise) xâm nhập
Image Processing Toolbox: chứa các công cụ cho việc sử lý ảnh Nó bao gồm các công cụ cho việc thiết kế các bộ lọc và l-u trữ ảnh, nâng cấp ảnh, phân tích và thống kê
Model Predictive Control Tollbox: đặc biệt hữu dụng cho các ứng dụng điều khiển với nhiều biến ngõ vào (input) và ngõ ra (output) mà phần lớn có các giới hạn nhất là trog kỹ thuật hóa chất
Mu-Analysis And Syntheris Tollbox: chứa các công cụ chuyên môn hóa cho điều khiển tối -u hóa; Đặc biệt trong lĩnh vực robot cao cấp và các hệ thống đa biến tuyến tính
Signal Processing Tollbox: chứa các công cụ xử lý tín hiệu Các ứng dụng bao gồm: Audio (Đĩa compact, băng digital), video (digital HDTV, xử lý và nén ảnh), viễn thông (fax, telephone), y học, địa lý
Non-linear Control Design Tollbox: cho phép thiết kế các hệ thống điều khiển tuyến tính và phi tuyến, sử dụng kỹ thuật tối -u hóa trên cơ sở miền thời gian
Optimization Tollbox: Các lệnh dùng cho sự tối -u hóa các hàm tuyến tính và phi tuyến tổng quát
Symbolic Match Toolbox: Bao gồm các công cụ cho việc tính toán trên các biểu thức
System Identification Toolbox: Tập hợp các công cụ cho -ớc l-ợng và nhận dạng (tìm mô hình toán học cho một hệ thống vật lý)
Robust Control System: Các công cụ cho phép phân tích và tổng hợp các hệ thống điều khiển bằng robot
Simulink: Mô phỏng động học tuyến tính và phi tuyến
Ngoài ra còn có các toolbox khác nh- NAG Foundation Toolbox, Quantitative Feedback Workshop, Spline Toolbox, Statics Toolbox
Một khả năng khác cần phải nhắc đến của Matlab là biểu diễn data bằng đồ thị hai chiều,
ba chiều bằng các lệnh (hàm) khá đơn giản
Trang 5Bµi 2: Xö lý d÷ liÖu d¹ng m¶ng trong Matlab
<Tªn biÕn>=<Begin>: <Step>: <Limit>
SÏ t¹o ra vÐc t¬ hµng cã phÇn tö ®Çu tiªn lµ gi¸ trÞ <Begin>, gia sè gi÷a c¸c phÇn tö lµ <Step>, gi¸ trÞ phÇn tö cuèi cïng kh«ng v-ît qu¸ <Limit>
Chó ý : NÕu bá qua trÞ sè cña <Step>, m¸y sÏ nhËn gia sè =1
VÝ dô:
NÕu nhËp vµo sau dÊu nh¾c dßng lÖnh Y=1:2:10
Trang 6<tên biến>=linspace(<MinVal>, <MaxVal>, <Num>)
Hàm sẽ tạo ra véc tơ hàng có số phần tử bằng <Num>, gia số giữa các phần tử nh- nhau và bằng (MaxVal-MinVal)/(Num-1), phần tử đầu tiên có giá trị bằng MinVal, phần tử cuối cùng có giá trị bằng MaxVal
ứng dụng: Ma trận có các phần tử bằng 0 th-ờng dùng trong các tr-ờng hợp sau:
Dùng làm ma trận mồi trong phép tính tổng nhiều ma trận (dùng vòng lặp)
Dùng để tạo ma trận có nhiều phần tử bằng 0 rất th-ờng gặp trong kỹ thuật
Trang 70 0 0
0 0 0
4.2: Ma trận có các phần tử bằng 1
ứng dụng: Ma trận có các phần tử bằng 1 th-ờng dùng trong các tr-ờng hợp sau:
Dùng làm ma trận mồi trong phép tính tích các phần tử t-ơng ứng của nhiều ma trận (dùng vòng lặp)
Dùng để tạo ma trận có các phần tử bằng nhau (dùng khi thực hiện phép tính cộng hoặc trừ từng phần tử của ma trận với cùng một số)
Sử dụng hàm ones:
Cú pháp : <Tên biến>=ones (<RowNum>, <ColumnNum>)
Tạo ra ma trận với các phần tử 1, có số hàng là <RowNum>, số cột là <ColumnNum>
Ví dụ: Ví dụ: M=ones(3,4)
Trang 8 n là số nguyên chỉ đ-ờng chéo nào của ma trận sẽ đặt các phần tử của véc tơ V
Nếu V là một véc tơ, hàm sẽ cho kết quả là ma trận vuông có các phần tử trên đ-ờng chéo chỉ định là các phần tử của véc tơ V
Nếu V là một ma trận, sẽ trả kết quả là véc tơ cột của các phần tử nằm trên đ-ờng chéo của
Trang 9Điều này rất thuận tiện khi ta dữ liệu dạng mảng đ-ợc xuất ra từ một ch-ơng trình tính toán khác
II Tham chiếu tới các phần tử của mảng, tạo các mảng con
1 Nguyên tắc tham chiếu tới các phần tử của mảng
Để tham chiếu đến một phần tử của mảng, ta cần chỉ ra chỉ số hàng và cột của phần tử (đặt trong dấu ngoặc đơn)
Ví dụ: để tham chiếu đến phần tử nằm ở hàng số 2 và cột số 3 của ma trận M ta viết M(2,3)
Để tham chiếu đến một nhóm các phần tử của mảng, thay cho việc chỉ ra chính xác chỉ số của phần tử nh- trên ta phải chỉ ra đ-ợc mảng các chỉ số của các phần tử cần tham chiếu tới
Trang 10sẽ cho ra véc tơ bao gồm các phần tử trên cột thứ nhất của ma trận M
M1=M(2,:)
sẽ cho ra véc tơ bao gồm các phần tử trên hàng thứ hai của ma trận M
Từ khoá end là chỉ số cuối cùng của hàng hoặc cột của mảng
Ví dụ:
M1=M([2 4],[3:end])
Sẽ tạo ra ma trận M1 từ hàng 2 và 4 của ma trận M, mỗi hàng lấy ra từ phần tử thứ 3 đến phần
tử cuối cùng
2 các ứng dụng của việc truy cập các phần tử của mảng
2.1 Lấy các phần tử của mảng ra để tính toán
Ví dụ:
S=V(2)^2+V(5)^2
Sẽ tính tổng bình ph-ơng các giá trị của phần tử thứ 2 và thứ 5 của véc tơ V
S=M(1,2)-M(2,3)
Sẽ tìm ra hiệu của hai phần tử ở hàng 1 cột 2 và hàng 2 cột 3 của ma trận M
2.2 Thay đổi giá trị của từng phần tử của mảng
000
001
M , ta thực hiện theo các b-ớc sau:
Tạo ma trận với các phần tử 0: M=zeros(3,3);
Sau đó gán lại các phần tử khác 0 của ma trận: M(1,1)=1;M(3,2)=3;
Trang 112 8
2.5 Hợp mảng mới từ các mảng thành phần (nối mảng)
Để tạo mảng từ các mảng thành phần ta dùng dấu "[ ]" bên trong cần chỉ rõ các phần tử đ-a vào mảng, nếu các phần tử nằm trên 1 hàng, chúng cách nhau bằn dấu cách (b-ớc trống), để xuống dòng ta dùng dấu ;
Trang 12Cú pháp:
M=A^n, trong đó n là số nguyên d-ơng
Có kết quả nh- là phép nhân n ma trận A với nhau:
Điều kiện: Các ma trận A phải là ma trận vuông
2.2 Các ví dụ:
VD1: Xác định véc tơ S, với các phần tử đ-ợc xác định bằng quan hệ:
S(i)=Y(i+1)-2*Y(i); i=1 đến n-1, với Y =[3.5 6.2 7.0 5.4 6.2]
ở đây ta sử dụng biểu thức véc tơ:
5
X
2
12X4X
5
X
3
5X
7
X
4
3 2
1
3 2
Trang 132)(sin
2 2
X
X X
NÕu A lµ mét vÐc t¬, hµm sÏ tr¶ kÕt qu¶ lµ tæng c¸c phÇn tö cña vÐc t¬
NÕu A lµ mét ma trËn, hµm sÏ tr¶ kÕt qu¶ lµ mét vÐc t¬ hµng víi c¸c phÇn tö lµ tæng c¸c phÇn tö cña mçi cét trong ma trËn A
b C¸c hµm lËt ma trËn
Hµm flipud(A), chuyÓn c¸c hµng tõ d-íi lªn trªn
Hµm fliplr(A) , chuyÓn c¸c hµng tõ ph¶i sang tr¸i
Trang 14ans =
7 0 4
-4 5 3
1 5 2
c Hàm lấy ra ma trận đ-ờng chéo
Hàm triu(A), lấy ra ma trận đ-ờng chéo phía trên
Hàm tril(A), lấy ra ma trận đ-ờng chéo phía d-ới
S=size(A) : đ-a ra véc tơ hàng chỉ số l-ợng hàng và cột của ma trận
[r,c]=size(A) gán số hàng cho r, số cột cho c
Nếu A là một véc tơ, B = cumsum(A) sẽ đ-a ra kết quả là véc tơ B có các phần tử là tổng
tích luỹ của các phần tử của véc tơ A: đ-ợc xác định bằng công thức: i
1iAi
sẽ tính dọc theo các hàng
Trang 15Chú ý: Trong đó S là hàm toán học
Mô tả:
Y = diff(X) tính ra độ lệch giữa các phần tử kề nhau của véc tơ X
Nếu X là véc tơ kết quả đ-a ra là véc tơ ít hơn X 1 phần tử:
[X(2)-X(1) X(3)-X(2) X(n)-X(n-1)]
Nếu X là ma trận , hàm diff(X) đ-a ra kết quả là ma trận cột các độ lệch :
[X(2:m,:)-X(1:m-1,:)]
Y = diff(X,n) Đ-a ra véc tơ độ sai lệch bậc n :
nh- vậy diff(X,2) cho ra cùng kết quả với diff(diff(X))
Vớ dụ: Tớnh đạo hàm của y = sinx3
syms x % khai bao x la bien kieu symbolic
y=sin(x^3);
z=diff(y) % dao ham cua y
z =
3*cos(x^3)*x^2 % sinh vien kiem tra ket qua
>>pretty(z) % hien thi dang quen thuoc
Trang 16Các phép tính trong MATLAB đ− ợc thực hiện với độ chính xác cao, ta có thể định dạng
cho các số xuất ra mμn hình tuỳ từng yêu cầu cụ thể:
Ngoμi cách nμy ra ta định dạng dữ liệu bằng thanh tool công cụ trên mμn hình
Ví dụ: Gõ các lệnh sau trong cửa sổ CommandWindow
1 k k 3 1
a
E6C
Trong đó:
là hệ số thực nghiệm: =0.85, E là mô đul đàn hồi của vật liệu E=2,1.106
ak+1=l1- lk+1 , với lk là 1/2 chiều dài lá nhíp thứ k (tính từ quang treo đến đầu mút của lá)
Yk=
Dữ liệu đã biết Chỉ số của lá Bề rộng b, mm Bề dầy lá nhíp h, Cm Mô men quán tính J, Cm4
/12=0,128
Trang 171/2 Chiều dài các lá nhíp (tính từ quang treo đến đầu mút của lá) l(1)=68.5;l(2)=67.2;l(3)=57.6;l(4)=50.4;l(5)=43.0;l(6)=35.0;l(7)=28.0;l(8)=20.6;l(9)=13.0
A
0XCXBXA
0XCXBPA
n n 1 n n
3 3 2 3 1 3
2 2 1 2 2
Trong đó Ak, Bk, Ck đ-ợc xác định từ các biểu thức:
l3J
J5
1 k
k k
J
J1
l.3.l
l5,0C
1 k k 3
k
1 k k
ở đây:
lk là 1/2 chiều dài của lá nhíp thứ k (tính từ quang treo đến đầu mút của lá)
Jk là mô men quán tính mặt cắt ngang của lá nhíp thứ k :
Ví dụ : Tính ứng xuất tác dụng lên các lá nhíp có số liệu cho trong bảng d-ới đây
Trang 181 Định nghĩa đa thức trong MATLAB
- Malab sử dụng một véc tơ hàng để định nghĩa các hệ số của đa thức
Số phần tử của véc tơ bằng số bậc của đa thức +1 (ví dụ đa thức bậc 3 có 4 hệ số)
Phần tử đầu tiên là hệ số bậc cao nhất của đa thức
Những phần tử khuyết có hệ số bằng 0
- Giá trị của đa thức xác định bằng hàm polyval: polyval(p,x)
Ví dụ: Xác định trị số của đa thức P=X4
+3X3-2X+5 tại điểm X=4.5 ta dùng các lệnh sau:
r = roots(c) Đ-a ra kết quả là véc tơ r có các phần tử là nghiệm của đa thức C
Véc tơ hàng C chứa các hệ số của đa thức, nếu C chứa n+1 phần tử, đa thức có dạng:
Chú ý: hàm ng-ợc của roots là hàm poly: P=poly(r) sẽ đ-a ra véc tơ hệ số của đa thức có
nghiệm là véc tơ r
Trang 20Hàm polyder tính ra đạo hàm của một đa thức, của tích hai đa thức hay th-ơng hai đa thức p, a, b
là các véc tơ mà phần tử của nó là hệ số của các đa thức
k = polyder(p) đ-a ra kết quả là véc tơ hệ số của đạo hàm đa thức p
k = polyder(a,b) đ-a ra kết quả là véc tơ hệ số của đạo hàm tích hai đa thức a,b
[q,d] = polyder(b,a) đ-a ra kết quả là đa thức tử số (véc tơ q) và đa thức mẫu số (véc tơ d) của đạo hàm th-ơng hai đa thức b/a
Trang 2118X18
II Công cụ nội suy
1 Hàm nội suy một biến:
x, Y là hai véc tơ có cùng kích th-ớc xác định các điểm (xi, yi)
véc tơ x phải tăng dần hoặc giảm dần
điểm xi cần nằm trong khoảng từ x(1) đến x(n)
method quy định ph-ơng pháp nội suy: các giá trị của nó là:
'linear' chế độ nội suy tuyến tính (default)
'nearest' chế độ nội suy sử dụng giá trị ở nút gần nhất
'spline' nội suy hàm spline bậc 3
'cubic' chế độ nội suy đa thức bậc 3
Ví dụ ta có các dữ liệu dân số của n-ớc mỹ ở các thời điểm cách nhau 10 năm nh- sau
Trang 22định bởi các ma trận X, Y và Z X, Y cần phải tăng hoặc giảm dần và có cùng kích cỡ,
đ-ợc cung cấp bởi lệnh meshgrid
XI và YI có thể là các ma trận, khi đó interp2 sẽ đ-a ra các giá trị t-ơng ứng với các điểm (XI(i,j),YI(i,j)) Ngoài ra ta cũng có thể đ-a vào các véc tơ hàng và cột xi và yi Trong tr-ờng hợp này, interp2 sẽ chuyển đổi các véc tơ này thành các ma trận giống nh- ta sử dụng lệnh meshgrid(xi,yi)
ZI = interp2(Z,XI,YI) sẽ coi nh- các véc tơ X = 1:n và Y = 1:m, ở đây [m,n] = size(Z)
ZI = interp2(X,Y,Z,XI,YI,method) cho phép sử dụng các ph-ơng pháp nội suy khác nhau:
'linear' chế độ nội suy tuyến tính (default)
'nearest' chế độ nội suy sử dụng giá trị ở nút gần nhất
'spline' nội suy hàm spline bậc 3
'cubic' chế độ nội suy đa thức bậc 3
Để có thể nội suy nhanh hơn khi các mốc nội suy cách đều, chúng ta hãy dùng các chế độ '*linear', '*cubic', '*spline', hoặc '*nearest'
Mô tả
[X,Y] = meshgrid(x,y) Chuyển các véc tơ x và y thành các ma trân X và Y dùng để tính giá trị của hàm 2 biến và đồ thị l-ới ba chiều Các hàng của ma trận X là copy của véc tơ x và các cột của ma trận Y là copy của véc tơ y
Trang 23[X,Y] = meshgrid(x) có ý nghĩa giống nh- [X,Y] = meshgrid(x,x)
[X,Y,Z] = meshgrid(x,y,z) Tạo ra các mảng 3 chiều dùng để xác định giá trị hàm 3 biến hoặc để vẽ đồ thị khối 3 chiều
Y1, Y2, Y3, Có thể là các ma trận, trong tr-ờng hợp này hàm interpn sẽ đ-a ra véc tơ VI với các giá trị t-ơng ứng với các điểm (Y1(i,j) ,Y2(i,j),Y3(i,j), ) Ta có thể thay
Trang 24các mảng Y1, Y2, Y3 bằng các véc tơ y1, y2, y3 Trong tr-ờng hợp này interpn sẽ thông dịch các véc tơ thành các ma trận giống nh- dùng hàm ndgrid(y1,y2,y3, )
VI = interpn(V,Y1,Y2,Y3, ) Nội suy nh- trên và coi X1 = 1:size(V,1), X2
= 1:size(V,2), X3 = 1:size(V,3),
VI = interpn( ,method) xác định ph-ơng pháp nội suy
'linear' đối với nội suy tuyến tính (mặc định)
'cubic' nội suy đa thức bậc 3
'spline' nội suy spline bậc ba
'nearest' nội suy lấy giá trị nút gần nhất
2.2 Sử dụng hàm ndgrid
Tạo ra mảng n chiều dùng để xác định giá trị của hàm nhiều biến và nội suy
Cú pháp
[X1,X2,X3, ] = ndgrid(x1,x2,x3, ) [X1,X2, ] = ndgrid(x)
Mô tả
[X1,X2,X3, ] = ndgrid(x1,x2,x3, ) Chuyển các véc tơ x1, x2, x3 thành các mảng X1, X2, X3 dùng để xác định giá trị của hàm nhiều biến hoặc nội suy hàm nhiều biến Chiều thứ i của mảng Xi là copy của các phần tử véc tơ xi
[X1,X2, ] = ndgrid(x) có cùng kết quả nh- [X1,X2, ] = ndgrid(x,x, )
Thí dụ
Sử dụng hàm ndgrid để vẽ đồ thị l-ới hàm :
2 2 2 1
.1
x xe x
Trang 25Hàm ndgrid đ-ợc dùng gần giống nh- hàm meshgrid ngoại trừ hai đối số đầu của các biến vào, ra đ-ợc tráo đổi cho nhau Có nghĩa là câu lệnh
Hàm p = polyfit(x,y,n) tìm ra các hệ số của đa thức p(x) bậc n phù hợp với dữ liệu x, y trong ý nghĩa của độ lệch quân bình bình ph-ơng bé nhất kết quả là véc tơ p có chiều dài n+1 chứa các hệ số của đa thức theo trật tự giảm dần của số mũ:
[p,s] = polyfit(x,y,n) đ-a ra đa thức hệ số p, s dùng để -ớc l-ợng sai số
4 Nội suy bằng hàm spline
Cú pháp
yy = spline(x,y,xx)
pp = spline(x,y) Mô tả
Hàm spline Tạo ra hàm spline nhận các giá trị y(:,j) tại điểm x(j) với mọi j yy = spline(x,y,xx) đ-a ra các giá trị của hàm tại các điểm chỉ ra bằng véc tơ xx
pp = spline(x,y) đ-a ra dạng pp của hàm nội suy bậc 3, mà có thể sử dụng với lệnh ppval
Trang 26 Tên của hàm và tên của M-file cần phải trùng nhau
Tên của hàm có thể chứa tới 31 ký tự, không có khoảng trống và bắt đầu bằng chữ cái
Dòng đầu tiên của hàm cần bắt đầu bằng từ khoá function, sau đó là các biến chứa kết quả
đ-a ra của hàm, tên hàm và các biến chứa dữ liệu nhập vào
Các dòng h-ớng dẫn (sẽ đ-ợc hiện ra khi dùng lệnh help trong matlab) đ-ợc đ-a vào ngay sau dòng đầu tiên, ở cột thứ nhất cần có dấu %
Tất cả các dòng lệnh tiếp theo tạo thân của hàm, các lệnh trong thân hàm sẽ sử dụng dữ liệu
đầu vào và đ-a ra dữ liệu xuất ra
Hàm sẽ dừng lại khi đến cuối tệp hoặc gặp từ khoá return
Hàm có thể ngừng hoạt động và trả điều khiển về cửa sổ lệnh khi ta dùng lệnh error
Hàm có thể gọi các script file, tuy nhiên các biến trong tệp này chỉ tồn tại trong môi tr-ờng làm việc của hàm
Nhiều hàm có thể tồn tại trong một tệp, các hàm con th-ờng đặt sau hàm chính theo bất kỳ trật tự nào
Các hàm con có thể đ-ợc gọi từ hàm chính hoặc bất kỳ hàm con nào
1.2 Biến cục bộ và biến tổng thể
Để định nghĩa biến tổng thể ta dùng lệnh global
Cú pháp:
global X Y Z
Mô tả
global X Y Z định nghĩa X, Y, và Z là các biến tổng thể
Thông th-ờng mỗi hàm của Matlab, đ-ợc định nghĩa bởi tệp M-file, có các biến cục bộ, những biến này tách rời với các hàm khác (có nghĩa là trong các hàm khác không thể gọi ra giá trị của các biến này) Tuy nhiên trong nhiều tr-ờng hợp ta cần phải gọi một biến đ-ợc định nghĩa trong những hàm khác, những biến có thể dùng chung trong nhiều hàm đ-ợc gọi là biến tổng thể (global variable)
Khi định nghĩa biến tổng thể (dùng lệnh global) nh-ng ch-a gán giá trị, các biến này có giá trịbằng 0
Nếu trong môi tr-ờng làm việc của matlab có một biến trùng tên với biến tổng thể mà ta định nghĩa, Matlab sẽ đ-a ra lời cảnh báo và đ-a giá trị hiện thời của biến nối kết với biến tổng thể Chú ý
Hãy dùng hàm clear global <variable> để xoá các biến tổng thể khỏi môi tr-ờng làm việc, còn clear variable dùng để xoá biến khỏi môi tr-ờng làm việc hiện thời mà không ảnh h-ởng
đến giá trị của biến tổng thể
Trang 27Trong lệnh này :
fun là một chuỗi chỉ ra tên của tệp dùng để định nghĩa hàm số thực
Nếu x là một giá trị vô h-ớng thì fzero sẽ tìm ra điểm 0 gần với giá trị của x của hàm đ-ợc định nghĩa
Nếu x là một véc tơ có 2 phần tử, fzero sẽ tìm ra điểm không nằm trong khoảng giá trị giữa hai phần tử đó
tol : quy định sai số t-ơng đối của nghiệm tìm ra Nếu không quy định giá trị tol, máy sẽ nhận giá trị sai số t-ơng đối mặc định
Thí dụ
Tìm nghiệm của ph-ơng trình X3-2X-5=0 ở gần điểm x=2
Tr-ớc hết ta phải viết một M.file định nghĩa hàm f:
hàm fzero xác định điểm mà tại đó đồ thị hàm số cần khảo sát cắt trục hoành, không phải là khi
đồ thị tiếp xúc với trục hoành
Trong đó fun là chuỗi chỉ tên hàm khảo sát đ-ợc định nghĩa trong tệp M.file sẽ đ-a ra giá trị x tại
đó hàm fun sẽ đạt giá trị cực tiểu cục bộ trong khoảng khảo sát x1<=X<=x2 trong tr-ờng hợp này chúng ta không đ-a vào tuỳ chọn option, chế độ tính toán sẽ dựa trên các giá trị mặc định của thông số điều khiển
x = fmin('fun',x1,x2,options) Cho phép chúng ta xác định các thông số điều khiển
quá trình tính toán option là một véc tơ có 3 thành phần:
options(1) Nếu giá trị của nó khác 0, máy sẽ hiển thị các kết quả tính trong quá trình tìm cực tiểu, giá trị mặc định bằng 0
options(2) quy định sai số t-ơng đối Giá trị mặc định là 1.e-4
options(14) quy định số b-ớc tính tối đa Giá trị mặc định là 500
Ví dụ
Trang 28Xác định cực tiểu của hàm f= X-2X-5=0 ở trong khoảng từ 0 đến 2
Tr-ớc hết ta phải viết một M.file định nghĩa hàm f:
x = fmins('fun',x0) Trong đó x0 là một véc tơ các giá trị thực sẽ trả kết quả là véc tơ x
xác định cực tiểu cục bộ cuả hàm nhiều biến định nghĩa bằng Mfile 'fun' gần điểm x0 Các thông
số điều khiển quá trình tính toán sẽ nhận giá trị mặc định
x = fmins('fun',x0,options) Cho phép ta ấn định giá trị của các thông số điều khiển
quá trình tính toán ý nghĩa của các thông số này cũng t-ơng tự nh- ở hàm fmin
Trang 291.0000 1.0000
ans =
165
Các chú ý:
để quá trình tìm kiếm cực trị hội tụ, hàm nhiều biến phải thoả mãn các yếu tố sau:
Hàm không có điểm gián đoạn
Hàm không trả ra các giá trị phức, inf hoặc NaN
Cần chọn điểm xuất phát tìm kiếm hợp lý
Các biến của hàm cần chuyển đổi sao cho các giá trị của biến gần t-ơng đ-ơng nhau về độ lớn
Để giải các bài toán tìm cực trị có ràng buộc ta phải sử dụng các hàm 'penalty'
Mô tả
Z = trapz(X,Y) tính tích phân của hàm đ-a ra bởi véc tơ y phụ thuộc vào x
Z = trapz(Y) tính tích phân của hàm đ-a bới véc tơ y với trục hoành có khoảng chia
là đơn vị Trong tr-ờng hợp trục hoành đ-ợc chia đều với khoảng cách khác đơn vị, giá trịcủa tích phân sẽ là giá trị của hàm nhân với trị số của chiều dài khoảng chia
+ Tớ nh vi phõn bằng hàm int - Nếu S là biểu thức Symbolic thỡ:
int(S) tớch phõn khụng xỏc định của S theo biến mặc nhiờn (muốn biết biến mặc nhiờn này ta dựng hàm findsym)
Trang 30int(S,v) tớch phõn khụng xỏc định của S theo v
int(S,a,b) tớch phõn xỏc định của S trờn cận [a,b]
int(S,v,a,b) tớch phõn xỏc định của S theo v trờn cận [a,b]
Vớ dụ: Tớnh
>>syms x
>>S=2*x^2*(19+12*x^2)/(7*(x^2+1))
>>y=int(S,x,0,1) % tớch phõn S theo x trờn cận [0,1]
>>subs(y) % đổi sang kiểu số
Z = cumtrapz(Y) Tính toán tích phân số tích luỹ của hàm đ-a ra bởi véc tơ y với
đối số là các khoảng chia đơn vị cách đều
Z = cumtrapz(X,Y) Tính toán tích phân số tích luỹ của hàm đ-a ra bởi véc tơ y với
đối số đ-a ra bởi véc tơ x X và y cần có cùng chiều dài Hoặc x là véc tơ cột và y là mảng 2 chiều
Trang 31 q = quad('fun',a,b) trả kết quả của phép tí ch phân số của hàm 'fun' trong khoảng giới hạn giữa a và b 'fun' cần phải trả ra các giá trị một véc tơ khi giá trị đầu vào là một véc tơ
q = quad('fun',a,b,tol) cho phép quy định sai số t-ơng đối của phép tích phân Giá trị mặc
định của nó là 1.e-3 Hãy sử dụng véc tơ 2 phần tử tol = [rel_tol abs_tol], để quy định
đồng thời cả sai số t-ơng đối và tuyệt đối
Chú ý: Hàm Quad và Quad8 đều sử dụng ph-ơng pháp simson để tính tích phân, Trong đó hàm quad8 sử dụng ph-ơng pháp bậc cao
1.4 Hàm để giải ph-ơng trì nh vi phân : hàm ode23 và ode34
Ví dụ: Giải ph-ơng trình vi phân Van de Pol có dạng nh- sau:
Viết file chính có tên ftvf0.m nh- d-ới đây:
t0=0; t1=20;% Thoi diem dau va cuoi
x0=[0 2]; % Dieu kien ban dau
[t,x]=ode23('ftvf',t0,t1,x0);
plot(t,x)
Chạy ch-ơng trình kết quả cho d-ới dạng đồ thị nh- d-ới đây:
Trang 32
Y = diff(X) tính ra độ lệch giữa các phần tử kề nhau của véc tơ X
Nếu X là véc tơ kết quả đ-a ra là véc tơ ít hơn X 1 phần tử:
Trang 33Bài 4: Lập trình ứng dụng trong Matlab
I Các loại dữ liệu dùng trong Matlab
1 Dữ liệu số
MATLAB sử dụng chế độ ghi số thập phân thông th-ờng với tuỳ chọn về chế độ ghi số chữ số sau dấu phảy và dấu +, - tr-ớc giá trị số (xem lệnh format) Bên cạnh chế độ ghi số thập phân thông th-ờng, ta có thể dùng kiểu ghi sử dụng chữ cái e để xác định số mũ cơ số 10 Phần ảo của
số phức đ-ợc thêm phần hậu tố là chữ cái i hoặc j D-ới đây là một vài thí dụ về dữ liệu số hợp lệ
có thể dùng trong Matlab:
3 -99 0.0001
9.6397238 1.60210e-20 6.02252e23
1i -3.14159j 3e5i
Tất cả các số đ-ợc l-u trữ ở bộ nhớ trong và sử dụng định dạng dài (có 16 chữ số sau dấu phảy)
và giá trị giới hạn nằm trong khoảng từ 10-308
to 10+308
Các hằng số th-ờng đ-ợc sử dụng trong Matlab
Các hàm toán học th-ờng dùng:
i Đơn vị ảo, -1
j Đơn vị ảo (t-ơng tự i) eps Độ chính xác t-ơng đối của số thực, 2-52realmin Giá trị nhỏ nhất của số thực, 2-1022realmax Giá trị lớn nhất của số thực, (2-)21023Inf Vô cùng lớn
NaN Không phải là số
Trang 34LÊy ra gi¸ trÞ phÇn thùc cña sè phøc
VÝ dô: NÕu ta cã X=3 +4i, real(X) sÏ cho gi¸ trÞ 3
b hµm imag
LÊy ra phÇn ¶o cña sè phøc
VÝ dô: víi X lÊy gi¸ trÞ nh- trªn, imag(X) sÏ cho gi¸ trÞ 4
Trang 35c Hàm conj
Tìm số phức liên hợp của số phức đã cho
Ví dụ: với X lấy giá trị nh- trên, conj(X) sẽ cho giá trị 3-4i
3 dữ liệu dạng chuỗi
3.1 phép gán và tham chiếu đến dữ liệu dạng chuỗi
Phép gán: <tên biến>='chuỗi'
Tham chiếu đến dữ liệu
Chuỗi là một véc tơ hàng có số phần tử bằng số chữ cái trong chuỗi để tham chiếu đến từng chữ cái ta chỉ cần gọi phần tử t-ơng ứng của chuỗi
Các ví dụ: nếu gán x='String Mat', ta sẽ nhận đ-ợc
x =
String Mat
Khi gọi x(1), ta nhận đ-ợc ans = S
nếu gọi x(1:6), ta sẽ nhận đ-ợc ans = String
3.2 Tạo các mảng với phần tử là chuỗi
3.2.1 Tạo véc tơ cột các chuỗi:
Nhập trực tiếp : nhập theo nguyên tắc giống mảng với các phần tử là số, tuy nhiên yêu cầu các
chuỗi có chiều dài nh- nhau, trong tr-ờng hợp các chuỗi có chiều dài khác nhau, ta phải thêm b-ớc trống vào cuối chuỗi
Chú ý : hai hàm char và str2mat có cùng cú pháp, sẽ chèn cả các chuỗi rỗng vào mảng, còn
strvcat sẽ bỏ qua chuỗi rỗng
Ví dụ: x=char('first','second', '', 'third') và
x=str2mat('first','second', '', 'third') sẽ cho cùng kết quả là véc tơ cột có 4 phần tử
x =
first
second
Trang 36Mảng khối đ-ợc nhập nh- mảng thông th-ờng, chỉ khác là mảng đ-ợc bao bằng dấu { }
Các phần tử của mảng khối sẽ là các chuỗi
b Hàm char: chuyển từ mã ascci sang ký tự
Ví dụ: char(65) sẽ cho ta A
Nếu đối số là mảng các số nguyên, ta nhận đ-ợc chuỗi ký tự
Ví dụ : char([65 66])=AB
Chú ý: hàm char ngoài chức năng chuyển từ mã ascci sang ký tự còn có chức năng tạo mảng các phần tử là chuỗi và biến đổi các mảng khối về mảng thông th-ờng
Ví dụ:
Trang 37S = char(C) với c là mảng khối các chuỗi sẽ đặt mỗi một phần tử của c thành các hàng của mảng ký tự s (hàm ng-ợc của nó là cellstr)
xét mảng khối x={'3.123' '4.578'}
khi đó char(x) sẽ cho kết quả:
3.123
4.587
3.3.2 Hàm chuyển đổi từ dữ liệu số sang chuỗi và ng-ợc lại
a chuyển từ số sang chuỗi: int2str, num2str, mat2str
Hàm int2str: chuyển số nguyên sang chuỗi
Cú pháp : str = int2str(N)
Mô tả:
str = int2str(N) Chuyển số nguyên sang chuỗi với định dạng của số nguyên N có thể là một số nguyên riêng lẻ hoặc mảng các số nguyên Các giá trị thực sẽ đ-ợc làm tròn tr-ớc khi chuyển đổi
Chuyển cỏc ký tự trong một chuỗi sang số thứ tự tương ứng trong bảng mó ASCII
str = num2str(a,precision) chuyển đổi mảng A thành chuỗi str với độ chính xác
đ-ợc quy định bằng 'precision' đối số precision quy định số chữ số sau dấu phảy, mặc định là 4
str = num2str(A,format) chuyển đổi mảng A sử dụng định dạng quy định bằng
'format' (xem lệnh fprint)
Trang 38str = mat2str(A,n)
Mô tả
str = mat2str(A) Chuyển ma trận A thành chuỗi, phù hợp với dữ liệu đầu vào của hàm eval, sử dụng độ chính xác cao nhất
str = mat2str(A,n) Chuyển đổi ma trận A thành chuỗi với n chữ số sau dấu phảy
Chú ý: Hàm mat2str chỉ đ-ợc thực hiện trên các giá trị số, véc tơ hoặc mảng chữ nhật
Công dụng: Chuyển đổi chuỗi ký tự thành biểu thức
[a1,a2,a3, ] = eval(expression) thực thi biểu thức expression và đ-a ra
các kết quả trong các biến đầu ra chỉ định biểu thức phải đ-a ra ở dạng sau:
- y=eval('5+6-7'), cho kết quả y =4
- Nếu ta có x='5+6-sin(pi)', hàm y=eval(x) sẽ cho kết quả: y =11
- eval(['sin(pi/2)' '+' 'cos(pi)']), cho kết quả là 0
c Lệnh STR2NUM
- Cụng dụng:
Trang 39Chuyển chuỗi (dạng số) sang số thực
s = sprintf(format,A, ) Định dạng các dữ liệu trong ma trận A, trên cơ sở của chuỗi quy định mẫu định dạng 'format' và trả kết quả cho biến dạng chuỗi s Câu lệnh sprintf cũng có ý nghĩa t-ơng tự nh- fprint, điểm khác chỉ ở chỗ câu lệnh fprint th-ờng dùng để xuất dữ liệu ra tệp
Chuỗi format quy định các ghi chú, căn chỉnh, số chữ số, bề rộng của tr-ờng Nó có thể chứa các dữ liệu số, chữ và các ký tự điều khiển theo cấu trúc sau:
[s,errrmsg] = sprintf(format,A, ) sẽ trả các dòng báo lỗi vào chuỗi errrmsg a) Coõng duùng:
Hieồn thũ thoõng tin leõn maứn hỡnh
b) Cuự phaựp:
s = sprintf(‘ts’,ds)
c) Giaỷi thớch:
s: bieỏn chửựa chuoói soỏ hieồn thũ treõn maứn hỡnh
ts: caực tham soỏ ủũnh daùng
ds: danh saựch caực ủoỏi soỏ
Tham soỏ ủũnh daùng thuoọc 1 trong 2 kieồu sau:
(1) Chuoói kyự tửù: chuoói naứy seừ ủửụùc hieồn thũ leõn maứn hỡnh gioỏng heọt nhử ủửụùc vieỏt
trong caõu leọnh
(2) Chuoói caực tham soỏ ủũnh daùng: caực chuoói naứy seừ khoõng ủửụùc hieồn thũ leõn maứn hỡnh,
nhửng taực duùng ủieàu khieồn vieọc chuyeồn ủoồi vaứ caựch hieồn thũ caực ủoỏi soỏ ủửụùc ủửa ra
trong danh saựch caực ủoỏi soỏ
Vớ duù caực tham soỏ ủũnh daùng:
1) %d: ủoỏi soỏ laứ soỏ nguyeõn ủửụùc vieỏt dửụựi daùng thaọp phaõn
Trang 40s = sprintf(‘ẹaõy laứ soỏ: %d’,-24)
s = ẹaõy laứ soỏ: -24
2) %u: ủoỏi soỏ laứ soỏ nguyeõn ủửụùc vieỏt dửụựi daùng thaọp phaõn khoõng daỏu
s = sprintf(‘ẹaõy laứ soỏ: %u’,24)
s = ẹaõy laứ soỏ: 24
3) %o: ủoỏi soỏ laứ soỏ nguyeõn ủửụùc vieỏt dửụựi daùng cụ soỏ 8 khoõng daỏu
s = sprintf(‘ẹaõy laứ soỏ: %o’,9)
s = ẹaõy laứ soỏ: 11
4) %x: ủoỏi soỏ laứ soỏ nguyeõn ủửụùc vieỏt dửụựi daùng cụ soỏ 16 Khaỷo saựt ửựng duùng MATLAB trong ủieàu khieồn tửù ủoọng
s = sprintf(‘ẹaõy laứ soỏ: %x’,255)
s = ẹaõy laứ soỏ:ff
5) %f: ủoỏi soỏ laứ soỏ nguyeõn ủửụùc vieỏt dửụựi daùng cp soỏ 10
s = sprintf(‘ẹaõy laứ soỏ: %f’,2550
s = ẹaõy laứ soỏ: 255.000000
ẹeồ ủũnh daùng phaàn thaọp phaõn thỡ theõm vaứo con soỏ chửựa soỏ thaọp phaõn caàn laỏy
s = sprintf(‘ẹaõy laứ soỏ: %.3f’, 2.5568)
s = ẹaõy laứ soỏ: 2.557
6) %c: ủoỏi soỏ laứ 1 kyự tửù rieõng ủaởc bieọt
s = sprintf(‘ẹaõy laứ chửừ: %c’,’M’)
s = ẹaõy laứ chửừ: M
7)%s: ủoỏi soỏ laứ chuoói kyự tửù
s = sprintf(‘ẹaõy laứ chuoói: %s’, ‘Matlab’)
s = ẹaõy laứ chuoói: Matlab
Bảng d-ới đây sẽ mô tả các ký tự không nhìn thấy đ-ợc sử dụng trong định dạng của lệnh sprintf Các ký tự thoát