Pikachu – Vietdown.org
Ch−¬ng 1
C¬ së Matlab
1.1 Tỉng quan vỊ Matlab
1.1.1 Khái niệm về Matlab
Matlab l một ngôn ngữ lập trình thực hnh bậc cao đợc sử dụng để giải các bi
toán về kỹ thuật.Matlab tích hợp đợc việc tính toán, thể hiện kết quả, cho phép lập trình,
giao diện lm viƯc rÊt dƠ dμng cho ng−êi sư dơng. D÷ liƯu cùng với th viện đợc lập
trình sẵn cho phép ngời sử dụng có thể có đợc những ứng dụng sau đây.
ã
Sử dụng các hm có sẵn trong th viện, các phép tính toán học thông thờng
ã
Cho phép lập trình tạo ra những ứng dụng mới.
ã
Cho phép mô phỏng các mô hình thực tế.
ã
Phân tích, khảo sát v hiển thị dữ liệu.
ã
Với phần mềm đồ hoạ cực mạnh
ã Cho phép phát triển,giao tiếp với một số phần mềm khác nh C++, Fortran.
1.1.2 Tỉng quan vỊ cÊu tróc d÷ liƯu cđa MATLAB, các ứng dụng
Matlab l một hệ thống tơng giao,các phần tử dữ liệu l một mảng( mảng ny
không đòi hỏi về kích thớc ). Chúng cho phép giải quyết các vấn đề liên quan đến lập
trình bằng máy tính,đặc biệt sư dơng c¸c phÐp tÝnh vỊ ma trËn hay vÐc tor v có thể sử
dụng ngôn ngữ C học Fortran lập trình rồi thực hiện ứng dụng lập trình đó bằng các câu
lệnh goị từ MATLAB .MATLAB đợc viết tắt tõ ch÷ matrix laboratory tøc lμ
th− viƯn vỊ ma trËn, từ đó phần mềm MATLAB đợc viết nhằm cung cấp cho việc truy
cập vo phần mềm ma trận một cáh dễ dng, phần mềm ma trận ny đợc phát triển bởi
các công trình Linpack v Eispack . Ngy nay MATLAB đợc phát triển bởi
Lapack v Artpack tạo nên một nghệ thuật phần mềm cho ma trận.
a.Dữ liệu
Dữ liệu của MATLAB thể hiện dới dạng ma trận( hoặc mảng tổng quát), v có các kiểu
dữ liệu đợc liệt kê sau đây
ã
Kiểu đơn single , kiểu ny có lợi về bộ nhớ dữ liệu vì nó đòi hỏi ít byte nhớ hơn,
kiểu dữ liệu ny không đợc sử dụng trong các phép tính toán học, độ chính xác
kém hơn
ã
Kiểu double kiểu ny l kiểu thông dụng nhất của các biến trong MATLAB
ã
Kiểu Sparse.
•
KiĨu int8, uint8, int16 . . .
Trang 1
•
KiĨu char vÝ dơ ‘Hello’
•
KiĨu cell.
• KiĨu Structure.
Trong MATLAB kiĨu dữ liệu double l kiểu mặc định sử dụng trong các phép tính số
học. Các bạn có thể tham khảo các kiểu dữ liệu khác trong đĩa CD Help MATLAB 6.0
b. ứng dụng
MATLAB tạo điều kiện thuận lợi cho:
ã
Các khoá học về toán học
ã
Các kỹ s, các nh nghiên cứu khoa học
ã
Dùng MATLAB để tính toán ,nghiên cứu tạo ra các sản phẩm tốt nhất trong sản
xuất.
c.Toolbox l một công cụ quan trọng trong Matlab
Công cụ ny đợc MATLAB cung cấp cho phép bạn ứng dụng các kỹ thuật để phân tích,
thiết kế , mô phỏng các mô hình .
Ta có thể tìm thấy toolbox ở trong mô trờng lm việc của .
ã
Mạng nơron
ã
Logic mờ
ã Simulink
1.1.3 Hệ thống MATLAB
Hệ thống giao diện của MATLAB đợc chia thnh 5 phần
ã Môi trờng phát triển.
Đây l nơi đặt các thanh công cụ, các phơng tiện giúp chúng ta sử dụng các lệnh v các
file, ta có thể liệt kê một số nh sau.
+ Desktop
+ Command Window
+ Command History
+ Browsers for viewinghelp
•
Th− viƯn, c¸c hμm to¸n häc
Bao gåm c¸c cÊu tróc nh− tÝnh tổng, sin cosin atan, atan2 etc.., các phép tính
đơn giản đến các phép tính phức tạp nh tính ma trận nghich đảo, trị riêng, chuyển
đổi furier ,laplace , symbolic library
ã
Ngôn ngữ MATLAB
Đó l các ngôn ngữ cao về ma trận v mảng, với các dòng lệnh, các hm, cấu
trúc dữ liệu vo , có thể lập trình hớng đối tợng.
ã
Đồ ho¹ trong MATLAB
Trang 2
Bao gồm các câu lệnh thể hiện đồ hạo trong môi trờng 2D v 3D, tạo các hình
ảnh chuyển động, cung cấp các giao diện tơng tác giữa ngời sử dụng v máy tính .
ã
Giao tiếp với các ngôn ngữ khác.
MATLAB cho phép tơng tác với các ngôn ngữ khác nh C , Fortran
1.1.4 Lm quen với matlab
Trớc tiên để khởi động MATLAB bạn kích đúp (hoặc đơn) v biểu tợng
file MATLAB.exe ,trên mn hình xuất hiện cửa sổ sau.( Xem hình vẽ 1.1 )
Cửa sổ đó chứa các thanh công cụ( giao diện ngời v máy) cần thiết cho
việc quản lý các files, các biến ,cửa sổ lệnh, có thể coi desktop l các panel
gồm các ô, vùng, quản lý v tác dụng của từng cửa sổ nhỏ đợc quản lý bởi
desktop
Hình vẽ 1.1
Trang 3
Trên hình vẽ ta thấy cửa sổ desktop(cửa sổ lớn nhÊt), vμ c¸c cưa sỉ phơ cđa
nã
1.1.5 Lμm viƯc víi các cửa sổ của MATLAB đợc quản lý bởi desktop
a. Cưa sỉ Command window :
Lμ cưa sỉ giao tiÕp chÝnh của Matlab bởi đây l nơi nhập giá trị các biến,
hiển thị giá trị,tính toán giá trị của biểu thức, thực thi các hm có sẵn trong
th viện (dạng lệnh), hoặc các hm(dạng function) do ngời dùng lập trình ra
trong M-files.
Các lệnh đợc đợc nhập sau dấu nhắc >> , v nếu có sai sót trong quá
trình gõ(nhập) lệnh thì hÃy nhấn phím Enter cho đến khi nhận đợc dấu nhắc
>>. Thực thi lệnh bằng nhấn phím Enter.
Gõ các lệnh sau:
>> A= pi/2 ;
>> B= sin(A)
B=
1
Hoặc chơng trình soạn thảo trong M-file dới đây:
% Chuong trinh trong M-file
x= 0:pi/6:2*pi;
y=sin(x);
plot(x,y);
% chuong trinh đợc lu với tên file l
ve_sin.m
thực thi chơng trình trên trong cửa sổ Command window bằng dòng lệnh
sau
>> ve_sin
Chóng ta thÊy râ h¬n trong mơc “ Sư dơng lƯnh trùc tiÕp “ ë phÇn sau.
b. Cưa sỉ command History
Các dòng m bạn nhập vo trong cửa sổ Command window ( các dòng ny có thể l
dòng nhập biến ,hoặc có thể l dòng lệnh thực hiện hm no đó ) đợc giữ lại trong cửa sổ
Command History ,v cửa sổ ny cho phép ta sử dụng lại những lệnh đó bằng cách kích
Trang 4
đôi chuột lên các lệnh đó hoặc các biến, nếu nh bạn muốn sử dụng lại biến đó. Xem
hình 1.2
Kích đôi
chuột lên
lênh hoặc
biến để sử
dụng lại
Hình 1.2
c. Cửa sổ Workspace:
L cửa sổ thể hiện tên các biến bạn sử dụng cùng với kích thơc vùng nhớ(số bytes),
kiểu dữ liệu(lớp) ,các biến đợc giải phóng sau mỗi lần tắt chơng trình.(xem hình 1.3)
Kích đôi
chuột lên
biến để
xem dữ
Yêu
liệu(hoặc
thay đổi
giá trị)
Hình 1.3
Ngoi ra nó cho phép thay đổi giá tri , cũng nh kích thớc của biến bằng cách kích đôi
chuột lên các biến. Hoặc kích vo nút bên trái ngay cạnh nút save
VÝ dơ khi chän biÕn(gi¶ thư lμ biÕn b) råi kích đúp(hoặc kích chuột vo nút cạnh nút save)
ta đơc cưa sỉ sau gäi lμ Array Editor: xem h×nh 1.4
Trang 5
Tiêu đề l tên biến b , định dạng dữ liệu ở ô có tên l: Numeric format, mặc định lμ d¹ng
short, KÝch th−íc size lμ 1 by 3 (tøc lμ mét hμng vμ 3 cét) ta cã thÓ thay ®ỉi kÝch th−íc
nμy b»ng c¸ch thay ®ỉi sè cã trong « kÝch th−íc size.
+ Dïng cưa sỉ nμy ®Ĩ l−u các biến
ở dới l dữ liệu của biến b, ta có thể thay đổi chúng bằng cách thay đổi giá
trị trong các ô đó
Hình 1.4
Ví dụ
Nhập biến >>b=[1 2 3 ];
>>x=pi;
Tất cả các biến đều đợc lu trong Workspace trong ®ã thĨ hiƯn c¶ kÝch th−íc (Size), sè
Bytes vμ kiĨu dữ liệu(class) (8 bytes cho mỗi phần tử dữ liệu kiĨu double cơ thĨ lμ 24
bytes dμnh cho b vμ 8 bytes dμnh cho a)
d. Cưa sỉ M-file
Lμ mét cưa sổ dùng để soạn thảo chơng trình ứng dụng, để thực thi chơng trình viết
trong M-file bằng cách gõ tên của file chứa chơng trình đó trong cửa sổ
Commandwindow.
Khi một chơng trình viết trong M-file, thì tuỳ theo ứng dụng cụ thể, tuỳ theo ngời
lập trình m chơng trình có thể viết dới dạng sau
+Dạng Script file :Tức l chơng trình gồm tập hợp các câu lệnh viết dới dạng liệt kê
,không có biến dữ liệu vo v biến lấy giá trị ra
+Dạng hm function có biến dữ liệu vo v biến ra.
e. Đờng dẫn th mục: Nơi lu giữ các file chơng trình
1.2 Nhập biến,lệnh trực tiếp từ cửa sỉ Command Window:
Sau khi xt hiƯn dÊu nh¾c >> trong cửa sổ command window điều đó đồng nghĩa cho
phép bạn nhập biến hoặc thực hiện các câu lệnh mong muốn.
Trang 6
Do dữ liệu của MATLAB đợc thể hiện dới dạng matrận cho nên các biến dùng trong
MATLAB dữ liệu của nó cũng thể hiện dới dạng ma trận, việc đặt tên biến không đợc
đặt một cáh tuỳ tiện m phải đặt theo một quy định
ã
Tên ma trận(biến) phải bắt đầu bằng một chữ cái, v có thể chứa đến 19 ký tự l số
hoặc chữ.
ã
Bên phải dấu bằng l các giá trị của ma trận
ã
Dấu chấm phẩy(; )l để phân cách các hng, còn các giá trị trong hng đợc phân
cách nhau bởi dấu phẩy(,) hoặc dấu cách( phím space).
ã
Kết thóc nhËp ma trËn th−êng cã dÊu chÊm phÈy hc không tuỳ theo bạn muốn
thể hiện kết quả của nó hay không.
a. Nhập các biến, matrận, các lệnh liệt kê trực tiếp
Thông thờng Matlab sử dụng 4 vị trí sau dấu phẩy cho các số thập phân có dấu phẩy
chấm ®éng, vμ sư dơng biÕn “ ans “ cho kÕt quả của phép tính. Ta có thể đăng ký biến thể
hiện kết quả ny của riêng mình . Xét tập các lệnh sau:
Ví dụ trờng hợp không sử dụng biến lu kết quả, biến ans tự động đợc gán
>> 8+9
ans =
17
NhËp biÕn r = 8/10 trong cưa sỉ CommandWindow nh− sau:
>> r = 8/10
r=0.8000
Bạn có thể sử dụng các biến nμy cho c¸c phÐp tÝnh tiÕp theo vÝ dơ nh−:
>> s=10*r
s=
8
VÝ dơ nhËp trùc tiÕp c¸c sè liƯu nh− sau
>> a=[1 2;3 4]
a =
1
2
3
4
Matlab có hng trăm hm đợc định nghÜa s½n vÝ dơ nh− hμm tÝnh sin .. .
>> x=pi;
%nhËp biÕn x
>> sin(x) % nhËp lÖnh sin(x), Ên enter ®Ĩ thùc hiƯn lƯnh tÝnh sin(x)
ans =
1.2246e-016
+ C¸c phÐp tÝnh sư dơng trong Matlab :
Trang 7
Trong MATLAB cũng sử dụng các phép toán thông thờng đợc liệt kê trong bảngsau
Ký tự
Lệnh Matlab
ý nghĩa
+
*
/
\
^
Cộng a + b
Trừ a - b
Nhân ab
Chia phải
a
a/b=
b
Chia trái
a
b\a =
b
Mũ a^b
a+b
a-b
a*b
a/b
b/a
a^2
Thứ tự u tiên các phép toán:
Tất cả các biểu thức toán học đều đợc thực hiện từ trái qua phải, ta có bảng thứ tự u tiên
nh sau:
Thứ tự u tiên
Các phép
1
Dấu ngoặc trong biểu thức
2
Toán tử mũ ^ , thực thi từ trái qua phải
3
Toán tử nhân, chia có cùng mức u
tiên,thực hiện từ trái sang phải .
4
Cộng , trừ
Ví dô1 :
>> a=[1 2;3 4];
>> b=[5 6;7 8];
>> a+b^2
ans =
68
80
94
110
VÝ dụ2 Giải phơng trình bậc hai, các lệnh nhập trong cđa sỉ CommandWindow
>>a= 1;
>>b=-2;
>>c=1;
>>delta= b^2- 4*a*c;
>>x1=(-b+ sqrt(delta) )/(4*a);
>>x2=(-b- sqrt(delta) )/(4*a);
Trang 8
Chú ý : + Các lệnh đợc kết thúc bằng dấu chấm phẩy, Matlab sẽ không thể hiện kết quả
trên mn hình, ngợc lại không có dấu chấm phẩy Matlab sẽ thể hiện kết quả.
+ Trong quá trình nhập ma trận nếu các phần tử trên một hng di quá ta có thể
xuống dòng bằng toán tử ba chấm( . . . )
VÝ dơ
>>Number_apples=10;Number_Oranges=25,Number_bananas=34;
>>Fruit_Purchased= Number_apples+ Number_Oranges+ ...
Number_bananas
1.3 Sư dơng c¸c lệnh gián tiếp từ các file dữ liệu
Nh đà trình by trong phần cửa sổ M-file, tập hợp các lệnh của MATLAB đợc
soạn thảo trong cửa sổ M-file dới dạng Script file hoặc dạng hm function(có biến đầu
vo v ra), v đợc ghi (lu)vo file dữ liệu có phần mở rộng l .m (Thông thờng các
chơng trình soạn thảo trong M-file thờng đợc lu theo đờng dẫn C:\matlab\
work\Tên_file ), muốn thực thi chơng trình soạn thảo đó ta gọi lệnh trong cửa sổ
Commandwindow, tuỳ theo chơng trình viết dạng Script file hay function mμ trong cưa
sỉ ta cã 2 c¸ch gọi nh sau:
ã Đối với chơng trình viết dạng Script file
>> tên_file ;
a=1;
b=-2;
c=1;
delta=b^2-4*a*c;
x1=(-b+sqrt(delta))/(2*a)
x2=(-b-sqrt(delta))/(2*a)
% lu vo file GPTB2.m
Ví dụ giải phơng tr×nh bËc hai t×m nghiƯm x1 vμ x2 viÕt trong M-file dạng Scriptfile:
Thực thi chơng trình trên trong cửa sổ CommandWindow bằng lệnh
>>GPTB2
ã
Đối với chơng trình viết dạng function ,có tham số đầu vo v ra,ta phải truyền
đủ các tham số cần thiết.
Ví dụ : Giải phơng trình bậc hai với ba tham số đầu vo l các hệ số a , b, c v hai
biến đầu ra l nghiệm của phơng trình x1 v x2
(Xem cách viết hm function ë môc sau)
function [x1, x2]
=GPTB2(a,b,c)
x1=(-b+sqrt(delta))/(2*a);
%Tinh nghiem x1
x2=(-bsqrt(delta))/(2*a);
Trang 9
Thực hiện bi toán trên trong Command window nh sau:
>>a= 1;
>>b=-2;
>>c=1;
>>[x1,x2]=GPTB2 (a,b,c) % cấu trúc chung l [x1,x2]=Tên_file (a,b,c)
( hoặc [x1,x2]=GPTB2(1,-2,1)
)
Lu ý rằng khi viết chơng trình trong M-file, bạn muốn ghi chú thích ta dùng ký
tự % đặt trớc dßng chó thÝch nh− sau
%----------dßng chó thÝch -------------VÝ dơ 2
%ViÕt trong M-file(d¹ng Script file)
x=0:0.1:10 ; %T¹o vector x
y=cos(x);
plot(x,y); % VÏ đồ thị hm cosin
%lu vo file có tên l dai1.m
Thực thi hm trên cửa sổ commandwindow bằng lệnh
>> dai1
Viết chơng trình trong M-file đợc dùng l chủ yếu ,đặc biệt đối với những chơng trình
di , phức tạp thì bạn nên viết trong M-file.
1.4 Dòng nhắc gán giá trị biên
Đối với bạn đà học lập trình Pascal, bạn muốn nhập giá trị khi thực thi chơng
trình bạn dùng cặp lệnh:
writeln( 'Nhập giá trị của a=');
readln(a);
Nhng đối với MATLAB thì bạn sẽ thấy rất đơn giản chỉ dùng một lệnh duy nhÊt ®ã lμ :
a=input(‘Nhap gia tri cua a=’);
VÝ dơ: Trong cưa sỉ Commandwindow ta gâ lƯnh
>> a =input(‘nhap a=’);
Trang 10
Nhấn Enter cho kết quả dới dạng
nhap a= 3; đồng nghĩa với việc gán a=3.
Sử dụng dòng nhắc gán giá trị biên trong trờng hợp ta muốn thay đổi giá trị các biến lúc
thực thi chơng trình.
M-file,
có thể
viếttrình
trong
Ví%dụChơng
: sử dụngtrình
dòngviết
nhắctrong
gán giá
trị biênbạn
để giải
phơng
bậc hai
CommandWindow
a=input(nhap he so a=);
b=input(nhap he so b=);
c=input(nhap he so c-=);
Delta=b^2-4*a*c;
x1=(-b+ sqrt(Delta))/(2*a)
x2=(-b+ sqrt(Delta))/(2*a)
1.5 Cách tạo một hm function
Trớc hết ta thống nhất rằng, để tạo một hm function ta phải soạn thảo nó trong Mfile. Cấu trúc hm nh sau:
%Khai báo hm có từ khoá function
function[danh sách tên kết quả]= Tên_hm(danh sách các biến đầu vo)
% Thân chơng trình
câu lệnh 1;
câu lệnh 2;
câu lệnh 3;
....
câu lệnh n;
%kết thúc chơng trình khi kết thúc câu lệnh
Chú ý:
ã Danh sách tên kết quả, v tham số đầu vo đợc cách nhau bằng dấu phẩy.
Ví dụ : function[x1,x2,x3]=dai2(a,b,c,d)
ã
Thân chơng trình không bắt đầu bằng từ khoá Begin v không kết thúc bằng từ
khoá End nh Ngôn ngữ lập trình Pascal.
ã Ta nªn l−u vμo file cã tªn trïng víi tªn hμm
VÝ dụ: Cho sơ đồ khối của hệ thống điều khiển tự động nh hình dới đây
u
(-
num 2
den 2
num1
den1
Trang 11
y
Nhiệm vụ: Tính hm truyền kín của hệ thống
Chơng trình có thể đợc viết nh sau:
function[numk, denk]=ham_truyen(num1, den1, num2, den2)
numh=conv(num1, num2);% conv l hm nhân, hm ny đợc định nghĩa sẵn
denh=conv(den1,den2);
numk=numh;
m=length(denh)- length(numh);
numh1=[zeros(:,m), numh];
denk= numh1+denh;
%kết thúc chơng trình tại đây bạn nªn l−u vμo file cã tªn lμ ham_truyen.
Thùc thi hμm:
>> num1=[1 1];
>>den1=[1 2 1];
>>num2=[1 2];
>>den2=[1 2 1 4];
>>[numk,denk]=ham_truyen(num1,den1,num2,den2);
1.6 Sư dơng hm có sẵn
Có rất nhiều hm có sẵn, đó l các hm đà đợc lập trình sẵn,v đợc đa vo th viện, để
xem một hm cũng nh cấu trúc, cách sư dơng ta dïng lƯnh >>help tªn_hμm
VÝ dơ Ta mn xem cÊu tróc hμm ode23
>>help ode23
1.7 VÏ c¸c hμm
Dïng lƯnh fplot để vẽ các hm, hm ny có thể có sẵn(ví dụ nh sin, cos . . .), hoặc các
hm tạo bởi ngời dùng viết trong M-file dạng function
Cấu trúc:
fplot(Tên_hm,[Xmin ,Xmax]
,tol,N,LineSpec);hoặc
fplot( @Tên_hm,[Xmin ,Xmax]
,tol,N,LineSpec);
Lu ý:Đối với các hm toán học có sẵn(không phải định nghĩa) ví dụ nh sin, cos ,... th×
cã thĨ thùc hiƯn nh− sau:
+ fplot(‘sin(x)’,2*pi*[-1 1] ) %vÏ y=sin(x) víi x=[-2*pi 2*pi];
+ fplot([sin(x),tan(x),cos(x)]’, 2*pi*[-1 1] );
Trang 12
%vẽ ba đồ thị trên cùng một cửa sổ với x=[-2*pi 2*pi] ;
•
Dïng hμm inline vÝ dơ : f=inline(‘x+2’); fplot(f,[0 2] );
ã Đối với các hm trong M-file có thể sư dơng c¸c c¸ch sau
VÝ dơ: TÝnh f1, f2, f3
function [f1,f2,f3]= FUNC(x)
f1= x+3;
f2=x;
f3=x.^2;
%l−u vμo file FUNC.m
Hμm FUNC sÏ tr¶ vỊ một vector hng ứng với mỗi giá trị của x, ví dụ x=[x1;x2] thì hm
FUNC sẽ trả về ma trận sau đây.
f1(x1) ,f2(x1), f3(x1)
f1(x2) ,f2(x2), f3(x2)
Lợi dụng đặc điểm ny ta có thể vẽ nhiều đồ thị trên cùng một cửa sổ thông qua ví
dụ sau:
%Tạo hm Y
function Y=myfun(x)
Y(:,1)=200*sin(x(:))./(x(:);
Y(:,2)=x(:).^2;
%lu vo file có tên l
myfun.m
Thực thi chơng trình trên trong Commandwindow
>>fplot( myfun,[-20 20] );
(hoặc dùng >>fplot(@myfun ,[-20 20] )
Các thông số tol, N , LineSpec lần lựot l sai số liên quan(tơng đối), số điểm ít nhất, biểu
diễn thuộc tính của đờng.
Chú ý:Khi bạn muốn hạn chế khoảng biểu diễn cả trơc x vμ y th× dïng
Xmax Ymin Ymax] .
[Xmin
1.8 L−u v lấy dữ liệu
Với Matlab khi thoát khỏi chơng trình(tắt),các biến dữ liệu(trongWorkspace) sẽ bị
mất,do vậy khi thực hiện lại chơng trình bạn phải khai báo lại các biến cần thiÕt trªn,
Trang 13
điều ny gây mất thời gian, v biện pháp tốt l bạn lu tất cả các biến cần thiết cho
chơng trình của bạn vo file riêng, v khi cần chúng ta gäi chóng ra b»ng mét lƯnh
L−u d÷ liƯu cã thể l :
ã
Lu tất cả các biến trong vùng lm việc( Workspace) hoặc
ã Một số biến nhất định tuỳ theo nhu cầu .
Sau đây l các cách lu các biến d÷ liƯu:
1.8.1 L−u vμ lÊy d÷ liƯu d−íi file nhi phân(binary)
Lu dữ liệu:
>>save('C:\matlabR12\work\ten_file') %lu ton bộ biến trong Workspace
>>save('C:\matlabR12\work\ten_file', 'x','y')% chØ l−u biÕn x vμ y
Chó ý: C:\matlabR12\work\ten_file lμ ®−êng dẫn tới file, thông thờng khi ci đặt chơng
trình thì mặc định l ci vo ổ C (nếu bạn ci vμo ỉ D, khi sư dơng lƯnh save, b¹n chØ cần
thay đổi thnh :D:\matlabR12\work\ten_file)
Ví dụ:
%Viết trong Command Window
>>a=1;
>>b=1;
>>c=-2;
>>save('C:\matlabR12\work\Bien', 'x','y')
Khôi phục lại dữ liệu dùng lệnh sau:
load ('C:\matlabR12\work\ten_file') % lấy dữ liệu
Ví dụ: Bây giờ ta xoá hai biến a v b ra khỏi chơng trình v thực hiện lệnh load để lấy lại
dữ liệu:
>>clear a ; %xoá biến a
>>clear b ; %xo¸ biÕn b
>> load ('C:\matlabR12\work\ten_file')
>>a %kiĨm tra xem a đà khôi phục lại
cha
a=1
>>b%kiểm tra xem b đà khôi phục lại
cha
b=1
1.8.2 Lu v lấy dữ liệu dới file ASCII
>>save('C:\matlabR12\work\ten_file','-ASCII').
Lu ton bé biÕn trong workspace vμo file
Trang 14
>>save('C:\matlabR12\work\ten_file','x','y','-ASCII').
L−u hai biÕn x vμ y vμo file
>>load ('C:\matlabR12\work\ten_file', '-ASCII ').
khi thùc hiƯn lƯnh nμy th× trong Workspace sÏ xt hiện biến có tên l tên của file , kích
đúp chuột lên biến ny sẽ xuất hiện dữ liệu của ton bộ biến đợc lu giữ, việc truy nhập
đến biến lu giữ thông qua việc truy nhập kiểu Matrận
Ví dụ Command window
>>a=2;
>>b=3;
>>c=4;
>>save('C:\matlabR12\work\ save')%l−u 3 biÕn trong file tªn save
>> load('C:\matlabR12\work\ save')%khôi phục dữ liệu
hoặc
>> save('C:\matlabR12\work\ save', 'a','b')%lu hai biến a v b
trong file %tên save
Tơng tự:
>>a=3;
>>b=4;
>>save('C:\matlabR12\work\save','a','b','-ASCII')
>>load('C:\matlabR12\work\save','-ASCII') %khôi phục dữ liệu
Trong workspace sÏ cã biÕn save nh− sau:
KÝch ®óp vμo save sÏ xt hiƯn d÷ liƯu cđa hai biÕn a vμ b
Hoặc đơn giản để lu biến bạn có thể chọn biÕn råi kÝch vμo nót save trong cưa sỉ
Workspace
1.9 C¸c toán tử logic v các lệnh điều kiện
Trang 15
1.9.1 C¸c to¸n tư quan hƯ
Mét biĨu thøc logic trong MATLAB có đợc từ sự so sánh các đại lợng khác
nhau(ví dụ hai đại lợng A v B). Những ký hiệu thể hiện sự so sánh đợc gọi l các toán
tử quan hệ , sau đây l liệt kê các toán tử
Bảng liệt kê các toán tử quan hệ
Toán tử quan hƯ
ý nghÜa
<
Nhá h¬n vd A
>
Lín h¬n vd A>B
<=
Nhá h¬n hoặc bằng A<=B
>=
Lớn hơn hoặc bằng A>=B
==
Bằng vd A==B
~=
Không bằng vd A~=B
C¸c to¸n tư quan hƯ thùc hiƯn viƯc sã sánh từng phần tử của mảng, chúng trả lại một
mảng có cùng kích thớc với hai mảng trên( hai mảng ban đầu phải có cùng kích thớc
nếu không sẽ gây ra lỗi),với các phần tử trong mảng l 0 hoặc 1 tơng ứng với các quan
hệ so sánh l sai hay đúng
Trờng hợp đặc biệt so sánh hai số phức:
+ Khi dùng các toán tử quan hệ l < hoặc > thì chỉ so sánh phần thực của nó m thôi .
+ Khi dùng các toán tử quan hệ <= hoặc >= thì so sánh cả phần thực lẫn phần ảo
Khi so sánh hai chuỗi .
Dùng toán tử strcmp
Cấu trúc:
strcmp( chuỗi1, chuỗi2)
Ví dụ :
>>Chuoi1= Pham Duc Dai;
>>Chuoi2=Vu van van;
>>ss=strcmp(Chuoi1,
Chuoi2);
ss=0
Chú ý : Khi so sánh một số vô hóng với một ma trận thì số đó đợc nhân với một m trạn
ones(size(ma trận so sánh)) sao cho nó có kích thớc giống với ma trận cần so sánh rồi
mới so sánh .
VÝ dô:
X=5; X>=[1 2 3 ; 4 5 6; 7 8 9] Ù X=5*ones(3,3); X>[1 2 3 ; 4 5 6; 7 8 9]
KÕt qu¶ tr¶ vỊ :
ans=
Trang 16
1 1 1
1 1 0
>>X=5;
0 0 0
>>X >=[1 2 3 ; 4 5 6; 7 8
9]
ans
1
1
0
1
1
0
1
0
0
1.9.2 C¸c to¸n tư logic
(Logical Operator & | ~)
Cấu trúc:
Toán tử logic
ý nghĩa
&
V vd A&B
|
Hoặc vd A|B
~
Đảo vd ~A
Các ký hiệu & , | ,~ l các toán tử logic v hoặc đảo. Chúng thực hiện trên từng phần tử
của của các mảng so sánh( toán tử logic cho phép thực hiện trên nhiều mảng với yêu cầu
l các mảng phải có cùng kích thớc), kÕt qu¶ tr¶ vỊ lμ mét ma trËn cã cïng kích thớc
với các ma trạn so sánh trên. Các toán tử logic thờng dùng để liên kết các biểu thức quan
hệ.
Bảng chân lý:
Đầu vo
And
Or
Xor
Not
A
B
A&B
A|B
xor(A,B)
~A
0
0
0
0
0
1
0
1
0
1
1
1
1
0
0
1
1
0
1
1
1
1
0
0
Mức u tiên cao nhất đối với toán tử logic đảo( not ,~) , hai toán tử and vμ | cã cïng møc
−u tiªn , trong mét biểu thức toán học thì chúng đợc thực hiện theo thứ tự từ trái sang
phải.
Ta có thể sử dụng các to¸n tư ‘and’ , ‘or’ ,’not’ ⇔ & , | , ~ nh− b¶ng sau:
A&B
A|B
~A
and(A,B)
or(A,B)
not(A)
Trang 17
Chó ý trong c¸c biĨu thøc sư dơng c¸c to¸n tử locgic thì ta nên dùng dấu ngoặc để xác
định rõ rng ,v đảm bảo tính tơng thích trong các phiên bản mới của Matlab
Tổng kết:
ã
Các phép tính số học sẽ đợc thực hiện trớc khi thực hiện các biểu thức logic.
ã
Khi tính toán ta nên thêm dấu ngoặc đơn để lm biểu thức trở nên sáng sủa hơn.
ã
Gặp những biểu thức phức tạp sẽ sử lý các tính toán số học trớc, sau đó các toán
tử logic đợc xem xét từ trái qua phải .
1.10 Các câu lệnh điều kiện, rẽ nhánh
1.10.1 Câu lệnh điều kiện if.
Cấu trúc
% Đây l cấu trúc đơn giản nhất.
if expression
Statements;
end;
% Cấu trúc sử dụng lệnh elseif ,else v if đợc viết liền
if expression1
Statements;
elseif expression2
Statement;
else
Statements;
end
BiĨu thøc expression bao gåm c¸c to¸n tư quan hƯ vÝ dơ nh− (count<limit) hc (heightoffset)>0 ), Ngoμi ra nã còn kết hợp với các toán tử logic để liên kÕt c¸c biĨu thøc quan
hƯ.
VÝ dơ 1: if (count<limit)&((height-offset)>0)
VÝ dơ 2: Cho khoảng [a b], viết chơng trình chia khoảng nμy thμnh n kho¶ng b»ng nhau
víi n
function v= lnearspace(a,b,n)
cho
if n<2
tr−íc.
error(‘Ban nhap sai, it nhat n phai lon
hon 1’);
end;
h=(b-a)/(n-1);
v=a:h:b;
-------------------------------------------------------------------------Thùc thi ch−¬ng trình trên trong Command window nh sau:
>> v=Soan1(5,1,5)
v =
5
Trang 18
4
3
2
1
Ví dụ 3: Chơng trình xác định dấu của số nhËp vμo :
function s= sign(x)
if x>0
s=1;
% so duong
elseif x<0
s=-1;
% so am
else
s=0;
% so =0
end;
Nguyên tắc lm việc của lệnh if nh sau :Khi biểu thức expression đúng thì câu lệnh ngay
sau lệnh if đợc thực hiện nếu sai câu lệnh đó sẽ đợc bỏ qua đến lệnh elseif
Một biểu thức só sánh l đúng nếu tất cả các phần tử so sánh của hai mảng (hoặc hai ma
trận) trả về gía trÞ 1
VÝ dơ:
A=[ 1 0; 2 3]; B=[1 1; 3 4];
Thì : + A
+ A<(B+1) l đúng bởi vì không phần tử no trong A lớn hơn phần tử trong B tơng
ứng
% CÊu tróc khi sư dơng lƯnh else if
if expression1
statements1;
else
if expression2
statements2;
end
end
Ta thấy trong cấu trúc trên thì có hai lệnh if riêng biệt cho nên phải có hai từ kết thúc lμ
end.
Bμi tËp vÝ dơ: NhËp vμo bμn phÝm ®iĨm cđa một học sinh rồi in ra đánh giá :
Diem= input(nhap diem vao=’);
if ( Diem< 5)
Trang
19
fprintf(‘Hoc luc
yeu’);
elseif( Diem>=5)&(Diem<7)
fprintf(‘Hoc luc trung binh’);
1.10.2 Vòng lặp for
Cấu trúc:
for i= imin :i: imax
statements;
end
i : L bớc nhảy của vòng lặp for, giá trị mặc ®Þnh lμ =1;
VÝ dơ: TÝnh tỉng s= 1+2^p +3^p+ ... n^p ; ( p lμ sè mò )
function s= Sump(n , p)
s=0;
for i=1:n ; s=s+i^p ;end;
Hai chơng trình sau đây l giống nhau
for i=1:100;
y(i)=sin(i);
end;
x=1:100;
y=sin(x);
1.10.3 Vòng lặp while
Cấu trúc:
while( bieu_thuc_logic)
statements;
end;
Trớc hết vòng lặp kiểm tra xem nếu biểu thức logic đúng thì thực hiện các câu lệnh
statements.
n=input(Nhap n=);
Ví dụ:
s=0; i=0;
while( i
s=s+i;
end;
1.10.4 LƯnh ng¾t break , error, return
Trang 20