Tải bản đầy đủ (.docx) (72 trang)

giải phương trình siêu việt bằng matlab

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.63 MB, 72 trang )

CHƯƠNG 1: TỔNG QUAN VỀ MATLAB
1.1. LÀM QUEN VỚI MATLAB.
MATLAB là từ viết tắt của Matrix Laboratory, được công ty Math Works khai thác
và phát triển.
MATLAB cho phép tính toán số với ma trận, vẽ đồ thị hàm số hay biểu đồ thông
tin, thực hiện thuật toán, tạo các giao diện người dùng và liên kết với những chương trình
máy tính viết trên nhiều ngôn ngữ lập trình khác.
Với thư viện Toolbox, MATLAB cho phép mô phỏng tính toán, thực nghiệm nhiều
mô hình trong thực tế và kỹ thuật.
Khả năng nổi trội của MATLAB:
- Các phép toán ma trận.
- Giải phương trình, hệ phương trình.
- Vẽ đồ thị hàm số 2D, 3D.
- Xử lý ảnh trong MATLAB.
- Lập trình trong MATLAB.
- Một số hàm trong MATLAB.
Trong phạm vi đề tài này, nhóm sinh viên sử dụng MATLAB version 2010b.
1.1.1. Khởi động và thoát khỏi MATLAB.
Màn hình mặc định của MATLAB khi khởi động như sau:
- Cửa sổ Command Window: cửa sổ lệnh
- Các menu quen thuộc như trong Windows như file, edit, debug,desktop, window
và help.
MATLAB hiển thị dấu nhắc dạng “>>”: câu lệnh được viết sau dấu nhắc và nhấn
enter để thực hiện, kết quả được hiển thị ngay trên cửa sổ.
Chỉnh sửa câu lệnh bằng các phím: esc: xóa câu lệnh, phím

để lấy lại câu lệnh,
phím
,
← →
, delete, backspace để chỉnh sửa.


Cửa sổ Command History: ghi lại toàn bộ các dòng lệnh đã vào trên cửa sổ lệnh.
-1-
Hình 1.1: Giao diện chính của chương trình.
1.1.2. Trợ giúp trực tuyến trong MATLAB.
MATLAB có trợ giúp trực tuyến đối với tất cả các lệnh và hàm nội trú.
Cú pháp: >> help <tên lệnh hoặc tên hàm muốn tìm hiểu>
Ví dụ 1.1:
>> help sin
SIN Sine of argument in radians.
SIN(X) is the sine of the elements of X.
See also asin, sind.
Overloaded methods:
sym/sin
codistributed/sin
Reference page in Help browser
doc sin
Nói chung, MATLAB phân biệt chữ hoa và chữ thường trong câu lệnh. Hầu hết các
tên biến và hàm nội trú của MATLAB được viết bằng chữ thường.
1.1.3. Chế độ làm việc trực tiếp và chế độ M-file trong MATLAB.
MATLAB có 2 chế độ làm việc:
Làm việc trực tiếp: gõ lệnh trực tiếp trong cửa sổ Command và chương trình thực
hiện lệnh ngay khi nhấn Enter, kết quả cũng được hiển thị trên cửa sổ.
Ví dụ 1.2:
>> x = 1;
>> 4*atan(x)
ans =
3.14159265358979
-2-
Nếu cuối câu lệnh có dấu ‘;’ thì MATLAB sẽ không hiển thị kết quả câu lệnh đó ở
phía dưới. Kết quả sẽ được gán tự động vào biến ans.

Chạy chương trình MATLAB với file script được soạn thảo trước, được lưu dưới
dạng file *m, khi chạy file này các lệnh trong file sẽ thứ tự được thực hiện.
Ví dụ 1.3:
Ta thực hiện đoạn chương trình trên với M-file, lưu với tên file là pi.m.
% Chuong trinh tinh in ra so pi"
x = 1;
format long g;
4*atan(x)
End
<Dấu ‘%’ đặt đầu câu lệnh báo cho chương trình dịch bỏ qua câu lệnh đó>
Trong cửa sổ lệnh ta chỉ việc gõ lệnh >>pi Enter.
>> pi
ans =
3.1416
1.1.4. Một số biến gán sẵn và hàm nội trú của MATLAB.
Trong MATLAB có một số tên hàm và biến chuẩn. Khi đặt tên m-fle và tên biến
tránh. Trùng với các tên đó để tránh xảy ra xung đột. Ta có bảng các tên biến và tên hàm
hay được sử dụng như sau:
Bảng 1.1: Danh sách một số biến gán sẵn và hàm nội trú của MATLAB
STT Tên Ý nghĩa
1 ans Tên biến chứ kết quả nếu chưa gán kết quả tính cho biến nào
2 eps
Số epsilon, số thực đủ nhỏ để khi thêm vào một số thành một số
khác mà MATLAB sẽ phân biệt được nó với số gốc: Eps
=2.2204.e-16
3 Pi Số pi = 3.1416
4 inf Số vô cùng, kết quả của phép chia
5 NaN Not-a-Number, số vô định, kết quả của phép chia
6 i (and) j Đơn vị ảo hay
7 realmin Số dương nhỏ nhất biểu diễn được trên MTĐT: 2.2251

