Professional Documents
Culture Documents
Matlab PDF
Matlab PDF
1
2. Biến
* Tên biến: Tên biến là một dãy kí tự được bắt đầu bằng chữ
cái, có độ dài tối đa là 31 kí tự, bao gồm các chữ cái, chữ số và
dấu gạch dưới ( _ ), có phân biệt chữ hoa và chữ thường.
Ví dụ : x ; a12 ; b_a
Có thể gán giá trị cho tên biến bằng cách viết :
Tên_biến = biểu thức
Ví dụ :
>> x=20
>>a12=4
>>A12= ‘ABCD’
* Matlab có các biến đặc biệt được cho trong bảng sau:
Giá trị
Các biến đặc
biệt
Ans Tên biến mặc định dùng để trả về kết quả
Pi π = 3.1415
Eps Số nhỏ nhất, nếu cộng thêm 1 sẽ được số nhỏ nhất lớn hơn 1
Flops Số của phép toán số thực
Inf Để chỉ số vô cùng như kết quả của 1/0
NAN hoặc nan Dùng để chỉ số không xác định như kết qẩu của 0/0
i hoặc j i=j= −1
2
Các biến đặc biệt ở trên có sẵn giá trị, nếu ta thay đổi giá trị của nó thì giá trị
ban đầu sẽ mất cho đến khi ta khởi động lại Matlab thì nó mới trở lại giá trị
ban đầu. Không nên thay đổi giá trị của các biến đặc biệt.
Ví dụ:
>> i
ans =
0 + 1.0000i
>> j
ans =
0 + 1.0000i
>> i*i
ans =
-1
>> pi
ans =
3.1416
>> eps
ans =
2.2204e-016
>> realmin
ans =
2.2251e-308
>> realmax
ans =
1.7977e+308
3. Xoá các biến trong không gian làm việc
Để xoá các biến ta dùng lệnh clear , có các cách sau:
- Xoá một biến clear tên_biến
>> clear x
- Xoá nhiều biến clear tên_biếm1 tên_biến2
>> clear a b c
- Xoá một nhóm biến tên trùng nhau một số kí tự: clear a* % xoá các
biến có tên bắt đầu là a.
3
- Xoá tất cả các biến trong không gian làm việc: clear
Dùng lệnh trên tất cả các biến bị xoá không khôi phục được, do
vậy ta phải thận trọng khi dùng nó.
4. Câu gải thích và sự chấm câu
* Câu giải thích: Câu giải thích được viết sau dấu %
>> a=100 % a nhận giá trị 100
* Có thể viết nhiều lệnh trên một dòng, chúng được ngăn cách
bởi dấu phẩy hặc dấu chấm phẩy. Dấu phẩy là yêu cầu hiển
thị kết qủa trên màn hình, còn dấu chấm phẩy là không hiển thị
kết quả trên màn hình.Ví dụ:
>> A=2,B='abcde',x=456.32;y='mnopq'
A=
2
B=
abcde
y=
mnopq
* Dùng dấu ba chấm ( . . . ) viết sau phép toán để chỉ câu lệnh được
tiếp tục ở hàng dưới. Không dùng dấu ba chấm cho các trường hợp khác, hay
cho câu giải thích.
>> x=10,y=20
x=
10
y=
20
>> z=x+...
y
z=
30
5. Các phép toán số học
Các phép tính số học của Matlab được cho trong bảng sau :
Kí hiệu Ví dụ
Phép tính
Phép cộng + 5+4
Phép trừ - 8-2
Phép nhân * 3*5
Phép chia / ( chia trái) ,\ (chia phải) 4/2=2 hoặc 2\4=2
Phép luỹ thừa ^ 2^3
4
Các phép tính trên có mức độ ưu tiên như sau :
1. Phép luỹ thừa.
2. Phép nhân, phép chia
3. Phép công, phép trừ.
>> x=2+10/5+4^2-6*2
x=
8
6. Số phức
Một trong các ưu thế của Matlab là làm việc với số phức. Số phức của Matlab
được định nghĩa theo nhiều cách.
* Cách 1 : Chèn kí tự i hoặc j vào phần ảo.
>> c1=1+3i
c1 =
1.0000 + 3.0000i
>> c1=2-4j
c1 =
2.0000 - 4.0000i
* Cách 2 : Dùng căn bậc hai của số âm.
>> c2=3+sqrt(-1)
c2 =
3.0000 + 1.0000i
>> c2=4-sqrt(-4)
c2 =
4.0000 - 2.0000i
* Cách 3 : Dùng biểu thức *i hoặc *j
>> c3=2-sin(1)*j
c3 =
2.0000 - 0.8415i
>> c3=3+cos(1)*i
c3 =
3.0000 + 0.5403i
>> c3=4+2*i
c3 =
4.0000 + 2.0000i
>> c3=4+(6/3)*i
c3 =
4.0000 + 2.0000i
5
* Các phép toán đối với số phức đều thao tác tương tự như số thực.
>> a=2+3i
a=
2.0000 + 3.0000i
>> b=1+4i
b=
1.0000 + 4.0000i
>> a+b
ans =
3.0000 + 7.0000i
>> a-b
ans =
1.0000 - 1.0000i
>> a/b
ans =
0.8235 - 0.2941i
>> a*b
ans =
-10.0000 +11.0000i
6
>> goc=angle(c) % góc θ tính bằng radian
goc =
1.1071 % radian
>> goc_do=goc*180/pi % chuyển góc θ sang độ
goc_do =
63.4349 % góc tính bằng độ
7. Các hàm toán học thông thường
7
>> x=abs(-2)/2
x=
1
>> x=sqrt(2)/2
x=
0.7071
>> y= sin(x)
y=
0.7854
>>4*atan(1)
ans=
3.1416
y=rem(10,3) % phần dư
y=
1
>>gcd(18,81) % Ước số chung lơn nhất
ans=
9
8
Bài tập chương 1
1. Tính tổng n số tự nhiên đầu tiên
S=1+2+3+ ... + 179
2. Giải phương trình bậc 2 : 17x2 + 125x - 69 = 0
3. Giải hệ phương trình sau:
4. Tính hàm y theo công thức sau khi x=3:
y= 3x3- 4x2 +7x +12 + 2sin 27o -
5. Tính hàm y theo công thức sau khi x=2
y= asin(x) +
Chương 2: Cửa sổ lệnh, quản lý tệp, các cấu trúc điều khiển, hàm
1. Cửa số lệnh trong Matlab
1.1 Quản lý không gian làm việc của Matlab
Các biến được tạo trong cửa sổ lệnh, được lưu trong không gian làm việc
của Matlab. Ta có thể xem lại hoặc xóa các biến đó.
* Xem tên biến dùng lệnh who
> who
Your variables are:
a ans b c y
* Để xem chi tiết hơn về các biến ta dùng lệnh whos
>> whos
Name Size Bytes Class
a 1x1 8 double array
ans 0x0 0 char array
b 1x1 8 double array
c 1x1 8 double array
y 1x1 8 double array
Grand total is 4 elements using 32 bytes
9
* Để xóa các biến ta dùng lệnh clear
Lệnh này ta đã xét ở mục 3 chương 1. Các tuỳ chọn khác nhau của lệnh clear
ta có thể xem bằng lệnh help clear.
>> help clear
CLEAR Clear variables and functions from memory.
CLEAR removes all variables from the workspace.
CLEAR VARIABLES does the same thing.
CLEAR GLOBAL removes all global variables.
CLEAR FUNCTIONS removes all compiled M- and MEX-functions.
CLEAR ALL removes all variables, globals, functions and MEX links.
CLEAR ALL at the command prompt also removes the Java packages
import list.
CLEAR IMPORT removes the Java packages import list at the command
CLEAR VAR1 VAR2 ... clears the variables specified. The wildcard
character '*' can be used to clear variables that match a pattern.
For instance, CLEAR X* clears all the variables in the current
workspace that start with X.
CLEAR FUN clears the function specified. If FUN has been locked
10
by MLOCK it will remain in memory. Use a partial path (see
PARTIALPATH) to distinguish between different overloaded versions of
FUN. For instance, 'clear inline/display' clears only the INLINE
method for DISPLAY, leaving any other implementations in memory.
CLEAR ALL, CLEAR FUN, or CLEAR FUNCTIONS also have the side effect
of
removing debugging breakpoints and reinitializing persistent variables
since the breakpoints for a function and persistent variables are
cleared whenever the m-file changes or is cleared.
11
1.3. Khuôn dạng hiển thị số
Matlab hiển thị kết quả dạng số mặc định: số nguyên và các dạng số khác trừ số
thực hiển thị theo đúng dạng đưa vào. Dạng số thực hiển thị với mặc định là 4 chữ
số sau dấu phẩy.
Để tạo khuôn dạng riêng ta chọn các mục trong Menu:
File / Preferences khi đó sẽ có hộp thoại Preferences như sau:
Chọn mục Command Windows, trong mục Numeric format dùng để định
dạng số có các định dạng sau:
short hiện số có 5 chữ số 20.345
long hiện số có 16 chữ số 20.123456789123456
Short e hiện số có 5 chữ số với số mũ e 2.0345e+01
long e hiện số có 16 chữ số với số mũ e
2.0123456789123456e+1
short g chính xác hơn short hoặc short e
long g chính xác hơn long hoặc long e
hex số hệ 16 12ABF
bank hai số thập phân 12.45
+ hiện dương, âm hoặc bằng không +
rational hiện ra dạng phân số nếu số thực co phần thập phân ,
ví du a=12.25 thì hiển thị kết quả trên màn hình là 48/4
12
2. Script file hay M-file
Trong Matlab ta gõ lệnh vào từ cửa sổ lệnh, các lệnh sẽ được thực hiện ngay, nếu
muôn thực hiện lại các lệnh ta lại phải gõ lại, như vậy không tiện lợi.
Đẻ thuận lợi cho việc gõ các lệnh và lưu trữ lại các lệnh Mtlab cho phép mở file dạng
văn bản để ghi các lệnh, file này gọi là Script file hay M_file, phần mở rộng ( đuôi file)
là m.
* Các lệnh về M-file:
- Mở tệp m-file mới: chọn các mục trong menu: File / new / M-file
- Mở tệp m-file cũ: chọn các mục trong menu: File / Open sau đó chọn tên tệp m-file
cần mở.
- Ghi tệp m-file : chọn các mục trong menu: File / save sau đó gõ vào tên tệp m-file.
- Để chạy các lệnh của M-file , trên cửa số của script file ta chọn các mục
Debug / Run , nhập dữ liệu từ cửa sổ lệnh (Command windows )
- Matlab cung cấp một số hàm sử dụng trong m-file:
Display(tên_biến) hiển thị kết quả không có tên biến
Echo điều khiển cửa sổ lặp lại các lệnh của script file
Input sử dụng dấu nhắc để đưa dữ liệu vào
Keyboard trao điều khiển tạm thời cho bàn phím
Pause dừng lại cho đến khi người dùng nhấn một phím bất kỳ
Pause(n) dừng lại n giây
Waitforbuttonpress dừng lại cho đến khi người dùng nhấn một phím bất kỳ.
Ví dụ 1: tạo một m-file có tên là thu1.m chứa các lệnh tính diện tich tam giác
khi biết đường cao và cạnh đáy. Chọn các mục File / new / M-file, tại cửa
sổ Script file ta nhập vào các lệnh tính như sau
13
Sau đó chọn Debug / Run để chạy hàm, nhập dữ liệu cho a, b, c từ cửa sổ
lệnh.
* Một số lệnh quản lý tệp :
- cd hiển thị thư mục hiện thời
- cd tên_thư_mục thay đổi thư mục đưa ra
- dir danh sách các file trong thư mục hiện thời
- edit tên_tệp_m_file mở tệp để sọan thảo
- delete tên_tệp_m_file xoá tệp
- path hiển thị hoặc sửa đường dẫn
- type tên_tệp_m_file hiển thị nội dung M-file trong cửa sổ lệnh
- what hiện danh sách các m-file và MAT-file
14
Ví dụ: Tìm nghiệm thực của phương trình bậc 2
function giaiptbac2()
a=input('a=');
b=input('b=');
c=input('c=');
d=b*b-4*a*c
if d<0
k='phuong trinh vo nghiem'
elseif d==0
x1=-b/(2*a)
x2=x1
else
x1=(-b+sqrt(d))/(2*a)
x2=(-b-sqrt(d))/(2*a)
end
15
Ví dụ: Tính tiền điện, giả sử tính theo cách 50 số đầu 500 đồng 1 số, 50 số tiếp theo 700
đồng 1 số, 50 số tiếp theo 1000 đồng 1 số, 50 số tiếp theo 1500 đồng 1 số, các sô
tiếp theo 2000 đồng 1 số
function tinhtiendien()
csd=input('chi so dau =');
csc=input('chi so cuoi =');
sd=csc-csd
if sd<=50
tien=sd*500
elseif sd<=100
tien=50*500+(sd-50)*700
elseif sd<=150
tien=50*500+50*700+(sd-100)*1000
elseif sd<=200
tien=50*500+50*700+50*1000+(sd-150)*1500
else
tien=50*500+50*700+50*1000+50*1500+(sd-200)*2000
end
16
Ví dụ: Hiện ra thời khoá biểu khi ta nhập vào thứ (là số)
function thoikhoabieu()
t=input('nhap vao thu =');
switch t
case 2
'Tin, Toan, Anh'
case 3
' Sinh, Su, Dia'
case 4
' Hoa, Ly, Anh'
case 5
' Toan, Tin, Ly'
case 6
' Van, Hoa, Dia'
case 7
' Toan, Su, Tin'
otherwise
' Nghi o nha'
end
17
3.4. Vòng lặp While
Vòng lặp while thực hiện lặp lại khối lệnh với số lần lặp không biết trước. Cú
pháp của vòng lặp này như sau :
While biểu thức điều kiện
khối lệnh
end
Khi biểu thức điều kiện còn đúng thì khối lệnh được thực hiện, còn biểu
thức điều kiện sai kêt thúc vòng lặp.
Ví dụ : Tính q= 1+1/2+ 1/3 + ... + 1/n
n= input(‘nhap vao n : ‘)
q=0; i=1;
while i<=n
q=q+1/i;
i=i+1;
end
q
4. Hàm m-File
* Matlab đã xây dựng nhiều hàm, người sử dụng chỉ việc gọi ra để sử dụng, ở chương 1 ta đã
xét một số hàm toán học.
* Matlab cung cấp cấu trúc để người sử dụng có thể xây dựng các hàm của mình dưới dạng M-
file. Cấu trúc một hàm M-file như sau:
Function Tên_biến= Tên_hàm(các tham số vào)
% Các câu chú thich
khối lệnh
Tên_biến = biểu thức
[return]
Các quy định và các tính chất với hàm M-file:
- Tên_hàm và tên M-file phải là một
- Trong thân hàm có lệnh gán giá trị của biểu thức cho tên biến.
- Trong hàm có thể chứa các hàm khác nhưng các hàm con trong hàm đó chỉ được gọi chỉ
được gọi trong chính nó.
- Mỗi hàm có một không gian làm việc riêng tách biệt so với môi trường matlab. Các biến được
tạo ra trong hàm chỉ nằm trong không gian làm việc của hàm đó và được giải phóng khi hàm
kết thúc.
- Các dòng chú thích sẽ được hiện ra khi dùng lệnh Help.
- Các tham số vào và ra khi một hàm được gọi chỉ có tác dụng bên
trong hàm đó. Biến Nargin chứa các tham số đưa vào, nargout chứa các giá trị đưa ra.
18
- Nếu các hàm muốn dùng chung các biến thì các biến đó phải khai báo là
biến toàn cục : Global tên_biến
- Trong hàm có thể gặp dòng lệnh Return, cho phép kết thúc một hàm mà
không cần phải thi hành hết các lệnh của hàm đó.
- Hàm error của Matlab cho hiển thị chuỗi kí tự trên cửa sổ lệnh và dừng
thực hiện hàm. Hàm này thường được dùng để cảnh báo việc sử dụng hàm
không đúng. Ví dụ hàm phải đưa vào 3 tham số, nếu đậ ít hơn sẽ có lỗi :
if nargin <3
error('Phai dua vao du 3 tham so')
end
* Lời gọi hàm : Trong các hàm khác hoặc tại cửa sổ lệnh sử dụng hàm phải
có lời gọi hàm. Lời gọi hàm viết như sau :
Tên_biến=Tên_hàm(các tham số thực sự)
Các tham số thực sự chứa giá trị và tương ứng với các tham số trong hàm.
Ví dụ : Xây dựng hàm tính diện tích của tam giác biết 3 cạnh a,b,c.
Ví dụ : Xây dựng hàm tính diện tích của tam giác biết 3 cạnh a,b,c.
function y=dttg(a,b,c);
%Ham tinh dien tich tam giac biet 3 canh a,b,c
%Nhap vao gia tri 3 canh tam giac ( dieu kien cac canh duong va
% 1 canh phai nho hon tong 2 canh)
if nargin <3
error('Phai dua vao du 3 tham so')
end
p=(a+b+c)/2;
y=sqrt(p*(p-a)*(p-b)*(p-c));
Lời gọi hàm như sau:
a=2;
b=2;
c=3;
t=dttg(a,b,c)
q=dttg(a,b) % loi goi sai
19
5. Các phép tính logic, quan hệ, xâu kí tự, thời gian
5.1. Các toán tử quan hệ
Toán tử quan hệ ý nghĩa
Kết quả của toán tử quan hệ cho giá trị 1 (đúng : true) hoặc giá trị
0 (sai :false).
Ví dụ :
>> a=4
>> b=6
>> a==b
ans = 0
>> a~=b
ans = 1
>> a<b
ans =
1
5.2. Toán tử Logic
Toán tử logic Ý nghĩa
& AND
| OR
~ NOT
20
>> (a<0) |(b>0)
ans =
0
>> ~(a>b)
ans =
0
5.3. Xâu kí tự
Xâu kí tự trong matlab là mảng các kí tự trong bảng mã ASCII.
Xâu kí tự được viết trong dấu nháy đơn ‘...’
Ví dụ : t=’ABCD’ ; q= ‘Ha noi’
* Hàm double cho mã ASCII của xâu :
>> double(t)
ans =
65 66 67 68
>> double(q)
ans =
72 97 32 110 111 105
* Hàm char chuyển lại thành xâu :
>> char(q)
ans =
Ha noi
5.4. Thời gian
* Hàm trả về ngày và giờ hiện tại : clock
* Hàm trả về ngày hiện tại : date
* Hàm trả về thứ trong tuần: weekday
* Hàm trả về ngày cuối tháng: eomday(năm, tháng)
* Hàm trả về lịch tháng: calendar(năm, tháng)
21
>> date
ans =
18-Oct-2006
>> eomday(2006,9)
ans =
30
>> calendar(2006,11)
Nov 2006
S M Tu W Th F S
0 0 0 1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 0 0
0 0 0 0 0 0 0
22
1.2. Địa chỉ của mảng
Ở ví dụ 1 mảng x có 6 phần tử, mảng x có 1 hàng 6 cột hay còn gọi là vector hàng,
mảng x có độ dài là 6.
* Để truy nhập vào phần tử thứ i của mang ta viết như sau: Tên_biến_mảng(i)
Ví dụ: x(1); x(5); y(2); y(3)
* Để truy nhập vào từ phần tử thứ i đến phần tử thứ j ta viết:
Tên_biến_mảng(i:j)
Ví dụ : x(2:4); y(1:2)
* Để truy nhập vào từ phần tử thứ i đến phần tử cuối ta viết:
Tên_biến_mảng(i:end)
Ví dụ : x(3:end); y(2:end)
* Để truy nhập vào các phần tử trong khoảng từ phần tử thứ i đến phần tử j, vị trí
của phần tử sau bằng vị trí của phần tử trước cộng với số k ta viết:
Tên_biến_mảng(i:k:j) ví dụ:
>> x(1:2:6)
ans =
1 5 9
>> x(6:-1:1)
ans =
11 9 7 5 3 1
x=m :n Tạo vector hàng x, phần tử đầu có giá trị là m, phần tử sau bằng
phần tử trước công với 1, kết thúc tại phần tử có giá trị bằng hoặc nhỏ hơn
x=m :k :n Tạo vector hàng x, phần tử đầu có giá trị là m, phần tử sau bằng
phần tử trước công với k, kết thúc tại phần tử có giá trị bằng hoặc nhỏ hơn
x=linspace(m :n :k) Tạo vector hàng x, phần tử đầu có giá trị là m, kết thúc là
n, có k phần tử
x=logspace(m :n :k) Tạo vector hàng không gian logarithm x, phần tử đầu có
giá trị là 10m, kết thúc là 10n, có k phần tử Ví dụ :
>>a=2:10
a=
2 3 4 5 6 7 8 9 10
>> b=1:3:15
b=
1 4 7 10 13
23
>> c=linspace(1,5,8)
c=
1.0000 1.5714 2.1429 2.7143 3.2857 3.8571 4.4286 5.0000
>> d=logspace(1,2,5)
d=
10.0000 17.7828 31.6228 56.2341 100.0000
* Đối với các mảng mà các phần tử của nó không tuân theo một quy luật nhất định, ta
có thể tạo mảng bằng cách ghép các ghép các mảng thành phần lại. Ví dụ :
>> x1=1:6
x1 =
1 2 3 4 5 6
>> x2=3:2:11
x2 =
3 5 7 9 11
>> x3=[x1 x2]
x3 =
1 2 3 4 5 6 3 5 7 9 11
>> x4=[x1(1:2:6),2, 7, x3(5:9)]
x4 =
1 3 5 2 7 5 6 3 5 7
24
>> b(2,3)
ans =
7
>> b(2) % phần tử thứ 2
ans =
5
>> b(4) % phần tử thứ 4
ans =
2
>>b(end) % phần tử cuối cùng
ans =
12
>> b(:,2) % cột 2
ans =
2
6
10
>> b(3,:) % dòng 3
ans =
9 10 11 12
* Loại bỏ dòng hoặc cột mảng bằng cách gán cho giá trị rỗng [].
Ví dụ:
>> c=[1:2:7;8:2:14;20:-1:17]
c=
1 3 5 7
8 10 12 14
20 19 18 17
>> c(:,4)=[] % xoá cột 4
c=
1 3 5
8 10 12
20 19 18
>> c(1,:)=[] % xoá dòng 1
c=
8 10 12
20 19 18
* Tạo vector cột d từ ma trận c : d=c( :)
>> d=c(:)
25
>> d=c(:)
d=
8
20
10
19
12
18
* Ma trận chuyển vị dùng kí hiệu nháy đơn ‘
Ví dụ :
>> c1=c'
c1 =
8 20
10 19
12 18
* Ma trận có các phần tử là 1 : ones(r,c) r số hàng, c số cột
Ví dụ :
>> ones(3,4)
ans =
1 1 1 1
1 1 1 1
1 1 1 1
26
Ví dụ:
>> a=[1:3;4:6;7:9]
a=
1 2 3
4 5 6
7 8 9
>> b=[3:-1:1;6:-1:4;9:-1:7]
b=
3 2 1
6 5 4
9 8 7
>> b+2
ans =
5 4 3
8 7 6
11 10 9
>> b*2
ans =
6 4 2
12 10 8
18 16 14
>> a+b
ans =
4 4 4
10 10 10
16 16 16
>> a.*b
ans =
3 4 3
24 25 24
63 64 63
>> a.\b
ans =
3.0000 1.0000 0.3333
1.5000 1.0000 0.6667
1.2857 1.0000 0.7778
>> a./b
ans =
0.3333 1.0000 3.0000
0.6667 1.0000 1.5000
0.7778 1.0000 1.2857
27
>> a.^2
ans =
1 4 9
16 25 36
49 64 81
>> 2.^a
ans =
2 4 8
16 32 64
128 256 512
>> a.^b
ans =
1 4 3
4096 3125 1296
40353607 16777216 4782969
>> a' % ma trận chuyển vị của a
ans =
1 4 7
2 5 8
3 6 9
Kí hiệu Ý nghĩa
det(A) Tính định thức ma trận A
inv(A) Ma trận nghich đảo
logm(A) Ma trận logarithm
orth(A) Tính trực giao
Poly(A) Đa thức
rank(A Hạng ma trận
Trace(A) Tổng các phần tử chéo
Ví dụ :
>> b=[1 9 4;4 0 6;3 4 1]
b=
1 9 4
4 0 6
3 4 1
>> det(b)
ans =
166
28
>> inv(b)
ans =
-0.1446 0.0422 0.3253
0.0843 -0.0663 0.0602
0.0964 0.1386 -0.2169
>> trace(b)
ans =
2
* Tìm kiếm trong mảng
Dùng hàm: Find(điều kiện tìm)
ví dụ:
>>m=[1 2 3 4;5 6 7 0]
m=
1 2 3 4
5 6 7 0
>>[i,j]=find(m<5) % tìm vị trí các phần tử của m<5
i=
1
1
1
1
2
j=
1
2
3
4
4
* Hàm rank: trả về hạng của ma trận. Ví dụ:
>> a=[2 4 6;3 5 7; 9 8 7]
a=
2 4 6
3 5 7
9 8 7
>> rank(a)
ans =
2
29
6. Giải hệ phương trình
Cho phương trình Ax = b
a.Trường hợp số biến bằng số phương trình
Có 2 phương pháp:
- Phương pháp 1 dùng ma trận nghịch đảo: x=inv(A)*b
- Phương pháp 2 dùng toán tử chia ma trận: x=A.\b
Ví dụ:
>> A=[1 2 3;4 5 6;7 8 0]
A=
1 2 3
4 5 6
7 8 0
>> b=[366;804;315]
b=
366
804
315
>> det(A)
ans =
27
30
b. Trường hợp số phương trình và số biến khác nhau
Trong nghiên cứu số học tuyến tính, khi số phương trình và số biến khác nhau, thì
không thể có một phương pháp duy nhất để giải.
Trong MATLAB khi gặp những hệ phương trình có số phương trình lớn hơn số biến
: Dùng toán tử chia trái hoặc chia phải, tự động giảm thấp nhất những phần tử thừa
AX-b. Cách này gọi là phương pháp vuông nhỏ nhất.
Ví dụ:
A=[1 2 3;4 5 6;7 8 0;2 5 8] % Bon phuong trinh ba bien
A=
1 2 3
4 5 6
7 8 0
2 5 8
>> b=[366;804;351;514]
b=
366
804
351
514
31
- Phương pháp với số phần tử 0 cực đại: x=A\b
>>A
1 2 3
4 5 6
7 8 0
2 5 8
>> A=A' % Tao 3 phuong trinh 4 bien
A=
1 4 7 2
2 5 8 5
3 6 0 8
>> b=[366;804;351]
b=
366
804
351
32
- Tính sai lệch theo 2 phương pháp
>> Res1=A*x-b
Res1 =
1.0e-012 *
-0.3411
0.1137
0
>> Res2=A*xn-b
Res2 =
1.0e-012 *
-0.5684
-0.7958
-0.3411
33
Chương 4: Đồ hoạ trong hệ toạ độ phẳng
1. Lênh Plot
Lệnh này dùng vẽ đồ thị của một mảng dữ liệu trên hệ trục
thích hợp. Trong đó x là mảng dữ liệu cho trục x, y là mảng
dữ liệu cho trục y, nối các điểm (x,y) bằng đường thẳng.
Cú pháp: Plot(x,y)
Ví dụ 1:
>> x=linspace(0,2*pi,30) % mảng góc x bằng radian
>> y=sin(x)
>> plot(x,y) % vẽ đồ thị hàm sin(x)
Sẽ có đồ thị sau :
34
Ví dụ 3 : Vẽ đồ thị hàm y=2x2 - 4x -10 trong đoạn x : [-5,5]
>> x=[-5:5]
x=
-5 -4 -3 -2 -1 0 1 2 3 4 5
>> y=2*x.^2-4*x-10
y=
60 38 20 6 -4 -10 -12 -10 -4 6 20
>> plot(x,y)
Ta nhận được đồ thị sau :
35
Biểu Màu Biểu Dấu Biểu Dấu Biểu Kiểu nét vẽ
tượng tượng tượng tượng
màu dấu dấu nét vẽ
36
4. Trục, nhãn, lời chú giải, lưới, hộp chứa trục
* Trục: Việc phân chia thang bậc của trục thường được MatLab tự động
làm, tuy nhiên người sử dụng cũng có thể chia lại bằng lệnh
- axis ([x_min, x_max, y_min, y_max]): Chia trục 2D (2 chiều)
- axis ([x_min, x_max, y_min, y_max, z_min, z_max]):Chia trục 3D
- axis (‘auto’): Trao quyền chia trục lại cho MatLab
* Nhãn:
- xlabel(string): Điền nhãn trục x
- ylabel(string): Điền nhãn trục y
- zlabel(string):Điền nhãn trục z
- title(string): Điền tiêu đề của đồ thị
- text (x_value, y_value, string): Điền đoạn văng bản vào đồ thị tại toạ độ
(x_value, y_value)
- gtext(string) thêm xâu kí tự vào vị trí kích chuột
* Lời chú giải:
- Legend (string_1, string_2, …, [position]) Điền lời ghi chú
* Lưới: grid on hiện lưới, grid off không hiện lưới (mặc nhận)
* Hộp chứa đồ thị: box off tắt đi, box on khôi phục lại (mặc nhận)
Ví dụ 1:
>> x=[-5:5]
x=
-5 -4 -3 -2 -1 0 1 2 3 4 5
>> y=2*x.^2+1
y=
51 33 19 9 3 1 3 9 19 33 51
>> xlabel(' Bien x')
>> ylabel(' Ham y')
>> title(' Do thi ham y=2*x^2+1')
>> plot(x,y,'r*-')
37
* Chú ý: Nếu lệnh Plot được gọi mà chỉ có một đối số (vd: Plot(y))
thì hàm Plot sẽ đưa ra kết quả khác nhau phụ thuộc vào dữ liệu
chứa trong y:
+ Nếu y là số phức thì plot(y) tương đương với plot(real(y))
và plot(imag(y)), trong tất cả các trường hợp khác thì phần ảo của
y thường được bỏ qua.
+ Nếu y là số thực thì plot(y) tương ứng với plot(1:
length(y), y)
Ví dụ 2:
>> x=[-5:5]
x=
-5 -4 -3 -2 -1 0 1 2 3 4 5
>> y=5*x.^3+1
y=
-624 -319 -134 -39 -4 1 6 41 136 321 626
>> plot(x,y)
>> box off
>> z=5*x.^2+1
z=
126 81 46 21 6 1 6 21 46 81 126
>> plot(x,y,'r.-',x,z,'b+-')
>> gtext('y=5*x^2+1')
>> gtext('z=5*x^3+1')
>> title(' Do thi 2 ham y=5*x^2+1, z=5*x.^2+1')
>> xlabel(' bien x')
>> ylabel(' Ham y')
38
5. Hệ trục toạ độ
Matlab cung cấp công cụ kiểm soát hình dáng và
thang chia của hai trục tọa độ bằng lệnh axis. Các
thông tin đầy đủ về lệnh này có thể xem bằng lệnh
help axis . Các trường hợp cơ bản của lệnh này
được trình bày theo bảng dưới đây:
39
Lệnh Mô tả
axis([xmin xmax ymin ymax]) Thiết lập các giá trị min, max của 2 trục theo giá trị trong vector
hàng
v=axis v là vector có chứa thang chia cho đồ thị theo dạng [xmin xmax ymin
ymax]
axis auto Thang chia mặc định
axis manual Giới hạn thang chia như thang chia hiện tại
axis xy Sử dụng hệ toạ độ decac (mặc định), gốc ở góc trái thấp
axis square Thiết lập đồ thị hiện tại là hình vuông, mặc định hình chữ nhật.
axis equal Thiết lập thang giống nhau cho cả hai hệ trục
axis tightequare Tương tự như axis equal nhưng hộp đồ thị vừa đủ đối với dữ liệu
40
* Vẽ hai hàm trên cùng một hệ trục, thang chia khác nhau
plotyy(x,y,x,z)
>> x=[-1:0.2:6];
>> y=sin(x);
>> z=tan(x);
>> plotyy(x,y,x,z)
>> gtext('sin(x)')
>> gtext('tan(x)')
41
6. Một số dạng đồ thị khác và các lệnh khác
* area(x,y) dạng diện tích
>> x=[-1:0.5:6];
>> y=cos(x);
>> area(x,y)
* pie(a,b) dạng bánh tròn, a là vector gía trị, b là vector logic tuỳ
chọn.
>> pie(x,x==max(x))
>> box off
>> pie(x,x==max(x))
42
* bar(x,y)
* bar3(x,y)
* barh(x,y)
* stairs(x,y)
>> x=-2.9:0.2:2.9;
>> y=exp(-x.*x);
>> subplot(2,2,1), bar(x,y)
>> subplot(2,2,2), bar3(x,y)
>> subplot(2,2,3), barh(x,y)
>> subplot(2,2,4), stairs(x,y)
* rose(V) vẽ một biểu đồ toạ độc cực cho các góc trong
vector v, tương tự ta cũng có các lệnh rose (v, n) và rose
(v, x) trong đó x là một vector.
VD: >>v=randn(100, 1)*pi;
>>rose(v)
>>title(‘Đồ thị toạ độ cực của các góc với giá trị ngẫu
nhiên’)
43
* loglog(x,y) : tương tự như lệnh plot nhưng thang chia là
thang logarithm cho cả 2 trục
* semilogx(x,y): thang chia của trục x là logarithm, còn thang
chia của y là tuyến tính
* semilogy(x,y): thang chia của trục y là logarithm, còn thang
chia của x là tuyến tính
* Các lệnh khác:
- clf: Xoá nội dung của Figure hiện tại
- delete Figure (Number): Xoá Figure
- Close (number)/ Close all: Đóng Figure
44
2. Đồ thị lưới đồ thị lưới
MatLab định nghĩa bề mặt lưới bằng các điểm theo hướng
trục z ở trên đường kẻ ô hình vuông trên mặt phẳng xy. Nó
tạo lên một mẫu đồ thị bằng cách ghép các điềm gần kề
với các đường thẳng. Kết quả là nó trông như một mạng
lưới đánh cá với các mặt lưới là các điểm dữ liệu. Đồ thị
loại này thường dùng để quan sát những ma trận lớn hoặc
vẽ những hàm có 2 biến.
Bước đầu tiên là đưa ra đồ thị lưới của hàm 2 biến z=f(x, y),
tương ứng với ma trận X và Y chứa các hàng và các cột
lặp đi lặp lại. MatLab cung cấp hàm meshgrid cho mục đích
này.
[X, Y] = meshgrid(x, y), tạo một ma trận X mà các hàng của
nó là bản sao của vector x và ma trận y có các cột của nó
là bản sao của vector y. Cặp ma trận này sau đó được sử
dụng để ước lượng hàm 2 biến sử dụng đặc tính toán học
về mảng của MatLab.
45
Ma trận R chứa bán kính của mỗi điểm trong [X, Y], nó là
khoảng cách từ mỗi điểm đến tâm ma trận. Cộng thêm eps
để không xảy ra phép chia cho 0. Ma trận Z chứa sin của
bán kính chia cho bán kính mỗi điểm trong sơ đồ.
* Câu lệnh vẽ đồ thị lưới:
>> mesh (X, Y, Z)
Đồ thị là đơn sắc, tuy nhiên ta có thể thay đổi màu sắc theo
yêu cầu
* Đồ thị bề mặt:
>>surf(X,Y,Z)
46
* Đồ thị hàm peaks
Trong matlab có hàm đặc biệt là hàm peaks
>>peaks
z = 3*(1-x).^2.*exp(-(x.^2) - (y+1).^2) ...
- 10*(x/5 - x.^3 - y.^5).*exp(-x.^2-y.^2) ...
- 1/3*exp(-(x+1).^2 - y.^2)
Muốn vẽ đồ thị hàm này ta chỉ việc ra lệnh
>>peaks
47
Ví dụ: >>view(-50,0)
* Lệnh “View” có một dạng khác mà rất tiện ích khi sử dụng
là view ([X, Y, Z]) cho phép bạn quan sát trên một vector
chứa hệ trục toạ độ decac. Khoảng cách từ vị trí bạn quan
sát đến gốc toạ độ không bị ảnh hưởng.
Ví dụ: View([0 10 0]), view([0 –1 0]) và view ([0 0]) cho kết quả
giống nhau.
Một công cụ khác cũng rất hữu dụng với việc quan sát đồ thị
không gian 3 chiều là hàm rotate3d. Các thông số Azimtuh
và elevation có thể được tác động bởi chuột, lệnh rotate3d
on cho phép chuột can thiệp, còn rotate3d off không cho
phép.
Lệnh Hidden dấu các nét khuất. Khi ta vẽ đồ thị, một số phần
của nó bị che khuất bởi các phần khác nên chỉ có thể nhìn
thấy phần ở trong tầm nhìn. Nếu chuyển đến hidden off, ta
có thể thấy phần khuất đó qua mạng lưới. Mặc nhận là
hidden on.
VD1: >>mesh(peaks(20)+7)
>>title (‘Mesh with hiden on’) % có che khuất
VD2: >>mesh(peaks(20)+7)
>>hidden off % khong che khuất
>>title(‘Mesh with Hidden Off’)
VD3: >>mesh(peaks(20)+7)
>>view(-40,0)
4. Các đặc điểm khác và các hàm vẽ đồ thị khác trong không
gian 3 chiều
*Hàm ribbon (x, y) tượng tự như plot(x,y) ngoại trừ cột
của y được vẽ như là một dải riêng biệt trong không gian 3
chiều.
t=[-3:0.2:2]
s=sin(t)
ribbon(t,s)
48
* Hàm clabel tăng thêm độ cao cho đồ thị đường viền. Có
ba mẫu clabel(cs), clabel(cs, V), clabel(cs, ‘manual’). trong
đó cs là cấu trúc đường viền được trả về từ lệnh contour,
cs = contour(z), lấy nhãn tất cả các đồ thị đường viền với
độ cao của nó. Vị trí của nhãn được lấy ngẫu nhiên.
clabel(c,’manual’) định vị phần nhãn đường viền ở vị trí
kích chuột tương tự như lệnh ginput. Nhấn phím return kết
thúc việc tạo nhãn này.
* Hàm contourf sẽ vẽ một đồ thị đường viền kín, không
gian giữa đường viền lấp đầy bằng màu
x = -7.5: 0.5: 7.5;
y = x;
[X, Y] = meshgrid(x,y);
R = sqrt(X.^2 + Y.^2)+eps;
Z = sin(R)./R;
contourf(X,Y,Z)
* Hai hàm meshc, meshz : meshc vẽ đồ thị lưới và thêm đường viền
bên dưới, meshz vẽ đồ thị lưới và đồ thị có dạng như màn che.
meshc(X,Y,Z)
meshz(X,Y,Z)
* Hàm waterfall được xem như mesh ngoại trừ một điều là hàm mesh
chỉ xuất hiện ở hướng x.
waterfall(X,Y,Z)
* Hai hàm surfc và surfvex: surfc vẽ một đồ thị dạng surf và thêm
đường bao bên dưới; surfvex vẽ một đồ thị surf nhưng thêm vào sự
chiếu sáng bề mặt từ nguồn sáng.
Cấu trúc tổng quát là surflvex(X, Y, Z, S, K) trong đó X, Y, Z tương tự
như surf, S là một vector tuỳ chọn trong hệ toạ độ decac (S = [Sx Sy
Sz]) hoặc trong toạ độ cầu (S=[az,el]) chỉ ra hướng của nguồn sáng.
Nếu không khai báo, giá trị mặc định của S là 450 theo chiều kim đồng
hồ từ vị trí người quan sát, S là một vector tuỳ chọn chỉ ra phần đóng
góp tuỳ theo nguồn sáng bao quanh, sự phản chiếu ánh sáng và hệ số
phản chiếu (K=[ka, kd, ks, spread])
49
VD: >>colormap (gary)
>>surfc (peaks)
* Hàm fill3, phiên bản 3 chiều của fill, vẽ một đa giác đều
trong không gian 3 chiều, khuôn dạng tổng quát của nó là
fill3(x, y, z, c), trong đó chiều đứng của đa giác được chỉ
bởi 3 thành phần x, y, z. Nếu c là một kí tự, đa giác sẽ
được lấp đầy màu như bảng màu, c cũng có thể là một
vector hàng có 3 thành phần ([r g b]) trong đó r, g, b là các
giá trị giữa 0 và 1 thay cho các màu đỏ, xanh lá cây và
xanh da trời. Nếu c là một vector hoặc ma trận, nó được sử
dụng như một chỉ số chỉ ra sơ đồ màu. Nhiều đa giác có
thể được tạo ra bằng cách cho thêm nhiều đối số như
fill3(x1, y1, z1, c1, x2, y2, z2, c2, …).
Ví dụ 1:
>>fill3(rand(3, 4), rand(3, 4), rand(3, 4))
Ví dụ 2:
x = -7.5: 0.5: 7.5;
y = x;
[X, Y] = meshgrid(x,y);
R = sqrt(X.^2 + Y.^2)+eps;
Z = sin(R)./R;
fill3(X,Y,Z,'y')
* Các hàm bar3 và bar3h là phiên bản 3 chiều của bar và barh.
bar3(x,y) ; bar3h(x,y) ;
* Hàm pie3 là phiên bản 3 chiều của pie
pie3(x)
Ví dụ : x1=1:5;
y1=x1;
bar3(x1,y1)
bar3h(x1,y1)
pie3(x1)
50
5. Bảng màu
Bảng màu Function Mô tả bảng màu
Đ xanh lá cây Xanh da trời Màu hsv Giá trị màu bão hoà
ỏ
51
7. Sử dụng màu để thêm thông tin
Màu có thể được sử dụng để thêm thông tin vào đồ thị 3 chiều
nếu nó được sử dụng để tạo thành chiều thứ tự. Các hàm
như mesh và surf biến đổi màu dọc theo trục z, trừ khi một
đối số màu được đưa ra như surf (x, y, z) hoàn toàn tương
đương với surf(x, y, z, t) trong đó thành phần thứ t được dùng
như một chỉ số trong biểu đồ màu. Điều này khiến cho đồ thị
đầy màu nhưng lại không thông tin khi mà trục z đã tồn tại.
Dưới đây là một số cách sử dụng đối số màu để thông tin hoặc
nhấn mạnh thuộc tính đã tồn tại trong đồ thị.
52
* Hàm colorbar thêm một thanh màu đứng hoặc thanh màu
ngang vào cửa sổ hình vẽ, đưa ra biểu đồ màu cho trục hiện
tại. colorbar(‘h’) định vị thanh màu ngang dưới hình vẽ hiện
tại, colorbar(‘v’) định vị thanh màu đứng về bên phải hình vẽ.
colorbar không có đối số thì thêm một thanh màu ngang nếu
thanh này chưa tồn tại hoặc cập nhật nếu nó tồn tại.
VD: >>[X, Y, Z] = peaks;
>>mesh(X, Y, Z);
>>colormap(hsv)
>>axis([-3 3 –3 3 –6 8])
>>colorbar
53
Chương 6: Symbolic MatLab
I. Giới thiệu
Symbolic Matlab là thư viện các phép toán kiểu kí tự được đưa
vào môi trường tính số học của MatLab. Thư viện này làm
phong phú và tiện ích thêm với nhiều kiểu tính toán toán học
khác cho phần tính số và đồ hoạ trước đây đã có trong thư
viện MatLab. Thư viện Symbolic MatLab được phát triển dựa
trên Symbolic Maple, đó là phần mềm được thiết kế ở trường
đại học Waterloo Canada.
II. Lệnh và hàm trong Symbolic MatLab
1. Lệnh sym, syms
♦ Mục đích: Biến đổi các số, biến, đối tượng thành symbolics
♦ Cú pháp: S = sym (A) x = sym (x)
x = sym (‘x’, ‘real’) x = sym (‘x’, ‘unreal’)
Hay: syms arg1 arg2 …
syms arg1 arg2 …real
syms arg1 arg2 unreal
54
Ví dụ 1: syms x y Ví dụ 2: syms u v
y = sin (x^2); y = u^2*v-u*v^3;
z = 2* cos (x^2)*x y1u=diff(y,u)
Pretty (z) %Hiển thị z ở dạng quen thuộc y1v=diff(y,v)
diff(y,x) y2u = diff (y,u,2)
diff(z,x) y3v = diff (y,v,3)
Ví dụ 1: syms x;
p=2*x+1
tp1=int(p)
tp2=int(p,0,1)
syms x y;
z=2*x^3+5*y^2;
tpx=int(z,x)
tpy=int(z,y)
tpy1_5=int(z,y,1,5)
Ví dụ 2: Tính tích phân: I = Ta viết: syms x s
f = exp (-(s*x)^2);
I = int (f, x, -inf, inf)
Kết quả: Một thông báo lỗi xuất hiện. Để khắc phục điều này s
phải là một biến symbolic thực
55
syms s real
f = exp (-(s*x)^2);
I = int (f, x, -inf, inf)
Kết quả: I = signum (s)/s*pi^1/2)
⎧ sign ( s ) = 1 → 0 < s
⎪
Ở đây hàm signum chính là hàm dấu: ⎨ sign ( s ) = 0 → s = 0 Với s là số thực
⎪ sign ( s ) = −1 → s < 0
⎩
x
Nếu s là số phức thì sign (s) =
abs (x )
56
Ví dụ: syms x y
a = [2*x; x*y; x; 2*y];
v = [x, y];
yy =jacobian(a, v)
⎡2 0⎤
⎢y x⎥
yy = ⎢1 0⎥
⎢ ⎥
⎢⎣ 0 2 ⎥⎦
Ví dụ: syms x a t h
limit (sin(x)/x)
limit (1/x, x, 0, ‘right’)
limit (1/x, x, 0, ‘left’)
limit ((sin(x+h) – sin(x))/h, h, 0)
v = [(1+a/x)^x, exp(-x)];
limit (v, x, inf, ‘left’)
57
* symsum: Tính tổng của dãy số là các biến symbolic
Cú pháp: r = symsum(S) r = symsum(S, v)
r = symsum(S, a, b) r = symsum(S, v, a, b)
Giải thích:
- symsum(S): Tổng của biểu thức symbolic S theo biến symbolic
k được xác định bằng lệnh findsym từ 0→ k –1.
- symsum(S, v): Tổng của biểu thức symbolic S theo biến
symbolic v được xác định từ 0→ v –1.
- symsum(S, a, b): Tổng của biểu thức symbolic S theo biến
symbolic k được xác định bằng lệnh findsym từ a→ b.
- symsum(S, v, a, b): Tổng của biểu thức symbolic S theo biến
symbolic v được xác định từ v = a tới
v = b.
58
Giải thích
taylor (f, n, v): cho ta xấp xỉ đa thức theo Maclaurin bậc n-1 của
biểu thức, hàm khai triển symbolic f và v là biến độc lập trong
biểu thức, v có thể là một xâu hay biến symbolic.
taylor (f, n, v, a): Khai triển Taylor của biểu thức hay hàm
symbolic f quanh điểm a. Đối số có thể là giá trị số, một
symbolic hay một xâu… Nếu không cho giá trị n thì mặc nhiên
trong MatLab n = 6.
Chuỗi Taylor của hàm giải tích f(x) khai triển quanh x = a cho
bởi:
∞ (n)
f (a )
f(x) = ∑n=0
(x − a) n
n!
59
Ví dụ: Khai triển Taylor của hàm: f =ex sin(x) quanh điểm x0 = 2 (nếu x0 = 0 ta
có khai triển MacLaurin)
Ta viết:
syms x
f = exp (x*sin(x));
t = taylor (f, 4, 2) %4 số hạng đầu tiên khác 0 và khai triển quanh điểm
x0 = 2.
Bây giờ ta có thể vẽ hàm đã cho và hàm khai triển bằng chuỗi taylor quanh
điểm x0 = 2 và cho nhận xét
syms x
f = exp (x*sin(x));
t = taylor (f, 4, 2);
xd = 1:0.05:3
yd = subs (f, x, xd); %thay thế biến x của f thành xd để vẽ
ezplot(t, [1, 3])
hold on;
plot(xd, yd, ‘r-.’)
title (‘Xap xi laylor cua ham’)
legend(‘Taylor’,‘f’)
60
♦ det: Tính định thức ma trận
Cú pháp: r = det (A)
Giải thích: det (A) tính định thức của ma trận A là ma trận symbolic hay số. det (A) cho ta biểu thức symbolic
nếu A là ma trận symbolic hay cho ta một số nếu A là ma trận các số.
⎡k 2k 0⎤
Ví dụ: Cho ma trận symbolic như sau:A = ⎢⎢1 k 0⎥⎥ Tính det(A).
⎢⎣1 k 1⎥⎦
Ta viết: syms k
A = [k 2*k 0;1 k 0;1 k 1];
r = det(A)
Kết quả: r = k^2 – 2*k
61
Ví dụ: v = [‘a’ ‘b’ ‘c’]
diag (v) ≈diag (v, 0) → [a, 0, 0]
[0, b, 0]
[0, 0, c]
[0, 0, 0, 0, 0]
[0, 0, 0, 0, 0]
diag (v, -2) → [a, 0, 0, 0, 0]
[0, b, 0, 0, 0]
[0, 0, c, 0, 0]
62
* expm: Cơ số e của ma trận
Cú pháp: expm (A)
Giải thích: Cơ số e của ma trận symbolic A
Ví dụ: syms t
A = [0 1;-1 0]
expm (t*A)→ [cos(t), sin (t)]
[- sin(t), cos(t)]
*inv: Nghịch đảo ma trận
Cú pháp: R = inv (A)
Giải thích: inv (A): Cho ma trận nghịch đảo ma trận symbolic A
⎡ 2 −1 0 ⎤
⎢ − 1 ⎥⎥
A = ⎢− 1 2
⎢⎣ 0 −1 2 ⎥⎦
Ta viết: A = sym([2, -1, 0;-1, 2, -1; 0, -1, 2]);
inv(A)
[3/4, 1/2, 1/4]
[1/2, 1, 1/2]
[1/4, 1/2, 3/4]
63
* jordan: Tìm dạng chính tắc ma trận
Cho ma trận A, tìm ma trận V không suy biến sao cho inv(V)*A*V
hay J =V\A*V là chéo hoá. Hầu hết tất cả các ma trận, dạng
chính tắc jordan cho ta ma trận chéo có các phần tử trên
đường chéo chính là các giá trị riêng và các cột của ma trận đã
biến đổi là các vectơ riêng. Điều này luôn xảy ra nếu ma trận
đã cho là ma trận đối xứng hoặc nếu nó có các giá trị riêng
phân biệt
Cú pháp: J = jordan(A)
[V, J] = jordan(A)
Giải thích:
- jordan(A): Tính dạng chính tắc ma trận jordan A với A là ma trận
symbolic hay số. Ma trận phải được biết một cách chính xác.
Như vậy, các phần tử của nó phải là các số nguyên hay tỉ số
của các số nguyên bé.
- [V, J] = jordan(A): Tính cả ma trận jordan J và vectơ riêng V của nó, sao cho V\A*V = J
64
* null: Cho giá trị rỗng của ma trận hay phần tử ma trận
Cú pháp: z = null(A)
Giải thích: null: cho ma trận rỗng A
Ví dụ: syms a b c
A = [a* b b+c; a*c c*b-1];
A(:, 1) = [ ]
* poly: Biến đổi ma trận thành dạng đa thức
Cú pháp: p = poly(A)
p = poly(A,v)
Giải thích: poly(A): Nếu A là mảng số thì poly(A) cho ta các hệ
số đặc trưng của đa thức của ma trận A, nếu A là symbolic,
poly(A) cho ta đa thức đặc trưng của A theo cấp luỹ thừa giảm
của biến mặc định x. Biến v được xác định là biến thứ 2 thay
thế biến mặc định x.
Ví dụ: syms z
A = [1 -1 2;1 3 4;2 -1 1]
p = poly(A)
q = poly(sym(A))
s = poly(sym(A),z)
*rank: Hạng của ma trận
Cú pháp: rank(A)
Giải thích: rank(A): hạng của ma trận symbolic A
Ví dụ: syms a b c
A = [1 -1 2;1 3 4;2 -1 1]
rank(A)
B = [1 2;1 2]
rank (B)
C = [a -a b;a c b;a a a]
65
* svd: tách các phần tử suy biến của ma trận
Cú pháp: sigma = svd(A)
[U, S, V] = svd (A)
Giải thích: sigma = svd(A): vectơ symbolic chứa các giá trị suy
biến của một ma trận symbolic A
[U, S, V]=svd(A): Cho ta các ma trận U và V là các cột là
các vectơ suy biến và một ma trận chéo S chứa các giá trị suy
biến. Sao cho A = U*S*V. Như vậy vectơ suy biến symbolic
không có giá trị.
Ví dụ: A = [1 -1 2;1 3 4;2 -1 1]
sdv(A)
[U, S, V] = sdv(A)
* tril, triu: Ma trận tam giác dưới và ma trận tam giác trên
Cú pháp: tril(X) triu (X)
tril(X, k) triu (X,k)
Giải thích: tril(X): Cho ma trận tam giác dưới của ma trận X
tril(X,k): Cho ma trận tam giác dưới (k=0 là đường chéo
chính; k>0 đường chéo lớn hơn đường chéo thứ k là 0, k<0 ở
trên đường chéo thứ k thì bằng 0)
triu(X) và triu(X,k) cho ma trận tam giác trên
Ví dụ: syms a b c
A = [a –a b;1 3 4;a+1 b-1 c+1]
tril (A)
tril (A,1)
tril (A,-1)
triu (A)
triu (A,1)
triu (A,-1)
66
4. Các hàm làm đơn giản hoá các biểu thức
* collect: gom số hạng, biến
Cú pháp: R = collect(S)
R = collect (S,v)
Giải thích: collect(S) là đa thức, gom các số hạng chứa biến x
hay collect(S,v) gồm các biến v trong đa thức S
Ví dụ: syms x y
R1 = colect((exp(x)+x)*(x+2))
R2 = collect((x+y)*(x^2+y^2+1),y)
R3 = collect([(x+1)*(y+1),x+y])
67
Giải thích: Giả sử P là ma trận của các đa thức symbolic.
horner(P) biến đổi mỗi phần tử của P vào đa thức Horner của
nó hay lồng vào nó dưới dạng thừa số.
Ví dụ: horner(x^3-6*x^2+11*x-6) → -6 + (11+(-6+x)*x)*x
* numden: Lấy tử và mẫu số
Cú pháp: [N, D] = numden(A)
Giải thích: [N, D] = numden(A); chuyển mỗi phần tử của A có
dạng phân số. A có thể là ma trận, đa thức, con số…, thành tử
số N và mẫu số D
Ví dụ: sym n d
[n, d] = numden(4/5) → n = 4, d = 5
sym x y
[n, d] = numden(x/y + y/x) → n = x^2 + y^2; d = y*x
68
Ví dụ: a = 980;
Cl =3;
y = dsolve (‘Dy = -a *y’) → y = exp (-at)*Cl
subs(y) → 3*exp (-980*t)
subs (a+b, a, 4) → 4+b % b phải là biến số
subs(cos(a) + sin(b),{a, b},{sym(1,2}→ cos(1) + sin (2)
69
- compose(f, g, x, y, z): x là biến độc lập của f và y là biến độc
lập của g.
- Nếu: f = cos(x/t) và g = sin (y/u) thì
- compose(f, g, x, y, z) → cos(sin(x/u)/t),
- mặt khác compose (f, g, x, u, z) → cos (sin(y/z)/t)
Ví dụ: syms x y z t u
f = 1/(1+x^2); g = sin(y); h = x^t; p = exp(-y/u);
Thì: compose(f, g) → 1/(1+sin(x)^2
compose(f, g, t) → 1/(1+sin(t)^2
compose(h, g, x, z) → sin(z)^t
70
* finverse: Tìm hàm ngược
Cú pháp: g = finverse (f) g = finverse(f,u)
Giải thích:
- g = finverse (f): hàm ngược của hàm f, f là hàm symbolic với
biến x, kết quả tính f-1 g(f(x)) = x
- g = finverse(f,u): hàm ngược của hàm f, f là hàm symbolic với
biến u, kết quả tính f-1 g(f(u)) = u. Dạng này hàm f có thể chứa
nhiều biến symbolic
Ví dụ: sym x
finverse(1/tan(x)) → atan(1/x)
sym u v
finverse(exp(u-2)*v,u) → 2*v +log(u)
* solve: Giải hệ phương trình
Cú pháp: g = solve(eq) g = solve(eq1, eq2, …,eqn)
g = solve(eq, var) g = solve(eq1, eq2, …,eqn, var1, var2, …,
varn)
Giải thích: solve(eq): giải phương trình eq=0 với nghiệm lấy ra
là biến mặc nhiên.
solve(eq, var): giải phương trình eq=0 với nghiệm lấy ra có
tên tương ứng với biến var
71
solve(eq1, eq2,…): giải phương trình eq1=0, eq2=0,… với
nghiệm lấy ra là biến mặc nhiên. (dùng lệnh findsym để tìm các
biến này)
solve(eq1,eq2,… ,var1, var2,…): giải phương trình eq1=0,
eq2=0,… với nghiệm lấy ra có tên tương ứng với biến var1,
var2,…
Ví dụ: solve(‘2*x+y) → -1/2 *y
solve(‘a*x^2+b*x+c’,’b’) → -(a*x^2+c)/x
L=solve(‘x+y = 1’, ‘x-11*y = 5’) → L.y = -1/3, L.x= 4/3
72
∞
∫ f (x)e
−iwx
của t là F = F(t) bởi định nghĩa sau: F(w) = dx với x là biến symbolic của f
−∞
∞
∫ f (x)e
−ivx
- F = fourier (f,v): F là hàm của biến symbolic v thay thế biến mặc nhiên w. F(v) = dx
−∞
- F = fourier (f,u,v): f là hàm của u và F là hàm của biến symbolic v chúng thay thế các biến mặc nhiên x và w
∞
∫ f (u)e
−ivx
tương ứng. F(v) = du
−∞
73
∞
- L = laplace(F,t): L là một hàm của t thay thế biến mặc nhiên s L(t) = ∫F(x)e−txdx
0
- L = laplace(F,w, z): L là một hàm của z và F là hàm của w, nó thay thế các biến symbolic mặc nhiên s
∞
và t tương ứng L(z) = ∫F(w)e−zwdw
0
F = ilaplace(L, y, x)
Giải thích:
- F = ilaplace(L): Biến đổi Laplace ngược của hàm symbolic với biến mặc nhiên độc lập s. Nó cho ta
một hàm của t, L = L(s) → F = F(t) biến đổi ilaplace cho ta một hàm theo x.L = L(f) → F = F(x). Theo định
nghĩa:
c+i∞
F(t) = ∫ L(s)e
st
ds
c−i∞
c+i∞
- F = ilaplace(L,y): F là một hàm của y thay thế biến mặc nhiên t. F(y) = ∫ L( y)e
sy
ds
c−i∞
74