Tin học chuyên ngành
cho khoa cơ điện lập
trình tính toán trong
Matlab
1TIN HỌC CHUYÊN NGÀNH DÀNH CHO KHOA CƠ ĐIỆN
LẬP TRÌNH TÍNH TOÁN TRONG MATLAB
SỐ TIẾT: 45 (30 LÝ THUYẾT + 15 THỰC HÀNH)
1. Sách, giáo trình chính:
- Lập trình Matlab và ứng dụng, Nguyễn Hoàng Hải - Nguyễn Việt
Anh, NXB Khoa học và kỹ thuật
- Bài giảng LẬP TRÌNH TÍNH TOÁN TRONG MATLAB - Đỗ Thị Mơ
2. Sách tham khảo
- Matlab for engineers, Adrian Biran - Moshe Breiner, Addision Wesley
Publishing Company.
- Cơ
75 trang |
Chia sẻ: huongnhu95 | Lượt xem: 320 | Lượt tải: 0
Tóm tắt tài liệu Tin học chuyên ngành cho khoa cơ điện lập trình tính toán trong Matlab, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
sở Matlab & ứng dụng, Nguyễn Hữu Tình-Lê Tấn Hùng- Phạm Thị
Ngọc Yến-Nguyễ Thị Lan Hương, NXB Khoa học và kỹ thuật
- Matlab & Simulink, Nguyễn phùng Quang, NXB Khoa học và kỹ thuật
3. Giáo viên: Đỗ Thị Mơ - Bộ môn Công nghệ phần mềm
Email: dtmo@hau1.edu.vn
Chương 1: Giới thiệu chung
1. Không gian làm việc của Matlab
Cửa số lệnh của Matlab có dấu mời (dấu nhức) là dấu >>. Tại
đây ta có thể gõ vào các lệnh của Matlab hoặc gõ các biến.
Những lệnh hoặc biến được lưu trong không gian làm việc của
Matlab và có thể được gọi lại khi ta cần. Dùng các mũi tên (↓↑ )
để chọn các lệnh, có thể cắt, copy, dán và sửa chữa dòng lệnh.
Ví du:
>> X=2
X=
2
>> A=’XIN CHAO’
A=
XIN CHAO
Nếu ta không nhớ tên biến, ta có thể yêu cầu Matlab cho danh
sách các biến bằng cách đánh lệnh who từ dấu nhắc lệnh.
>> who
22. 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:
1−
Số lớn nhất có thể được của số thựcrealmax
Số nhỏ nhất có thể được của số thựcrealmin
Số các đối số hàm đưa ranarout
Số các đối số đưa vào hàm được sử dụngNargin
i=j=i hoặc j
Dùng để chỉ số không xác định như kết qẩu của 0/0NAN hoặc nan
Để chỉ số vô cùng như kết quả của 1/0Inf
Số của phép toán số thựcFlops
Số nhỏ nhất, nếu cộng thêm 1 sẽ được số nhỏ nhất lớn hơn 1Eps
π = 3.1415Pi
Tên biến mặc định dùng để trả về kết quảAns
Giá trị
Các biến đặc
biệt
3Cá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.
4- 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 :
2^3^Phép luỹ thừa
4/2=2 hoặc 2\4=2/ ( chia trái) ,\ (chia phải) Phép chia
3*5*Phép nhân
8-2-Phép trừ
5+4+Phép cộng
Ví dụKí hiệu
Phép tính
5Cá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
6* 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
* Có thể biểu diễn số phức ở dạng cực ( độ lớn và góc)
M∠θ ≡ M.eiθ = a+bi
Ở trên số phức biểu diễn bằng độ lớn M và góc θ, quan hệ
giữa các đại lượng này và phần thực, phần ảo được biểu
diễn dưới dạng đại số:
M: dùng hàm abs để tính độ lớn, M=abs(so phuc).
θ= tan-1(b/a): dùng hàm angle tính góc, θ = angle(so phuc)
a= Mcosθ b= Msinθ
Ví dụ:
>> c=1+2i
c =
1.0000 + 2.0000i
>> M=abs(c)
M =
3.1623
7>> 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
tang xtan(x)
Căn bậc hai của xsqrt(x)
sin xsin(x)
Hàm cho dấu của xsign(x)
Hàm làm tròn về số nguyênround(x)
Phần dư của phép chia x/yrem(x,y)
Hàm trả về phần thực của xreal(x)
log10
xlog10(x)
Lnxlog(x)
Bội số chung nhỏ nhất của 2 số nguyên x và ylcm(x,y)
Hàm trả về phần ảo của số phứcimag(x)
Ước số chung lớn nhất của 2 số nguyên x và ygcd(x,y)
Xấp xỉ âm vô cùngfloor(x)
Xấp xỉ khôngfix(x)
exexp(x)
cosin xcos(x)
Số phức liên hợpconj(x)
Xấp xỉ dương vo cùngceil(x)
arctang của phần thực của x và yatan(x,y)
arctang xatan(x)
arcsin xasin(x)
Tính góc của số phứcangle(x)
arccos xacos(x)
Tính argument (độ lơn M) của số phức xabs(x)
Ý nghĩaKí hiệu hàm
8>> 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
>>lcm(18,81) % bội số chung lớn nhất
ans=
162
>> x=3/9+sin(3.14*17/180)
x =
0.6256
>> x=3\9+sin(3.14*17/180)
x =
3.2922
>> x=asin(3.14/4)
x =
0.9027
9Bà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
10
* Để 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
prompt. It cannot be used in a function.
CLEAR CLASSES is the same as CLEAR ALL except that class definitions
are also cleared. If any objects exist outside the workspace (say in
userdata or persistent in a locked m-file) a warning will be issued
and the class definition will not be cleared. CLEAR CLASSES must be
used if the number or names of fields in a class are changed.
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.
If X is global, CLEAR X removes X from the current workspace,
but leaves it accessible to any functions declaring it global.
CLEAR GLOBAL X completely removes the global variable X.
CLEAR FUN clears the function specified. If FUN has been locked
11
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.
Use the functional form of CLEAR, such as CLEAR('name'),
when the variable name or function name is stored in a string.
See also WHO, WHOS, MLOCK, MUNLOCK, PERSISTENT
1.2. Ghi và phục hồi dữ liệu
* Ghi dữ liệu: Để ghi các dữ liệu( các biến) vào tệp kiểu nhị phân với tên do ta
đặt và đuôi tệp là MAT, ta có thể dùng lệnh sau:
>> Save Tên_tệp hoặc chọn các mục trên thanh Menu:
File / Save Workspace as
Ví dụ: >> save luu1
Các biến trong Matlab được lưu trong tệp luu1.mat
Có thể ghi một số biến vào tệp theo lệnh sau:
>> save tên_tệp biến1 biến2 ...
Ví dụ: >>save luu2 a b c
Các biến a,b,c được ghi trong tệp luu2.mat
* Phục hồi dữ liệu: Để phục hồi dữ liệu (các biến) trong các tệp đã ghi ta dùng
lệnh: >> Load tên_tệp
Ví dụ: >>Load luu1
12
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
13
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
Sau đó chọn File / save và gõ vào tên tệp là thu1.m
Chọn Debug / Run để chạy hàm, nhập dữ liệu cho chiều cao, cạnh đáy của
tâm giác từ cửa sổ lệnh.
Ví dụ 2: tạo một m-file có tên là tinhham.m, nội dung chứa các câu lệnh sau:
14
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
3. Các cấu trúc điều khiển
3.1. Cấu trúc rẽ nhánh IF ... End
* Trường hợp đơn giản:
If biểu thức điều kiện
khối lệnh
end
Nếu biểu thức điều kiện là đúng thì khối lệnh được thực hiện.
Ví dụ:
>> a=10
>> if a>0
x=3*a
end
>> x
x=
30
* Trường hợp có hai điều kiện thay đổi:
if biểu thức điều kiện
khối lệnh 1
else
khối lệnh 2
end
Nếu biểu thức điều kiện đúng thì thực hiện khối lệnh 1, còn sai thì thực hiện khối lệnh 2.
15
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
* Trường hợp có nhiều điều kiện thay đổi:
if biểu thức điều kiện 1
khối lệnh 1
elseif biểu thức điều kiện 2
khối lệnh 2
elseif biểu thức điều kiện 3
khối lệnh 3
....
elseif biểu thức điều kiện n
khối lệnh n
else
khối lệnh n+1
end
Nếu biểu thức điều kiện i đúng thì thực hiện khối lệnh i ( i từ 1 đến n),
ngược lại không có biểu thức điều kiện nào đúng thì thực hiện khối lệnh
n+1.
16
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
3.2. Cấu trúc switch ... case
switch biểu thức điều kiện
case giá trị 1
khối lệnh 1
case giá trị 2
khối lệnh 2
case giá trị 3
khối lệnh 3
. . .
case giá trị n
khối lệnh n
otherwise
khối lệnh n+1
end
Biểu thức điều kiện là dạng số hoặc dạng chuỗi. Giá trị i ( i từ 1 đến n) phải có giá trị
phù hợp với biểu thức điều kiện.
Nếu biểu thức điều kiện bằng giá trị i thì khối lệnh i ( i từ 1 đến n) được thực hiện,
ngược lại nếu biểu thức điều kiện không bằng một giá trị i nào thì khối lệnh n+1
được thực hiện.
17
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
3.3. Vòng lặp For
Vòng lặp For cho phép một khối lệnh thực hiện lặp lại một số lần cố định. Cú pháp
của vòng lặp For như sau;
For biến=mang
khối lệnh
end
Biến lần lượt nhận các giá trị của mảng, mỗi lần như vậy khối lệnh được thực hiện 1
lần. Số lần lặp của khối lệnh sẽ bằng số phần tử của mảng.
Ví dụ 1 : s= 1+2+3+4+ . . . +10
s=0;
for i=1:10
s=s+i;
end
s
Ví dụ 2: Tính p= n !=1*2*3* ...*n
n=input(‘ Nhap vao n: ‘)
p=1;
for i=1:n
p=p*i;
end
p
18
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.
19
- 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
20
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ệ
khác~=
bằng==
lớn hơn hoặc bằng>=
lớn hơn>
nhỏ hơn hoặc bằng<=
nhỏ hơn<
ý nghĩaToán tử quan hệ
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
Kết qủa của toán tử logic là 1 (true) hoặc 0 (false)
Ví dụ :
>> a=5
>> b=-2
>> (a>0)&(b<0)
ans =
1
NOT~
OR|
AND&
Ý nghĩaToán tử logic
21
>> (a0)
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)
22
>> 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
Chương 3: Các phép toán với mảng
1. Mảng đơn giản
1.1. Biểu diễn mảng đơn trong matlab
Để biểu diễn một dãy các phần tử có tính chất giống nhau matlab dùng kiểu
mảng.
Biểu diễn mảng đơn như sau:
Tên_biến_mảng=[a1,a2,...,an] hoặc Tên_biến_mảng=[a1 a2 ... an]
Trong đó ai với i từ 1 đến n, là phần tử thứ i của mảng, như vậy giữa các
phần tử ngăn cách nhau bới dấu phẩy hoặc dấu cách. Phần tử của mảng có
thể biểu diễn bằng biểu thức.
Ví dụ 1 x biểu diễn 1 dẫy số 1, 3, 5 ,7, 9,11 trong matlab ta viết như sau
x=[1,3,5,7,9,11] hoặc x=[1 3 5 7 9 11]
Ví dụ 2:
>> a=2
>> y=[2*a,3+a,4/a]
y =
4 5 2
23
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
1.3. Cấu trúc của mảng
Có nhiều cách tạo ra một mảng, sau đây là một số cấu trúc của mảng :
* Với mảng có số phần tử nhỏ ta có thể nhập vào trực tiếp.
* Ta có thể dùng các cấu trúc cơ bản sau để tạo mảng :
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
24
>> 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
2. Vector hàng và vector cột
* Vector hàng là mảng 1 hàng và nhiều cột, cách biểu diễn đã xét ở phần trên.
a=[a1,a2, ... ,an]
* Vector cột là mảng 1 cột và nhiều hàng. Các thao tác như vector hàng. Biểu diễn dùng dấu ;
ngăn cách giữa các phần tử.
b=[b1;b2; ... ;bn]
Ví dụ: b=[1;3;5;7]
b = 1
3
5
7
* Dùng phép chuyển vị ( kí hiệu là dấu nháy đơn: ‘) để chuyển vector hàng thành vector cột.
Ví dụ:
>> a=[2,4,6,8,10]
a = 2 4 6 8 10
>> b=a'
b = 2
4
6
8
10
25
>> 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(:)
26
>> 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
* Ma trận có các phần tử là 0 : zeros(r,c) r số hàng, c số cột
>> zeros(3,3)
ans =
0 0 0
0 0 0
0 0 0
4. Các phép toán với mảng
Các phép toán cơ bản với mảng được cho trong bảng sau :
a.^b=[a1^b1 a2^b2 ... an^bn]
c.^a=[c^a1 c^a2 ... c^an]
a.^c=[a1^c a2^c... an ^c] Luỹ thừa mảng
a./b=[a1/b1 a2/b2... an/bn] Chia phải mảng
a.\b=[a1\b1 a2\b2... an\bn] Chia trái mảng
a.*b=[a1 *b1 a2 *b2... an*bn] Nhân mảng
a+b=[a1 +b1 a2 +b2... an+bn] Cộng mảng
a*c=[a1 *c a2 *c... an*c] Nhân với một số
a+c=[a1 +c a2 +c... an+c] Cộng với một số
Dữ liệu minh hoạ a=[a1 a2 ... an], b=[b1 b2 ... bn], c là số vô
hướng
27
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
28
>> 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
5. Một số hàm thông dụng với ma trận
Tổng các phần tử chéoTrace(A)
Hạng ma trậnrank(A
Đa thứcPoly(A)
Tính trực giaoorth(A)
Ma trận logarithmlogm(A)
Ma trận nghich đảoinv(A)
Tính định thức ma trận Adet(A)
Ý nghĩaKí hiệu
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
29
>> 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
30
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
+ Cách thứ nhất dùng ma trận nghịch đảo:
>> x=inv(A)*b
x =
29.0000
14.0000
103.0000
+ Cách thứ hai dùng toán tử chia ma trận:
>> x=A.\b
x =
29.0000
14.0000
103.0000
31
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
>> x=A\b %Phuong phap vuong nho nhat
x =
247.9818
-173.1091
114.9273
Tính độ sai lệch:
>> res=A*x-b
res =
-119.4545
11.9455
0.0000
35.8364
+ Trong MATLAB khi gặp những hệ phương trình có số phương trình ít hơn số biến.
Có thể dùng 2 cách: Cách 1 dùng toán tử chia đưa ra phương pháp có số phần tử 0
của x là cực đại, phương pháp này goi là phương pháp với số phần tử 0 cực đại.
Cách thứ 2 tính x= pinv(A) / b đưa ra phương pháp chiều dài hay tiêu chuẩn của x nhỏ
hơn các phương pháp khác, phương pháp này gọi là phương pháp tiêu chuẩn cực
tiểu. Ta có thể dung cả 2 phương pháp để giải rồi so sánh để nhận nghiệm x nào
phù hợp.
32
- 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
>> x=A\b % Phuong phap voi so phan tu 0 cuc dai
x =
0
-165.9000
99.0000
168.3000
- Phương pháp tiêu chuẩn cực tiểu: xn=pinv(A)*b
Lệnh pinv . Lệnh này dùng để tính giả nghịch đảo của ma trận
A.
>> xn=pinv(A)*b % Tim gia phap tieu chuan nho nhat
xn =
30.8182
-168.9818
99.0000
159.0545
33
- 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
Bài tập chương 3
1. Cho dãy số sau: a1,a2,....,an . Viết chương trình tìm phần tử lớn nhất, phần tử nhỏ nhất của
dãy số đó.
2. Cho dãy số sau: a1,a2,....,an . Viết chương trình sắp xếp dãy theo thứ tự tăng dần .
3. Cho dãy số sau: a1,a2,....,an . Viết chương trình tìm các phần tử có giá trị là x nhập vào từ bàn
phím.
4. Cho ma trân A có m dòng, n cột. Tính tổng các phần tử của ma trận A.
Hãy tính: định thức của A, ma trận chuyển vị của A, ma trận nghịch đảo của A, đa thức của A, tổng
đường chéo chính của A, hạng của A.
5. Giải hệ phương trình sau bằng 2 phương pháp:
x1+ 2 x2 + 6x3 = 2
8x1+ 6x2 + 9x3 = 8
2x1+ 3x2 + x3 = 4
6. Giải hệ phương trình sau
3x1+ 4 x2+ 5x3=3
3x1+ 2x2 + x3 =4
3x1+ 3x2+ 2x3 =2
5x1+ 6x2+ 4x3=8
7. Giải hệ phương trình sau
3x1+ 3x2+ 3x3+ 5x4=3
4x1+ 2x2+ 3x3+ 6x4=4
5x1+ x2+ 2 x3+ 4x4=2
34
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ác file đính kèm theo tài liệu này:
- tin_hoc_chuyen_nganh_cho_khoa_co_dien_lap_trinh_tinh_toan_tr.pdf