Tải bản đầy đủ (.ppt) (91 trang)

tin học chuyên ngành điện cơ MATLAB ỨNG DỤNG

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 (4.98 MB, 91 trang )

TIN HỌC CHUYÊN NGÀNH
CƠ ĐIỆN
---------------------MATLAB ỨNG DỤNG


Một số hàm thông dụng trong MATLAB
Hàm với biến số thực:
abs(x) cho giá trị tuyệt đối của x ;
sign(x) cho dấu của x ;
fix(x)
cho phần nguyên của x tức là làm tròn về phía số 0 ;
ceil(x) làm tròn x tới số nguyên nhỏ nhất ≥ x tức là làm tròn về phía + ∞;
floor(x) làm tròn x tới số nguyên lớn nhất ≤ x ; tức là làm tròn về phía - ∞;
round(x)
làm tròn về số nguyên gần x nhất;
frac(x) cho phần phân số (thực sự ) của x: frac(x) = x – fix(x);
sqrt(x) cho căn bậc hai dương của x, (nếu x âm ta được số phức);
nthroot(x,n) cho căn bậc n (thực) của số thực x;
exp(x) cho hàm mũ cơ số e tức là ex;
pow2(x)
cho hàm mũ cơ số 2 tức là 2x;
log(x) cho logarit tự nhiên (cơ số e) của x;
log10(x)
cho logarit thập phân của x;
log2(x) cho logarit cơ số 2 của x;
factor(x)
cho kết quả phân tích số x thành các thừa số nguyên tố;
primes(x)
cho ra các số nguyên tố nhỏ hơn hoặc bằng x;



gcd(x,y) cho ước số chung lớn nhất của 2 số nguyên x và y ;
lcm(x,y) cho bội số chung nhỏ nhất của 2 số nguyên x và y ;
factorial(n) cho tính số n giai thừa (n!) ;
perms(v) với v là mảng có độ dài n cho tất cả mọi hoán vị có thể có của
mảng v;
nchoosek(N,k) cho số các tổ hợp chập k của N (số CkN);
dot(A,B)
cho tích vô hướng của hai véc tơ A và B;
cross(A,B) cho tích có hướng (tích véc tơ) của hai véc tơ A và B;
Các hàm lượng giác:
sin(x) , cos(x) , tan(x) , cot(x)
(x tính theo radian);
sind(x), cosd(x), tand(x), cotd(x) (x tính theo độ);
Các hàm lượng giác ngược:
asin(x) , acos(x) , atan(x) , acot(x)
kết quả là radian;
asind(x) , acods(x) , atand(x) , acotd(x) kết quả là độ;
Các hàm sec(x) (=1/cos(x)) , csc(x) (=1/sin(x)) ,
asec(x) (=1/acos(x)) , acsc(x) (=1/asin(x));
Các hàm hypebolic: sinh(x) , cosh(x) , tanh(x) , coth(x);
Và các hàm ngược của chúng asinh(x) , acosh(x) , atanh(x) , acoth(x);



§1. CÁC BÀI TOÁN LIÊN QUAN ĐẾN ĐA THỨC
1.1. Giá trị và nghiệm của đa thức
Để nhập một đa thức ta nhập các hệ số từ cao đến thấp, các hệ số
được viết giữa hai dấu [ ] và tách nhau bằng dấu cách.
Để tìm giá trị của đa thức p tại x = x0 dùng lệnh polyval(p,x0).
Tìm nghiệm r của đa thức p dùng lệnh roots(p).

Biết nghiệm r của đa thức, tìm đa thức p dùng lệnh p = poly(r).
Tìm đạo hàm một đa thức p ta dùng lệnh polyder(p).
Tìm nguyên hàm một đa thức p dùng lệnh polyint(p) (coi hằng số C=0).
Chú ý: Nếu sau một lệnh của MATLAB ta đánh dấu chấm phảy thì lệnh đó
được thực hiện nhưng không cho ra kết quả trên màn hình, còn nếu không
có chấm phảy thì ta có kết quả trên màn hình dưới hai dạng: ans, nếu
không đặt tên biến phải tìm; kết quả của biến đó, nếu nó đã được đặt tên.
Thí dụ 1: Cho đa thức p = x3 – 2x – 5.
Tìm nghiệm của đa thức; Giá trị đa thức tại x = 5;
Đạo hàm và nguyên hàm của đa thức.