8 realmax Số dương lớn nhất biểu diễn được trên MTĐT: 1.7977
9 abs(x) Hàm giá trị tuyệt đối hoặc modul của số phức x
10 acos(x) Hàm
11 asin(x) Hàm
12 atan(x) Hàm
13 atan2(y,x) Hàm
14 conj(x) Hàm tính số liên hợp của số phức x
15 cos(x) Hàm
16 exp(x) Hàm
17 imag(x) Phần ảo của số phức x
18 log(x) Hàm
19 log2(x) Hàm
-3-
20 log10(x) Hàm
21 real(x) Hàm lấy phần thực của số phức x
22 sign(x) Hàm dấu của số thực x
23 sin(x) Hàm
24 sqrt(x) Hàm
25 tan(x) Hàm
26 cot(x) Hàm
1.1.5. Định dạng dữ liệu hiển thị trên màn hình.
Tất cả các biến đều có thể được hiển thị trên màn hình theo các định dạng khác
nhau phụ thuộc vào phương án sử dụng câu lệnh Format mới nhất.
Cú pháp câu lệnh Format:
format <string1> [ <string 2>]
Giải thích: Lệnh FORMAT dùng để thay đổi qui cách hiển thị dữ liệu.
- Nếu <string1> là:
+ ‘long’ : Hiển thị kết quả tới 16 chữ số có nghĩa.
+ ‘short’ (giá trị mặc định): Hiển thị kết quả với 5 chữ số có nghĩa.
+ ‘rat’: Hiển thị kết quả dạng phân số (giá trị xấp xỉ).

- Nếu <string2> là:
+ ‘e’: Hiển thị kết quả kiểu số thực dấu phẩy động.
+ ‘g’: Hiển thị kết quả kiểu số thực dấu phẩy tĩnh.
Ví dụ 1.4:
>> 4*atan(1)
ans =
3.1416
>> format long e; ans
ans = 34
3.141592653589793e+00
>> format long g ans
ans =
3.14159265358979
>> format rat ; ans
ans =
355/113
1.1.6. Tạo vector ma trận.
Một thế mạnh của MATLAB là xử lí được vector, ma trận và cả số phức. Vector và
ma trận có thể được gán cho các biến theo nhiều cách khác nhau. Cú pháp của lệnh tạo
vector cách đều như sau:
<Var-Name> = [First : Increment : Last]
Lệnh sẽ sinh ra một vector hàng với phần tử đầu là First, phần tử cuối là Last và số
gia là Increment, mặc định là 1. Vector này sẽ được gán cho biến <Var-Name>.
Ví dụ 1.5:
-4-
>> a = [1 2 3 4 5 6 7 8 9 10]; % Tạo
vector hàng
>> b = [1 ; 2 ; 3; 4 ; 5 ; 6 ; 7 ; 8 ; 9 ; 10];% Tạo vector
cột
>> c = [1:10]; % Vector hàng giống a

>> e = sin(a); % Vector cùng cỡ với a
>> A=[1 2 3 ; 4 5 6 ; 7 8 9]; % Ma trận
cỡ 3x3
>> B = [A; 10 11 12 ]; % Ma trận
cỡ 4x3
>> f = [ 0.5:2:10]
f =
0.5000 2.5000 4.5000 6.5000
8.5000
1.1.7. Xử lý các phần tử ma trận.
Trong MATLAB các phần tử của một vector hay ma trận có thể được xác định theo
nhiều cách khác nhau. Một cách đơn giản nhất là viết tên ma trận đi kèm với các chỉ số
hàng và cột của của phần tử cần xử lý.
Ví dụ 1.6:
>> A=[1 2 3 ; 4 5 6 ; 7 8 9 ];
>> C = [A; 10 11 12 ];
>> C(4,2) %% Hiện phần tử hàng 4 cột 2 của ma trận C
ans =
11
>> A(8) %% Hiện phần tử thứ 8 trong ma trận A
ans =
6
Nếu muốn rút trích cả một hàng, một cột hay một ma trận con thì dùng các câu
lệnh như sau:
Ví dụ 1.7:
>> A(2,:) %% Hiện hàng thứ 2 của A
ans=
4 5 6
>>A(:,3) %% Hiện cột thứ 3 của A
>> Asub = A(1:2, 2:3) ;