1.4. Đa thức nội suy
Khi muốn có đa thức biểu diễn dãy số liệu thực nghiệm (xi , yi) thì sau
khi vào các số liệu x và y trong dấu ngoặc vuông [ ] , các số cách nhau
bằng dấu cách, ta dùng lệnh
polyfit(x,y,n)
với n là bậc đa thức mà ta chọn. Trong trường hợp ta có n +1 cặp số liệu
mà ta chọn bậc đa thức n thì ta được đa thức nội suy Lagrange.
Thí dụ 4: Tìm hàm xấp xỉ bậc nhất biểu diễn dãy số liệu
x=(2; 4; 6; 8); y=(0.35; 0.573; 0.725; 0.947)
Chú ý: Với cách nhập a:b ta có thể tạo ra một dãy các số từ a đến b cách
nhau 1 đơn vị; Với cách nhập a:n:b ta có thể tạo ra một dãy các số từ a
đến b cách nhau n đơn vị.
Thí dụ 5: Tìm hàm xấp xỉ bậc hai biểu diễn dãy số liệu
x=(7;12; 17; 22; 27; 32; 37); y=(83.7; 72.9; 63.2; 54.7; 47.5; 41.4; 36.3)
Thí dụ 6: Tìm đa thức nội suy Lagrange của dãy số liệu
x=(1; 2; 3; 4); y=(17; 27.5; 76; 210.5)



Nội suy tại một giá trị cụ thể xi.
Sau khi vào x , y ta dùng lệnh interp1(x,y,xi,’linear’) (interpolation) nếu
muốn nội suy tuyến tính hoặc interp1(x,y,xi,’spline’) nếu muốn nội suy đa
thức bậc ba tại điểm xi.
Thí dụ 7: Nội suy đa thức giá trị hàm tại xi = 4.5 theo dãy số liệu sau:
x=(4; 4.2; 4.4; 4.6; 4.8; 5);
y=(0.6026; 0.62325; 0.64345; 0.66276; 0.68124; 0.69897);
Thí dụ 8: Dân số Hoa Kỳ (tính theo triệu người) từ 1900 đến 1990 (tính
theo 10 năm một) được cho ở bảng dưới. Hãy dự đoán dân số Hoa Kỳ
năm 2000.
Năm
Dân
số

1900

1910

75.995 91.972

1920

1930

1940

1950

1960


1970

1980

1990

105.71 123.30 131.66 150.69 179.32 203.21 226.50 249.63
1
3
9
7
3
2
5
3


MATLAB cũng cho phép ta nội suy giá trị của hàm hai biến z = f(x , y) tại
điểm (xo , yo) theo các giá trị cho trước cùa hàm tại các điểm (x , y).
Trường hợp các giá trị hàm z cho theo lưới các điểm có tọa độ (xi , yj)
Giả sử x = xi i= 1 , 2 , . . . , n ; y = yj j = 1 , 2 , . . . m ;
Khi đó z được cho bởi ma trận cỡ m× n
tương ứng của hàm tại (xi , yj).

z = [ zij ]

với zij là giá trị

Để nội suy giá trị hàm tại (x0 , y0) ta dùng lệnh

zo = interp2(x,y,z,xo,yo,’linest’).
Thí dụ 9. Dãy x được quan sát từ 1950 đến 1990 với bước là 10 (tức là
1950 1960 1970 1980 1990, n = 5), dãy y được quan sát từ 10 đến 30 với
bước 10 (tức là 10 20 30, m = 3); z là ma trận cỡ 3× 5 ,
Hãy nội suy giá trị của z tại x = 1975, y = 15.
x
1950
1960
1970
1980
1990
y
10

150.697

179.323

203.212

226.505

249.633

20

199.592

195.072


179.092

153.706

120.281

30

187.625

250.287

322.767

426.730

598.243





2.6. Trích các phần tử từ ma trận
Có một ma trận. Ta có thể lấy ra một phần của ma trận đó bằng các hàm:
diag(A) lấy các phần tử trên đường chéo chính lưu vào vector cột;
diag(A,k) lấy các phần tử trên đường chéo k lưu vào vector cột. Trong đó:
k = 0 đường chéo chính;
k>0 đường chéo thứ k phía trên đường chéo chính
k<0 đường chéo thứ k phía dưới đường chéo chính;
trui(A) tạo ma trận cùng cỡ với ma trận A, có các phần tử từ đường chéo chính

trở lên là phần tử của A, còn các phần tử khác bằng 0;
trui(A,k) tạo ma trận cùng cỡ với ma trận A, có các phần tử từ đường chéo thứ k
trở lên là phần tử của A, còn các phần tử khác bằng 0;
tril(A) tạo ma trận cùng cỡ với ma trận A, có các phần tử từ đường chéo chính
trở xuống là phần tử của A, còn các phần tử khác bằng 0;
tril(A,k) tạo ma trận cùng cỡ với ma trận A, có các phần tử từ đường chéo thứ k
trở xuống là phần tử của A, còn các phần tử khác bằng 0;
Thí dụ 17: Cho ma trận A = [1 2 3 4; 5 6 7 8; 9 10 11 12; 13 14 15 16]. Hãy :
Trích các phần tử thuộc đường chéo chính, đường chéo thứ 2 phía trên đường
chéo chính lưu vào vector cột; Tạo ma trận cùng cỡ với A có các phần tử của A từ
đường chéo chính trở lên, các phần tử khác bằng 0; Tạo ma trận cùng cỡ với A có
các phần tử của A từ đường chéo thứ 3 trở xuống, các phần tử khác bằng 0;



2.8. Một số ma trận đặc biệt trong MATLAB
[]
zeros(n)
zeros(m,n)
eye(n)
ones(n)
ones(size(A))
diag(X)
magic(n)

pascal(n)

ma trận rỗng không chứa phần tử nào.
ma trận không cấp n;
ma trận không m hàng n cột;

ma trận đơn vị cấp n;
ma trận vuông cấp n có mọi phần tử bằng 1;
ma trận cùng cỡ với A nhưng mọi phần tử bằng 1;
ma trận có các phần tử trên đường chéo chính là các
phần tử của véc tơ X, các phần tử khác bằng 0.
ma trận magic cấp n gồm các số nguyên từ 1 đến n2
sao cho tổng mọi phần tử trên một hàng, một cột ,
đường chéo đều bằng nhau;
ma trận có các phần tử của tam giác Pascal


§3. GIẢI HỆ PHƯƠNG TRÌNH TUYẾN TÍNH
3.1. Hệ Cramer AX = B với det(A) ≠ 0

Ta có thể dùng ma trận đảo A-1 để tìm nghiệm X = inv(A)*B nhưng để
có kết quả nhanh hơn ta dùng lệnh chia trái X = A\ B
Thí dụ 19: Giải hệ :

10x1 + 2x2 + 3x3 + 4x4
2x1 + 10x2 + 6x3 + 7x4
3x1 + 6x2 + 20x3 + 5x4
4x1 + 7x2 + 5x3 + 28x4

=
=
=
=

5
-1

4.3
-9

3.2. Trường hợp det(A) = 0
Ta kiểm tra điều kiện về hạng của ma trận [A] và ma trận mở rộng [A B]
(dùng lệnh rank()). Nếu hạng hai ma trận đó bằng nhau thì hệ có vô số
nghiệm; ta có thể giải bằng cách dùng ma trận giả đảo bởi lệnh
X = pinv(A)*B
khi đó ta được nghiệm có chuẩn nhỏ nhất; Nếu hạng hai ma trận khác
nhau thì hệ vô nghiệm.
Thí dụ 20: Giải hệ phương trình

x1 + 3x2 + 7x3 = 5
-x1 + 4x2 + 4x3 = 2
x + 10x + 18x = 12