>> C=A(:,[2 3];
Bạn cũng có thể rút trích dữ liệu trong các ma trận để “lắp ghép” với nhau để tạo
thành một ma trận mới:
Ví dụ 1.8:
>> B =A([3 1 1], :)
B =
7 8 9
1 2 3
1 2 3
>> E=[A B; B A] 36
E =
1 2 3 7 8 9
4 5 6 1 2 3
7 8 9 1 2 3
7 8 9 1 2 3
-5-
1 2 3 4 5 6
1 2 3 7 8 9
1.1.8. Các phép toán trên ma trận.
Bảng 1.2: Danh sách các phép toán số học trên ma trận.
Stt Toán tử Ý nghĩa
1 *
Phép nhân nói chung: Vô hướng –Vô hướng, Vô hướng -Vector,
Vô hướng- Ma trận, Ma trận – Ma trận
2 .*
Phép nhân phần tử với phần tử tương ứng
3 ^
Phép luỹ thừa
4 .^
Phép luỹ thừa của từng phần tử

5 ‘
Phép chuyển vị ma trận hoặc tính số phức liên hợp
6 .’
Phép chuyển vị ma trận
7 + (-)
Phép cộng (trừ) ma trận-ma trận, ma trận-vô hướng
8 /
Phép chia phải
9 ./
Phép chia phải tương ứng từng phần tử của ma trận. Các ma trận
phải cùng kích thước
10 \
Phép chia trái
11 .\
Phép chia trái tương ứng từng phần tử của ma trận. Các ma trận
phải cùng kích thước
Khi tính toán với các ma trận, kích thước của chúng phải phù hợp. Nếu không,
MATLAB sẽ đưa ra thông báo lỗi.
Ví dụ 1.9:
>> d = [10:-1.5:5.5]'; %% Tạo ra một vector cột
>> C = [ 1 2 3; 4 5 6; 7 8 9];
>> b = [ 10 11 12];
>> b.*b %% Tương tự như b.^2
ans =
100 121 144
>> C*C'
ans =
14 32 50
32 77 122
50 122 194

>> C^2 %% Tương tự như C*C
ans =
30 36 42
66 81 96
-6-
102 126 150
>> C*b %% Câu lệnh có lỗi kích thước
??? Error using ==>*
Inner matrix dimensions must agree
>> C*b'
ans =
68
167
266
>> C.^2; %% Bình phương từng phần tử
>> B= C/2; %% Có kết quả tương tự B= 2\A
>> a=[1:5}; b=[6:10];
>> a.\b 38
ans =
6.0000 3.5000 2.6667 2.2500
2.0000
>> C = [ 1 2 3; 4 5 -6; 7 -8 9];
>> d = [ 10; 11; 12];
>> C\d %% Giải hệ phương trình Cx=d
ans =
2.2667
1.9333
1.2889
1.1.9. Các hàm về kích thước vector và ma trận.
Trong các chương trình của MATLAB, các biến không cần khai báo trước. Kiểu và

kích thước mỗi biến tùy thuộc vào dữ liệu thực tế mà nó đang lưu trữ. Do đó, nhiều khi ta
cần phải xác định kích thước hiện tại của ma trận để chọn câu lệnh xử lý thích hợp, chẳng
hạn như trong câu lệnh điều khiển vòng lặp.
Bảng 1.3: Các hàm về kích thước vector và ma trận.
Stt Tên hàm Ý nghĩa
1 length(x)
Trả về số phần tử của vector x hoặc max của số hàng và số cột của
ma trận x
2 size(a)
Trả về vector 2 chiều gồm số hàng và số cột của ma trận A
3 size(a,p)
Kết quả là : số hàng nếu p =1, số cột nếu p=2 , bằng 1 nếu p>2
Ví dụ 1.10:
>> a = [1, 2, 3; 4, 5, 6; 7, 8, 9; 10, 11, 12]
a =
1 2 3
4 5 6
7 8 9
10 11 12
>> [m n] = size(a)
m =
4
n =
3
>> size(a,1)
ans =
-7-
4
>> size(a,2)
ans =

3
>> length(a)
ans =
4
1.1.10. Một số ma trận chuẩn của MATLAB.
Trong MATLAB có một số ma trận được xây dựng sẵn, gọi là các ma trận chuẩn.
Các ma trận đơn giản được cho ở bảng dưới đây:
Bảng 1.4: Một số ma trận quen thuộc.
Stt Ma trận Ý nghĩa
1 ones(m,n) Ma trận gồm toàn số 1, cỡ mn
2 zeros(m,n) Ma trận không, cỡ mn
3 eye(m,n) Ma trận đơn vị mở rộng, cỡ mn
4 [] Ma trận rỗng, tương tự như ones(0,0), zeros(0,0), eye(0,0)
Ví dụ 1.11:
>> a = ones(3,4)
a =
1 1 1 1
1 1 1 1
1 1 1 1
>> e = eye(4)
e =
1 0 0 0
0 1 0 0
0 0 1 0
1 0 0 1
2
1.2. NHỮNG CÂU LỆNH ĐIỀU KHIỂN CHƯƠNG TRÌNH.
1.2.1. Các toán tử, hàm quan hệ và logic.
Khi so sánh 2 số, kết quả đúng là 1 và kết quả sai là 0. Nếu các ma trận so sánh với
nhau, thì chúng phải cùng cỡ và việc so sánh thực hiện với từng phần tử tương ứng của

hai ma trận và kết quả của phép so sánh là một 0-1 ma trận cùng cỡ với chúng.
Bảng 1.5: Danh sách các toán tử quan hệ và logic.
Stt Toán tử Ý nghĩa
1 < So sánh nhỏ hơn
2 <= So sánh nhỏ hơn hoặc bẳng
-8-
3 > So sánh lớn hơn
4 >= So sánh lớn hơn hoặc bẳng
5 == So sánh bằng nhau
6 ~= So sánh không bằng nhau
7 & Toán tử logic Hội
8 || Toán tử logic Tuyển
9 ~ Toán tử logic Phủ định
Ví dụ 1.12:
>> 5~=7-2
ans =
0
>> A =[ 1 2 3; 3 2 1] ;
>> A(1,:) <= A(2,:)
ans =
1 1 0
>> B = [ 1 2 3; 4 5 6; 7 8 9];
>> L = ~(B>5) 42
L =
1 1 1
0 1 0
0 0 0
Bảng 1.6: Danh sách một số hàm quan hệ và logic.
STT Hàm Ý nghĩa
1 any(x) Bằng 1 nếu một phần tử của vector x0, ngược lại bằng 0

2 all(x) Bằng 1 nếu mọi phần tử của vector x0, ngược lại bằng 0
3 find(x)
Tạo ra một vector gồm các chỉ số của các phần tử 0 của vector
x; nếu x là ma trận thì nó được coi như vector bằng cách nối các
cột của ma trận với nhau
4
exist(‘item’
)
Bằng 0 nếu Item không tồn tại; Bằng 1 nếu Item là biến; Bằng 2
nếu Item là M-file; Bằng 3 nếu Item là một Mex-file; Bằng 4
nếu Item là file được dịch từ phần mềm Simulink; Bằng 5 nếu
Item là tên hàm nội trú của MATLAB
5 finite(x)
Là ma trận cùng cỡ với x có các phần tử là 1 nếu các phần tử
tương ứng của x là hữu hạn, ngược lại là 0
6 isnan(x)
Là ma trận cùng cỡ với x có các phần tử là 1 nếu các phần tử
tương ứng của x là NaN, ngược lại là 0
-9-
7 isempty(x) Bằng 1 nếu x là ma trận rỗng, ngược lại bằng 0
8 isstr(x) Bằng 1 nếu x là một xâu, ngược lại bằng 0
9 strcmp(x,y) Bằng 1 nếu 2 xâu x và y giống nhau, ngược lại bằng 0
10 xor(x,y)
Hàm logic đối xứng xor(x,y)= x xor y. Các biến x và y phải là
các ma trận cùng cỡ hoặc một trong chúng phải là vô hướng.
Kết quả là một 0-1 ma trận cùng cỡ: phần tử của nó là 0 nếu cả
2 phần tử tương ứng của x và y cùng bằng 0 hoặc cùng khác 0
11 sign(x) Hàm dấu của x
Ví dụ: 1.13:
>> A = [ 1 2 3; 4 0 6; 0 0 0];

>> exist('A')
ans =
1
>> B=[ 1 0 3; 4 5 NaN; inf 7 8];
>> isnan(B)
ans =
0 0 0
0 0 1
0 0 0
>> finite(B)
ans =
1 1 1
1 1 0
0 1 1
>> any(A)
ans =
1 1 1
>> any(A')
ans =
1 1 0
>> all(A) 44
ans =
0 0 0
>> all(A')
ans =
1 0 0
>> C=[ ];
>> isempty(C)
ans =
1

>> find(A)
ans =
1
2
4
7
8
>>find(A(:,1))
ans =
1
2
>> find(A(:,2))
-10-
ans =
1
>> s =' Hello'; isstr(s)
ans =
1
>> B =eye(3);
>> xor(A,B)
ans = 45
0 1 1
1 1 1
0 0 1
>>xor(B,1)
ans =
0 1 1
1 0 1
1 1 0
>> x=[ 3 -3 0 4];

>> sign(x)
ans =
1 -1 0 1
1.2.2. Câu lệnh kiểm tra và quyết định If.
Cú pháp:
If <ExpL1>
<Commands-1>
[ elseif <ExpL2>
< Commands-2 > ]
[ else
< Commands-3 > ]
end
Giải thích. Câu lệnh IF dùng để kiểm tra và rẽ nhánh chương trình dựa vào giá trị
của các biểu thức logic. Câu lệnh con:
elseif <ExpL2>
< Commands-2>
Có thể không có hoặc có mặt nhiều lần trong cùng một câu lệnh IF.
Đầu tiên, MATLAB kiểm tra giá trị của biểu thức logic <ExpL1>: Nếu nó đúng
(khác 0) thì thực hiện nhóm lệnh <Commands-1>. Ngược lại, nếu <ExpL1>=0,
MATLAB sẽ lần lượt kiểm tra các biểu thức logic dạng <ExpL2>, nếu một biểu thức
logic là đúng thì thực hiện nhóm lệnh <Commands-2> tương ứng… hoặc sẽ thực hiện
<Commands-3> nếu không tìm thấy biểu thức logic nào cho giá trị đúng.
Ta có thể mô tả câu lệnh bằng sơ đồ sau:
-11-
Hình 1.2: Câu lệnh if.
Ví dụ 1.14:
Tính giá trị của y theo các miền giá trị khác nhau của x:
Nếu x<0, y=0:
0


x

5, y=x2
x>5, y=25x
Lệnh như sau:
>> x = -2
x =
-2
>> if x>5
y = 25*x
elseif x >= 0
y = x^2
else
y = 0
end
y =
0
Các biểu thức logic trong cấu trúc điều kiện có thể có dạng tổ hợp: nó được tạo nên
bởi 1 hoặc nhiều biểu thức logic thành phần và được liên kết bằng các toán tử logic.
Trong Matlab có các toán tử logic sau:
Toán tử phủ định NOT:được ký hiệu bằng dấu ~
Ví dụ 1.15:
Nếu (x>=0) có giá trị đúng thì ~(x>=0) có giá trị sai và ngược lại.
Toán tử AND: được ký hiệu bằng dấu &
Ví dụ: nếu các biểu thức (x>=0),(y>=0) đều có giá trị đúng thì biểu thức tổ hợp
(x>=0)&(y>=0) có giá trị đúng. Ngược lại 1 trong 2 biểu thức trên có giá trị sai thì biểu
thức tổ hợp (x>=0)&(y>=0) có giá trị sai.
Toán tử OR: được ký hiệu bằng dấu |
-12-
Ví dụ: nếu các biểu thức (x>=0),(y>=0) đều có giá trị sai thì biểu thức tổ hợp

(x>=0)|(y>=0) có giá trị sai. Ngược lại 1 trong 2 biểu thức trên có giá trị đúng thì biểu
thức tổ hợp (x>=0)|(y>=0) có giá trị đúng.
1.2.3. Câu lệnh Switch
Cú pháp:
switch <Expr>
case <Value-list-1>
< Commands-1>
case <Value-list-2>
< Commands-2>

case <Value-list-n>
< Commands-n>
[otherwise
< Commands n+1> ]
end
Giải thích. Câu lệnh SWITCH dùng để rẽ nhánh thực hiện chương trình tùy thuộc
giá trị của một biểu thức.
Đầu tiên, MATLAB tính giá trị của biểu thức <Expr>, rồi kiểm tra lần lượt giá trị
của nó có nằm trong các danh sách giá trị <Value-list-i> hay không. Nếu giá trị biểu thức
được tìm thấy trong danh sách giá trị <Value-list-i> thì nhóm lệnh <Commands-i> tương
ứng sẽ được thực hiện, trái lại MATLAB kiểm tra danh sách thứ i+1 Nếu giá trị của
biểu thức không nằm trong một danh sách giá trị nào thì MATLAB sẽ thực hiện nhóm
lệnh <Commands n+1>.
Ví dụ 1.16:
Đoạn chương trình được viết trong M-flie: phanloai.m
n = input('Cho biet diem');
disp('Phan loai:');
switch n
case {0,1,2,3,4}
disp('Loai yeu');

case {5,6}
disp('Loai trung binh');
case {7,8}
disp('Loai kha');
case {9,10}
disp('Loai gioi');
otherwise
disp('Diem khong hop le');
end
Thực hiện:
>> phanloai
-13-
Cho biet diem 8
Phan loai:
Loai kha
1.2.4. Câu lệnh lặp có số lần lặp xác định For.
Cú pháp:
For <Var-Name> = <Expr>
< Commands >
end
Giải thích. Trong câu lệnh FOR, nhóm lệnh <Commands> được thực hiện với số
lần lặp đúng bằng số cột của ma trận A được tính bởi biểu thức <Expr>. Mỗi lần thực
hiện một vòng lặp, biến <Var-Name> nhận giá trị bằng một vector cột tương ứng của A.
Ví dụ: 1.17:
>> s = 0;
>> a = [1 2 3; 4 5 6];
>> for t=a
s=s+t;
end; s
s =

6
15
1.2.5. Câu lệnh lặp theo điều kiện While.
Cú pháp:
while <ExpL>
< Commands>
end
Giải thích. Khi thực hiện câu lệnh WHILE, đầu tiên biểu thức logic <ExpL> được
kiểm tra. Nếu nó có giá trị đúng (khác 0) thì nhóm lệnh <Commands> trong vòng lặp
được thực hiện, sau đó MATLAB quay lại kiểm tra biểu thức logic <ExpL> Quá trình
này lặp đi lặp lại cho đến khi biểu thức logic <ExpL> nhận giá trị sai (bằng 0) thì kết thúc
câu lệnh lặp.
Ví dụ 1.18:
>> s = 0.5;
>> while s<10
s = s+1;
end
>> s
s =
10.5000
1. 2.6. Câu lệnh break.
Cú pháp:
break
-14-
Giải thích. Câu lệnh BREAK không có tham số, dùng để chấm dứt tác dụng của
một câu lệnh có cấu trúc như: FOR, WHILE hoặc IF, SWITCH (nhảy về sau câu lệnh
END tương ứng). Nói chung, khi viết chương trình không nên dùng BREAK đối với các
câu lệnh IF hoặc câu lệnh SWITCH.
1.3. NHÓM LỆNH INPUT, OUTPUT.
1.3.1. File dữ liệu.

Trong MATLAB, ma trận có thể được lưu trữ dưới một trong hai dạng Mat-file và
ASCII file. Mat-file lưu trữ dữ liệu dạng nhị phân, thích hợp cho xử lí trong các chương
trình MATLAB. ASCII file lưu trữ dữ liệu dưới dạng văn bản, thích hợp với việc truyền
dữ liệu trong các chương trình viết bằng các ngôn ngữ khác nhau.
1.3.2. Mở và đóng một ASCII file.
1.3.2.1. Mở file.
Cú pháp:
FID = fopen (<File name>,<Permission>)
Giải thích. MATLAB mở file có tên <Filename>, gán file cho biến file có tên FID.
Kiểu mở file được xác định bởi <Permission>. <Permission> là một xâu có thể
nhận giá trị và ý nghĩa như sau:
'r' : Mở để đọc (reading);
'w' : Mở để ghi (writing), xóa bỏ nội dung của file cũ;
'a' : Mở hoặc tạo file để ghi, nối (append) dữ liệu vào đuôi file cũ;
'r+' : Mở file (không tạo file mới) để đọc và ghi;
'w+' : Mở hoặc tạo file để đọc và ghi, xóa bỏ nội dung của file;
'a+' : Mở hoặc tạo file để đọc và ghi, nối dữ liệu vào đuôi file cũ.
1.3.2.2. Đóng file.
Cú pháp:
fclose(FID)
Giải thích: Lệnh FCLOSE thực hiện đóng file đã mở với tên biến là FID.
Khi thực hiện các câu lệnh ghi thông tin lên file, MATLAB chỉ thực hiện cập nhật
thông tin với nội dung file đang có trong bộ nhớ. Sau câu lệnh FCLOSED, nội dung mới
của file mới thực sự được cập nhật trên đĩa. Nếu không có câu lệnh này, nội dung cập
nhật có thể bị mất.
Bảng 1.7: Một số lệnh trích xuất dữ liệu.
Stt Cú pháp Giải thích
1 disp(x) Hiện giá trị của biến x hoặc một xâu kí tự lên màn hình
-15-
2

<Biến> = input (‘Lời
thoại’)
In xâu ‘Lời thoại’ ra màn hình và nhập dữ liệu từ bàn
phím cho biến.
3 save <Tên-file> x,y
Lưu các ma trận x và y vào Mat-file, mặc định kiểu file
là *.mat trong thư mục chủ
4 load <Tên-file>
Nhập dữ liệu từ file, mặc định là kiểu file *.mat trong
thư mục chủ
5
fprintf ('Lời thoại %
format', x)
Đưa ra màn hình lời thoại và giá trị của x theo định
dạng của format
6
fprintf(FID, ' Lời thoại
% format', x)
Ghi xâu ‘Lời thoại’ và giá trị của x theo định dạng của
format vào text file được mở với tên biến file là FID
Ví dụ 1.19:
>> h = input (' Cho biet chieu cao: ');
Cho biet chieu cao: | %% Gõ 15.25 và Enter
>> disp(x)
15.2500
53
>> x=[ pi exp(1) 12.34567890];
>> dl = fopen('dulieu.dat', 'w');
>> fprintf(dl, ' So Pi =%12.8f m, So e =%f m , f(x) =%2.3e
m \n ',x) ;

>> fclose(dl);
Các bạn hãy chú ý về định dạng dữ liệu xuất của format trong câu lệnh FPRINTF.
Kết quả của dãy lệnh trên là tạo ra text file dulieu.dat có nội dung:
So Pi = 3.14159265 m, So e = 2.718282 m , f(x)= 1.235e+001 m
Ví dụ 1.20:
Lập bảng tính hàm sin và lưu vào Mat-file dl1.mat:
>> x = [ 0 : pi/60: 2*pi];
>> y = sin(x);
>> t = [x ; y];
>> save dl1 t;
Vẽ đồ thị hàm sin theo bảng số lấy trong Mat-file
dl1.mat :
>> load dl1;
>> a = t(1,;
>> b =t(2,;
>> plot(a,b); grid on
-16-
Hình 1.3: Đồ thị hàm y=sin(x).
1.4. HÀM TRONG MATLAB.
1.4.1. Phân loại hàm.
Có thể chia hàm trong MATLAB thành hai loại:
- Hàm chuẩn là các hàm nội trú, được lập sẵn của MATLAB.
- Hàm do người sử dụng tạo ra là các hàm do người sử dụng MATLAB viết dưới
dạng hàm M-file hay dạng hàm Inline.
Bảng 1.8: Một số hàm số học chuẩn thông dụng.
Stt Hàm số Ý nghĩa
1 round(x) Quy tròn x
2 fix(x) Làm tròn về 0
3 floor(x) Làm tròn nhỏ đi
4 ceil(x) Làm tròn lớn lên

5 rem(x,y) Phần dư của phép chia x cho y
Ví dụ 1.9:
>> rem(-15.3,2.6)
ans =
-2.3000
>> x =cos(2/3)-5
x =
-4.2141
>> fix(x)
ans =
-4
-17-
>> ceil(x)
ans = 55
-4
>> floor(x)
ans =
-5
>> round(x)
ans =
-4
1.4.2. File kịch bản (script file hay M-file).
Script file là các file chương trình do người sử dụng viết ra được lưu dưới dạng M-
file (*.m). M-file là loại text file nên bạn có thể sử dụng các hệ soạn thảo văn bản khác
nhau để soạn thảo file hoặc bạn có thể chọn chức năng mở file (New hoặc Open) trong
menu File. Khi gọi thực hiện chương trình, bạn chỉ cần gõ trên file mà không cần gõ cả
phần mở rộng của file.
1.4.3. Hàm M-file và cách tạo hàm M-file trong MATLAB.
Hàm trong MATLAB có thể được viết dưới dạng M-file hay hàm Inline. Hàm M-
file cần được lưu vào thư mục làm việc của MATLAB. Cấu trúc của hàm M-file như sau:

- Các dòng chú thích bắt đầu là dấu %.
- Một dòng bắt đầu là từ khóa function, sau đó lần lượt là: Danh sách tham số đầu ra
(vô hướng hoặc vector), dấu bằng, tên hàm và danh sách các tham số đầu vào để trong
ngoặc đơn. Dòng này được dùng để phân biệt giữa các file hàm với các script-file.
- Các dòng lệnh của hàm.
- Dòng cuối cùng có thể thêm từ khóa end hoặc không.
Những điều cần chú ý khi tạo hàm:
- Trong hàm phải có các lệnh gán giá trị cho tham số ra. Khi kết thúc thực hiện hàm,
nếu một trong các tham số ra chưa được gán giá trị lần nào thì MATLAB sẽ đưa ra thông
báo lỗi.
- Các biến sử dụng trong hàm đều là các biến địa phương. Tên biến trong hàm và
tên biến trong bộ nhớ hay trong chương trình gọi có thể trùng tên nhưng đó là hai biến
khác biệt.
- Trong hàm có các biến đặc biệt mặc định là nargin và nargout, chúng là các biến
cục bộ. Chúng tự động được gán giá trị bằng số các tham số vào và số các tham số ra
được sử dụng trong câu lệnh gọi hàm.
Bảng 1.9: Một số lệnh với các m-file
Stt Câu lệnh Ý nghĩa
1 echo on/off Hiện hoặc ẩn các câu lệnh của M-file khi chúng thực hiện
2 return Kết thúc thực hiện hàm một cách bất thường
-18-
3 type <Tên-file> Xem nội dung file văn bản, mặc định đuôi file là *.m
4
what Xem danh sách M-file và MAT-file trong thư mục hiện
hành
5 help <Tên-file> Hiện các câu chú thích trong M-file lên màn hình
Ví dụ 1.20:
Xây dựng m-file giải phương trình bậc 2 có tên Equa2
% Ham giai phuong trinh bac 2
function [x1, x2]=Equa2(a,b,c)

delta = b^2-4*a*c;
x1=(-b+sqrt(delta))/(2*a);
x2=(-b-sqrt(delta))/(2*a);
Sau đó gọi hàm trong cửa sổ lệnh của chương trình MATLAB
>> [ x y ] = Equa2(1, 2, 4)
x =
-1.0000 + 1.7321i
y =
-1.0000 - 1.7321i
>> Equa2(1, 2, 4) %% Gọi hàm với nargout = 0
ans =
-1.0000 + 1.7321i
Lưu ý chỉ vị trí lưu M-file để MATLAB có thể đọc được, nếu không tìm thấy file
chương trình sẽ báo lỗi.
1.4.4. Hàm Inline.
INLINE là lệnh tạo một hàm (hay đối tượng –Object ) Inline trong bộ nhớ. Khi
thoát khỏi MATLAB, các hàm dạng này sẽ bị xóa.
Cú pháp:
F= inline('Expr','x1', 'x2', ,)
F= inline('Expr', N)
Giải thích.
F = inline('Expr'): Định nghĩa một hàm inline F bằng một biểu thức nằm trong xâu
'Expr'. Các tham số vào là các tên biến tự động tìm được trong biểu thức. Nếu biểu thức
không có biến nào thì hàm sử dụng tham số vào giả là 'x'.
F = inline('Expr','x1', 'x2', ,): Định nghĩa một hàm inline F bằng một biểu thức nằm
trong xâu 'Expr'. Tên của các tham số vào của hàm lần lượt là 'x1', 'x2',
F = inline('Exp', N): Với N là một số nguyên, MATLAB sẽ tạo hàm inline F với
(N+1) biến bằng một biểu thức nằm trong xâu 'Exp'. Tên của các tham số vào của hàm
lần lượt là 'x', 'P1' , 'P2', , ’PN’.
Khi cần tính toán với một hàm số xác định từ một biểu thức đơn giản chúng ta nên

định nghĩa hàm dưới dạng đối tượng Inline.
Ví dụ 1.21:
>> F1 = inline('pi^2')
-19-
F1 =
Inline function:
F1(x) = pi^2
>> F2 = inline('sin(2*pi*f + theta)')
F2 =
Inline function:
F2(f,theta) = sin(2*pi*f + theta)
>> F3 = inline('sin(2*pi*f+theta)','theta','f')
F3 = 59
Inline function:
F3(theta,f) = sin(2*pi*f + theta)
>> F2(2,1)
ans =
0.8415
>> F3(2,1)
ans =
0.9093
>> F4 = inline('x^P1+P3',3)
F4 =
Inline function:
F4(x,P1,P2,P3) = x^P1+P3
1.5. MỘT SỐ LỆNH BỔ TRỢ.
1.5.1. Các lệnh tính toán thời gian của máy tính.
Khi nghiên cứu hiệu quả của một giải thuật, cái được người ta quan tâm đầu tiên là
với một bài toán cụ thể thì chương trình thực hiện giải thuật đó chạy hết bao nhiêu thời
gian. Trong MATLAB có một số hàm giúp người sử dụng kiểm tra thời gian thực hiện

toán của một chương trình.
Bảng 1.10: Danh sách các hàm tính toán thời gian máy tính.
Stt Câu lệnh Ý nghĩa
1 tic Khởi động đồng hồ tính thời gian
2 toc Dừng đồng hồ tính thời gian và cho biết thời gian tính toán
3
cputime Thời gian làm việc từ khi khởi động MATLAB, tính bằng đơn
vị giây
Ví dụ 1.22:
>> cputime
ans =
8.2873e+003
Tính thời gian chạy chương trình Calpi.m:
>> tic; calpi;toc
ans =
3.1416
Elapsed time is 0.000204 seconds.
Để tính thời gian thực hiện chương trình bạn cũng có thể làm như sau:
>> t= cputime; Calpi; t=cputime –t
ans =
-20-
3.1416
t =
0.0002
1.5.2. Các lệnh quản lý bộ nhớ.
Bảng 1.11: Danh sách các lệnh quản lý bộ nhớ.
Stt Câu lệnh Ý nghĩa
1 who Liệt kê các biến đang sử dụng
2 whos Liệt kê các biến đang sử dụng với chi tiết cụ thể
3 clear Xóa tất cả các biến trong bộ nhớ

4 clear x, y, z Xóa 1 hay nhiều biến cụ thể x, y, z
Ví dụ 1.23:
>> who
Your variables are:
A B C ans s 61
>> whos
Name Size Bytes Class
A 1x2 16 double array
B 3x3 72 double array
C 1x4 32 double array
ans 1x1 8 double array
s 1x7 14 char array
Grand total is 23 elements using 142 bytes
>> clear A B;
>> who
Your variables are :
C ans s
>> t=' Hello!' ; s=' Tito';
>> f=[t,s]
f =
Hello! Tito
>> A=t+s
??? Error using ==> plus
Matrix dimensions must agree.
>> t ='Viva';
>> s+t %% Được hiểu là cộng 2 ma
trận
ans =
170 210 234 208
1.5.3. Tạo menu đơn giản.

Để người sử dụng có thể linh hoạt trong việc xử lý các tình huống xảy ra trong khi
thực hiện chương trình, ta nên bổ sung các menu vào chương trình. Bạn có thể tìm hiểu
phương pháp tạo menu đồ họa cao cấp hơn trong MATLAB. Tuy nhiên, trong nội dung
cuốn sách về các phương pháp tính toán số chúng tôi chỉ giới thiệu một cách tạo những
menu đơn giản.
-21-
Hàm MENU
Cú pháp:
Choice = menu (Header, Item1, Item2, )
Choice = menu (Header, ItemList)
Giải thích. Hàm MENU dùng để tạo menu trên màn hình, trong đó:
- Header là một xâu dùng để tạo tiêu đề của menu;
- Item1, Item2,… là một danh sách liệt kê các xâu ghi tiêu đề các nút để người sử
dụng có thể lựa chọn bằng click chuột trái; MATLAB không hạn chế số lượng xâu.
- ItemList là một xâu hoặc một mảng xâu mà mỗi xâu là một tiêu đề của nút có thể
được lựa chọn;
- Kết quả trả về cho biến Choice là số thứ tự của nút được chọn. Nếu chọn nút đóng
cửa sổ trên menu thì kết quả là số 0. Sau đó Menu biến mất.
Ví dụ 1.24:
>> k = menu('Choose a Name', 'Smith', 'Henry', 'Peter', 'Mary')
Kết quả câu lệnh trên cũng tương tự như kết quả sử dụng 2 lệnh liên tiếp:
>> ItemList={ 'Smith', 'Henry', 'Peter', 'Mary' };
>> k = menu('Choose a Name', ItemList)
Khi đó, tại góc trên bên trái màn hình sẽ xuất hiện menu có dạng:
Nếu bạn click chuột trái vào nút “Peter” trên Menu, thì kết quả hiện trên cửa sổ
Command sẽ là:
k =
3
Nếu bạn click chuột trái vào nút trên góc trên bên phải của Menu, thì kết quả
hiện trên cửa sổ Command sẽ là:

k =
0
Trong cả hai trường hợp trên, khi thực hiện click chuột trái xong thì Menu đều biến
mất. Nếu muốn Menu chỉ có thể biến mất khi chọn nút kết thúc thì bạn nên đưa câu
lệnh MENU vào một vòng lặp while.
-22-
Ví dụ 1.25:
>> k=1;
>> while k~=0
k = menu('Choose a Name', 'Smith', 'Henry', 'Peter',
'Mary')

End
-23-
CHƯƠNG 2: TỔNG QUAN VỀ HÀM SỐ
VÀ PHƯƠNG TRÌNH SIÊU VIỆT
2.1. TỔNG QUAN VỀ HÀM SỐ.
2.1.1. Định nghĩa hàm số.
Cho X, Y là hai tập hợp số, ví dụ tập số thực R, hàm số f xác định trên X, nhận giá
trị trong Y là một quy tắc cho tương ứng mỗi số x thuộc X với một số y duy nhất thuộc Y.
Ký hiệu
Với:
- Tập X gọi là miền xác định.
- Tập Y gọi là miền giá trị.
- x gọi là biến độc lập hay còn gọi là đối số, biến số.
- y gọi là biến phụ thuộc hay còn được gọi là hàm số.
- f(x) được gọi là giá trị của hàm f tại x.
Hình 2.1: Mỗi số thuộc tập X tương ứng với một số duy nhất thuộc tập Y
qua hàm f.
Định nghĩa: Nếu một đại lượng y phụ thuộc vào một đại lượng thay đổi x sao cho

một giá trị của x ta luôn xác định được chỉ một giá trị tương ứng của y thì y được gọi là
hàm số của x, và x gọi là biến số.
2.1.2. Các dạng thể hiện của hàm số.
Hàm số được thể hiện dưới 2 dạng: dạng bảng và dạng công thức.
Dạng bảng:
Bảng 2.1: Hàm số y = 2x+1 với 1 ≤ x ≤ 8 thể hiện dưới dạng bảng.
-24-
x 1 2 3 4 5 6 7 8
y 3 5 7 9 11 13 15 17
Dạng công thức (dạng tường minh):
y = f(x) với x là biến số.
Ví dụ 2.2:
Một số hàm số:
y = 2 Hàm hằng
y = 2x + 1 Hàm số bậc nhất
y = 5 + 3x - 4 Hàm số bậc 2
y = Hàm phân thức
y = Hàm chứa phép toán căn
y = + 1 Hàm chứa phép toán lượng giác
2.1.3. Tập giá trị và tập xác định của hàm số.
Tập giá trị G là tập hợp các giá trị của hàm số y.
Tập xác định D là tập hợp các giá trị của biến số x.
Ví dụ 2.3:
Hàm y = 2x + 1 trong với x ϵ , có:
D =
G =
Hàm y = có:
D: x ≥ 0
G: y ≥ 0
2.1.4. Đồ thị của hàm số.

Đồ thị của hàm số y = f(x) là tập hợp các cặp giá trị tương ứng (x ; f(x)) trên mặt
phẳng tọa độ.
Hình 2.1: Mặt phẳng tọa độ.
-25-

×