3.3. Hệ phương trình tổng quát AX = B , với A là ma trận chữ
nhật m× n
Nếu m < n thì trước khi giải phải kiểm tra điều kiện tương thích về hạng.
Nếu điều kiện đó được thoả mãn thì có thể giải hệ bằng
X = pinv(A)*B nếu muốn có nghiệm có chuẩn nhỏ nhất;
Y= A\ B
nếu muốn có nghiệm có số thành phần khác không ít nhất.
Thí dụ 21: Giải hệ phương trình
x1 - x2 - x3 - 3x4 + x5 = 1
x1 + x2 - 5x3 - x4 + 7x5 = 2
-x1 + 2x2 + 2x3 + 2x4 + x5 = 0
-2x1 + 5x2 - 4x3 + 9x4 + 7x5 = -0.5
Nếu m > n và rank(A) = n hệ có nghiệm duy nhất;

Nếu rank(A) = rank([A B]) < n hệ có vô số nghiệm.
Thí dụ 22: Giải hệ Ax = B
Với A = [1 2 3 ; 4 5 6 ; 7 8 9 ; 10 11 12] ; B = [1 ; 3 ; 5 ; 7]



4.2. Biểu diễn hàm trong MATLAB
Các hàm MATLAB. MATLAB có một tệp là M-file chứa rất nhiều hàm,
các hàm đó nhận các giá trị đưa vào, tính toán rồi trả lại kết quả tính toán.
Ta cũng có thể tự tạo nên các hàm M-file. Chọn File, New rồi chọn
function, ta có màn hình soạn thảo để đánh các lệnh vào đó. Chẳng hạn,
ta đưa vào một hàm và đặt tên là humps như sau:
function y = humps(x)
y=1./((x-0.3).^2 + 0.01) + 1./((x-0.9).^2 + 0.04) - 6;
% các phép tính về mảng, có dấu chấm.
Ta lưu hàm đó bằng lệnh Save, nó được lưu với tên humps.m. Bây giờ
muốn sử dụng nó thì ở cửa sổ lệnh ta chỉ việc chuyển nó thành hàm sử
dụng (function handle) bằng cách gõ thêm ký tự @ trước tên hàm.
Thí dụ 25: Tính giá trị của hàm humps nêu trên tại x = 2.0
Các hàm không tên (Anonymous Functions). Một cách thứ hai để biễu
diễn hàm là tạo nên ở cửa sổ lệnh một hàm không tên bằng một xâu biểu
thức diễn tả hàm đó và cũng làm cho nó thành một hàm handle theo kiểu
handle=@(đối số) hàm không tên;
Thí dụ 26: Tính giá trị hàm y = 0.5x + 2-x tại x = 1.
Thí dụ 27: Tính giá trị hàm z = ysinx + xcosy tại x = π , y = 2π.


4.3. Vẽ đồ thị hàm số
4.3.1. Vẽ theo từng điểm
Cho dãy điểm (xi , yi), vẽ các điểm đó trên mặt phẳng bằng lệnh

plot(x,y).
Chú ý là khi biểu diễn hàm phải dùng các phép tính về mảng.
Thí dụ 28: Vẽ đồ thị y = x2 - 2x + 1 trong khoảng x từ -10 đến 10

Khi dùng lệnh vẽ như trên MATLAB chọn kiểu đường đồ thị là nét liền,
mầu đồ thị là mầu xanh, đường đồ thị là đường trơn không có đánh dấu. Ta
có thể thêm một số lựa chọn khác để biểu diễn đồ thị được tốt hơn.


Mầu đường, kiểu đường, ký hiệu đánh dấu vị trí:
Sử dụng lệnh plot(x,y,'…’) trong đó ’…’ sẽ nhập các ký tự thể hiện mầu
đường, kiểu đường, ký hiệu đánh dấu vị trí của đồ thị, được cho trong bảng
sau :

hiệu
b
g
r
c
m
y
k
w


hiệu

Mầu
Xanh da trời
Xanh lá cây

Đỏ
Xanh xám
Đỏ tím
Vàng
Đen
Trắng

:
-.
--

Kiểu đường
Nét liền
Nét đứt chấm
Nét gạch chấm
Nét gạch gạch


hiệu
.
0
x
+
*
s
d
v
^



p
h

Kiểu đánh dấu
Điểm
Tròn
Dấu x
Dấu +
Dấu *
Hình vuông
Hình diamond
Dấu v
Dấu ^
Dấu <
Dấu >
Hình ngôi sao
Hình lục giác


Kiểu hiển thị: Lệnh colordef cho phép lựa chọn kiểu hiển thị. Giá trị mặc
định colordef là white, khi đó trục tọa độ, mầu nền có mầu xám sáng, tên
của đồ thị, trục có mầu đen. Ta có thể dùng lệnh colordef black khi đó nền
trục tọa độ đen, nền hình vẽ mầu tối xám, tên đồ thị, trục có mầu sáng;
Đường bao miền vẽ đồ thị: Để tạo hoặc bỏ đường bao cho miền vẽ đồ
thị sử dụng lệnh box on hoặc box off;
Lưới grid : Để thêm hoặc bỏ lưới grid ở đồ thị, sử dụng lệnh grid on
hoặc grid off;
Tên cho các trục dùng lệnh xlabel(‘Tên trục hoành’) và ylabel(‘Tên
trục tung’);
Tên đồ thị dùng lệnh title(‘Tên đồ thị’);

Thêm văn bản (text box) vào vị trí nào đó trên đồ thị, sử dụng lệnh
text(x,y,’Nội dung’) với x, y là tọa độ mép trái của văn bản đưa vào hoặc
gtext(‘Nội dung’) để chọn trực tiếp vị trí của văn bản bằng chuột.
Thể hiện trục tọa độ : Sử dụng lệnh axis … với … là các tham số thể
hiện trục tọa độ. Có nhiều tham số để biết đề nghị sử dụng trợ giúp help.


Thí dụ 29: Vẽ đồ thị hàm y = sin2α trên [-π , π] với bước π/20.
Do thi ham y = [sin(α )] 2
1
0.9
0.8
0.7

sin(α )2

0.6
0.5
0.4
0.3
0.2
0.1
0

-pi

-pi/4

-pi/2


-3pi/4
0
pi/4
-π ≤ α ≤ π

pi/2

3pi/4

pi


Trên Figure 1 cũng có thế trực tiếp thêm, thay đổi các lựa chọn của đồ
thị bằng cách sử dụng các lựa chọn trên menu của cửa sổ.
Ta vẽ các trục x và y bằng cách chọn Insert, chọn Arow rồi vẽ trên đồ thị
các trục x và y ở đúng vị trí của chúng. Điền tên trục x , y bằng cách chọn
Insert rồi chọn Text box xong đặt dấu + ở vị trí của x , y trên hình.
Muốn thay đổi tính chất của đường vẽ đồ thị ta chọn Edit -> Curent
Object Properties, nháy chuột vào đường cong để xuất hiện hộp thoại
Property Editor - Lineseries, ở hộp thoại này ta có thể thay đổi được tính
chất của đường đồ thị.
Có thể vẽ đồ thị nhiều đồ thị trên cùng một hình bằng cách thêm các
cặp đối số x, y vào trong lệnh plot.
Nếu như một trong các đối số là ma trận và đối số còn lại là vector thì
lệnh plot sẽ vẽ đồ thị tương ứng với mỗi cột của ma trận với vector đó.
Cũng có thể sử dụng lệnh hold on hoặc hold off để cho phép giữ lại
hay xóa đồ thị cũ đi khi có lệnh plot vẽ đồ thị mới.


Thí dụ 30: Vẽ đồ thị 2 hàm số y1 = sin(x) và y2 = cos(x) trên [0 , 2π]

DO THI HAM SO
1
0.8
0.6
sin(x)
0.4

y

0.2
0

cos(x)

-0.2
-0.4
-0.6
-0.8
-1

0

pi/4

pi/2

3pi/4

pi


5pi/4

3pi/2

7pi/4

2pi

Trong trường hợp muốn vẽ nhiều đồ thị với các hệ trục tọa độ khác
nhau trên cùng một cửa sổ figure, sử dụng lệnh subplot(m,n,p) với m,n,p
là các giá trị tự nhiên. Lệnh sẽ thực hiện chia cửa sổ figure ra thành m x n
khoảng để vẽ đồ thị, chọn vị trí p là khoảng để vẽ đồ thị tiếp theo.


×