LỜI NÓI ĐẦU MATLAB là một trong những hệ thống được soạn thảo hết sức chu đáo, mạch lạc với việc áp dụng nhiều thuật toán phong phú, đặc biệt như chính tên của nó – “MATric LABoratory’’
Trang 1LỜI NÓI ĐẦU
MATLAB là một trong những hệ thống được soạn thảo hết sức chu đáo, mạch
lạc với việc áp dụng nhiều thuật toán phong phú, đặc biệt như chính tên của nó –
“MATric LABoratory’’, thuật toán ma trận được coi là hạt nhân quan trọng tronglập trình MATLAB Cú pháp ngôn ngữ của chương trình MATLAB được thiết lậptinh tế đén mức người sử dụng không có cảm giác là đang tiếp xúc với các phép tínhphức tạp của ma trận Ma trận được áp dụng rộng rãi trong các bài toán kĩ thuậtphức tạp như hệ thống điện lực, tự động hóa,…Vì vậy MAYLAB chính là phầnmềm hết súc thuận tiện và hiệu quả đối với các lĩnh vực này
Là một hệ thống mở, MATLAB kết hợp rất nhiều phương pháp tính mà có thể
áp dụng thuận tiện cho bất kì người sử dụng nào MATLAB có đặc điểm linh hoạt
và dễ thích nghi, vì vậy cho dù là người mới bắt đầu hay là 1 chuyên gia sành sỏi,vẫn có thể sử dụng MATLAB một cách thoải mái và cuốn hút MATLAB rất ưu áivới người sử dụng,bạn có thể tạo ra chương trình chuyên môn của mình màMATLAB sẵn sang đáp ứng Matlab cho phép tiếp cận và áp dụng dễ dàng các hàm
có sẵn để giải các bài toán cần thiết và đồng thời có thể sang tạo ra các m.file màkhi được lưu giữ với thủ tục phù hợp, matlab coi như là hàm của chính hệ thống,điều đó cho phép mở rộng khả năng vô hạn của Matlab Đó cũng chính là ưu điểmnổi bật của Matlab mà không chương trình nào có được
Em xin trân thành cảm ơn thầy TS.Trần Quang Khánh đã giúp chúng em tiếp cậnMATLAB để trang bị thêm cho mình một hành trang kiến thức trước khi bước vào công việc của mình sau này
Sinh viên: Phạm Thanh Huyền
Trang 2CHƯƠNG I
CƠ SỞ MATLAB
I Cơ sở lý thuyết:
Ngôn ngữ của hệ thống MATLAB rất phong phú, nó gần như áp dụng tất cả các
phương tiện lập trình đã biết, kể cả mô phỏng, hoạt hình, đồ họa…
MATLAB chứa khối lượng khổng lồ các phép tính, thuật giải và các hàm cho
phép giải rất nhiều các bài toán phức tạp như nghịch đảo ma trận, đạo hàm, vi
phân, tích phân…
Chương trình MATLAB nó cho phép vẽ tất cả các đồ thị với các dạng khác nhau
trong không gian 2D, 3D
1.1 Số và phép toán sơ cấp
a) Các phép toán thông dụng thường dùng căn bản như sau:
Phép toán Cộng Trừ Nhân Chia Chia trái Lũy thừa Khai căn
b) Các phép toán về số phức như sau:
Khi một số S được biểu thị dưới dạng phức như cho trong bảng sau:
Liên hợp phức Slh = conj(S)
c) Các biến và hàm trong MATLAB
Các hàm toán học
abs(x) Giá trị tuyệt đối rem(x,y) Số dư của phép chia x/y
Phase(x) Góc pha của số phức sum(v) Tổng các phần tử vector
log(x) Logarit tự nhiên prod(v) Tích các phần tử vector
log10(x) Logarit cơ số 10 min(v) Phần tử vector bé nhất
conv(x,x) Tích chập x của chính nó mean(v) Giá trị trung bình cộng
Các hàm lượng giác
Sinh(x) Hàm sin hyperbol asinh(x) Hàm arsin hyperbol
Cosh(x) Hàm cosin hyperbol acosh(x) Hàm arccos yperbol
1.2 Các dạng xuất dữ liệu
Được thực hiện bởi lệnh : fprintf('S=%v.uf d\n',F)
S là tham số ra, v là chữ số cực đại cố thể, u là chữ số sau dấu phẩy, f hiện thị dấu
phẩy tĩnh, (e hiện thị dấu phẩy động), d hiện thị đợn vị tính, F hàm tính toán.
SVTH: Phạm Thanh Huyền 2 Lớp Đ3H1
Trang 31.3 Văn bản trong MATLAB
Để xuất chuỗi ký tự nào đó ra màn hình thì ta sử dụng lệnh như sau:
Trang 4S =
0.70
f) Hãy tính các giá trị của biểu thức, biểu thị các kết quả trên màn hình với n chữ
số sau dấu phẩy đông/tĩnh(đ/t) với dữ liệu lấy theo chữ cái họ, tên đệm và tên ngườigiải trong bảng 1.1
SVTH: Pham Thanh Huyen
b)Sử dụng các lệnh Matlab để xác định giá trị dòng điện chạy trong mạch
SVTH: Phạm Thanh Huyền 4 Lớp Đ3H1
Trang 5Chương trình Matlab như sau
Trang 6- Nhận xét: Với việc sử dụng phần mềm MATLAB cho việc giải bài toán rất đơn
giản, thuận lợi và nhanh chóng cho ra kết quả, đồng thời nó cũng không yêu cầu quá cao về trình độ của người sử nó
CHƯƠNG II
SVTH: Phạm Thanh Huyền 6 Lớp Đ3H1
Trang 7function[tên tham số đầu ra] = tên hàm(tên biến đầu vào)
Các biến chỉ có tác dụng trong nội tại hàm khai báo Tên của các biến được cáchnhau bởi dấu phẩy Phần giải thích được ghi sau dấu % Hàm này được lưu lại vào
trong m.file khi giải bài toán mà thiet lập nó sẵn tra chỉ cần gọi tên hàm ra là được
2.2 Inline objects:
Có thể xây dựng hàm dưới dạng inline objects như sau:
f=inline(‘f(x) ‘, ‘x’) 2.3 Thủ tục vào xuất dữ liệu:
a) Nhập dữ liệu bằng cách sử dụng từ lệnh: input
a=input(‘nhap gia tri a = ‘);
b=input(‘nhap gia tri b = ‘);
Khi chạy chương trình lần lượt thì dòng nhắc xuất hiện như sau:
nhap gia tri a =nhap gia tri b =lúc đó ta chỉ cần gõ dữ liệu vào vị trí tương ứng
b) Lấy dữ liệu từ đồ thị sử dụng lệnh : ginput(n)
c) Xuất dữ liệu ta sử dụng lệnh (fprintf(‘S=%v.uf d\n’,F)
Trang 8Nhận xét :Ta thấy kết quả này giống kết quả bài 1.3, nhưng cách giải bằng như bài
toán 1.3 thì có ưu điểm hơn ở chỗ là khi ta giải bài toán chỉ cần xây dựng hàm một SVTH: Phạm Thanh Huyền 8 Lớp Đ3H1
Trang 9lần, chỉ cần gõ tên của hàm và nhập các thống số của nó và thay đổi các thông số
rễ dàng hơn ngay trên cửa sổ chính thì cho kết quả ngay mà không cần phải gõ từng lệnh một Cách thứ 2 tuy lúc tạo hàm lâu hơn nhưng có thể áp dụng cho nhiều bài toán hơn.
b)Ví dụ; Mạng điện có công suất P= 367kW, Q=123kVAr,U=110kV,R=20Ω
Tính tổn thất điện năng trong 3470 giờ
Sử dụng matlab ta tính được nhanh chóng như sau;
Hãy xây dựng hàm xác định điện trở của mạch gồm n nhánh song song và áp
dụng hàm vừa xây dựng để tính điện trở tương đương của mạch gồm 5 nhánh song song
Trang 11I Cơ sở lý thuyết:
3.1 Biểu thị một mảng với các phần tử cách đều trong một khoảng xác định Lệnh linspace(a,b,n), trong đó a, b là các mốc giới hạn và n là số điểm cần
thiết lập
− Lệnh linspace(a,b) cho phép thiết lập vector dòng với 100 gía trị cách đều
trong khoảng giới hạn [a, b]
− logspace(a ,b,n) cho phép thiết lập vector dòng với n giá trị cách đều nhau
trong tọa độ logarit giữa các deccades 10a và 10b
− logspace(a ,b) cho phép thiết lập vector dòng với 50 giá trị cách đều nhau
trong tọa độ logarit giữa các deccades 10a và 10b
3.2 Thiết lập ma trận từ vector cho trước
Giả sử cho trước một vector cột v, ta có thể nhân đôi số phần tử của vector tạo
ra một ma trận
Nhập lệnh như sau: U=v(:,[1 1])
Cho một vector dòng : U=v([1 1],:)
Nhân vector lên nhiều lần ta làm như sau: U=v(:,ones(n)); U=v(ones(n),:) 3.3 Thiết lập ma trận từ ma trận cho trước
+ repmat(A,m,n) - ma trận thiết lập là bản sao từ ma trận gốc.
+ reshape(A,m,n) - định dạng lại ma trận thiết lập
3.4 Gọi lại các phần tử của ma trận
Muốn gọi lại phần tử nào đó của ma trận A ta nhập một số lệnh như sau: A(x,y) A(j), A(1:n,k), A(x,:), A(:,y)…
3.5 Các ma trận
a) Ma trận rỗng : nhập lệnh như sau: X=[]
b) Ma trận không: nhập lệnh như sau: zeros(m,n)
c) Ma trận đơn vị: nhập lệnh như sau: ones(n) hoặc ones(m,n)
d) Ma trận các số nguyên: nhập lệnh như sau: magic(N) (N>0,trừ N=2) e) Ma trận đường chéo: nhập lệnh như sau: eye(n)
f) Ma trận các số ngẫu nhiên: nhập lệnh như sau: randperm(n)
g) Ma trận hadamard: nhập lệnh như sau: hadamard(n)
II Bài thực hành:
Bài 3.1
Trang 12a) Hãy thiết lập một ma trận A(coi là ma trận gốc) với các phần tử bất kỳ và với
số dòng bằng số ký tự của họ và số cột bằng số ký tự của tên người giải
Trang 142.1897 7.3142 5.1515 14.0958 1.0422
CHƯƠNG 4
XỬ LÝ SỐ LIỆU
I Cơ sở lý thuyết:
4.1 Xác định các phần tử cực đại và cực tiểu của mảng số liệu
+ max(A) – nếu A là vector, trả lại phần tử lớn nhất của A; hoặc A là ma trận thì
trả lại vector dòng chứa phần tử lớn nhất
+ min(A) - nếu A là vector, trả lại phần tử nhỏ nhất của A; hoặc A là ma trận thì trả
lại vector dòng chứa phần tử nhỏ nhất
SVTH: Phạm Thanh Huyền 14 Lớp Đ3H1
Trang 15+ max(A,B) – trả lại ma trận cùng kích thước như A và B với các phần tử tương
ứng lớn nhất của các ma trận này
+ [C,I]=max(A) – trả lại giá trị cực đại của ma trận và chỉ số I của các phần tử này 4.2 Xác định giá trị trung bình, giá trị trung gian và độ lệch chuẩn
+ Mean(A) - nếu A là vector, trả lại giá trị trung bình số học của các phần tử của
mảng Nếu A là ma trận, trả lại vector dòng có chứa các giá trị trung bình của các phần tử của mỗi cột
+ median(A) – trả lại giá trị trung gian
+ std(X) – trả lại độ lệch chuẩn của các phần tử mảng.
+ std(X,flag) – trả lại giá trị như lệnh std(X)
Lệnh corrcoef(x,y) – tra lại ma trạn hệ số tương quan, các dòng là két quả của các
quan sát, các cột là kết qủa của các biến
+ Phương sai
Lệnhcov(x) – trả lại phương sai
4.5 Hàm tương quan hồi quy
a) hàm hồi quy đơn:Nhập lệnh : polyfit(x,y,d)
b) Xác định giá trị hàm hồi quy:nhập lệnh: polyval(c,x)
4.6 hàm nội suy
Hàm nội suy đơn:nhập lệnh: interp1(x,y,xi)
II Bài thực hành:
Bài 4.1 Cho ma trận A (bài toán 3.1),hãy xác định:
a, Các giá trị cực đại của mỗi cột (C1)
>> C1=max(A)
C1 =
3 4 5 6 8
Trang 16b,Các giá trị cực tiểu của mỗi cột (C2)
1Hãy sử dụng các hàm trong Matlab để xác định các đại lượng
1.1 Giá trị trung bình của các đại lượng x1, x2 và y: Xtb1, Xtb2, Y_tb
Trang 171.4 Độ lệch trung bình bình phương của các đại lượng x1, x2 và y.
>> dltbbp_X1=std(x1,1)% do lech trung binh binh phuong cua x1
1.5 Hệ số tương quan của các giá trị quan sát giữa các đại lượng Rx1_y, Rx2_y:
>> RX1_Y=corrcoef(x1,y) %he so tuong quan cua x1 va y
Trang 182.Hãy xây dựng hàm hồi quy thực nghiệm và đánh giá sai số của các hàm:
2.1Bậc hai: y=f(x1); y=f(x2)
>> c1=polyfit(x1,y,2)% he so cua ham hoi quy cua x1 voi y
2.2Hàm tuyến tính: y=f(x1); y=f(x2)
>> c1=polyfit(x1,y,1)% he so cua ham hoi quy cua x1 voi y
Trang 20-1.5 -1 -0.5 0 0.5 1 1.5 -2
xlabel –nhãn trục x; ylabel – nhãn trục y; title – đặt tên tiêu đề cho đồ thị
5.2 Đồ thị với trục tọa độ loga và bán loga
Các lệnh: loglog(x,y) – chia hai trục tọa độ khác nhau
semilogx(x,y) – chia không đều cho trục x
semilogy(x,y) – chia không đều cho trục y
5.3 Vẽ đồ thị trong tọa độ cực và đồ thị bậc thang
a) Đồ thị trong tọa độ cực.
Lệnh polar(p,d) – p do bằng radian, d là hàm củabiến p
b) Đồ thị bậc thang.
SVTH: Phạm Thanh Huyền 20 Lớp Đ3H1
Trang 21Lệnh stairs(x,y)
5.4 Đồ thị ba chiều 3D
a) Lệnh tạo lưới bề mặt và tạo lưới biên dạng.
Lệnh meshgrid – tạo lưới bề mặt.
Thực hiện như sau: [X,Y]=meshgrid(u,v) – X,Y là các ma trận ; u,v là các
xlabel('truc x'); ylabel('truc y');
title(' Ve ham so y=f(x) voi lenh plot')
Trang 22>> fplot('sqrt(2+3*x)*log(1+3*x.^2)',[1.1 5],'.-g'),grid;
xlabel('truc x'); ylabel('truc y');
>> title(' Ve ham so y=f(x) voi lenh fplot')
Trang 231.5 2 2.5 3 3.5 4 4.5 5 0
5
10
15
x sqrt(2+3 x) log(1+3 x2)
d) Vẽ đồ thị trên với kiểu đường đứt đỏ, điểm dấu hình tam giác màu đen:
>> x=1.1:0.15:5.0;
y=sqrt(2+3*x).*log(1+3*x.^2);
plot(x,y, 'r ',x,y,'k>')
xlabel('truc x'); ylabel('truc y');
title(' Ve ham so y=f(x) voi lenh plot')
Trang 25Do thi voi lenh y=loglog(x,y)
b)Với trục y chia theo tỷ lệ cơ số 10
Trang 26Do thi voi lenh y=semilogx :Sinh vien – Pham Thanh Huyen-D3H1
c) Với trục x chia theo tỷ lệ cơ số 10
Trang 27>> phi=0:0.01:5*pi; d=exp(cos(phi))-2*cos(4* phi);
>> polar(phi,d)
title(' Do thi ham d ve trong toa do cuc :Sinh vien –Pham Thanh Huyen-D3H1')
Trang 281 2 3 4 5
Trang 2920
40 0
20 40
20 40 -10 0 10
0
20
40 0
20 40
20 40 -10 0 10
CHƯƠNG VI GIẢI PHƯƠNG TRÌNH VÀ TÍNH TOÁN TỐI ƯU
Trang 30I Cơ sở lí thuyết:
6.1 Khái quát chung:
Việc giải phương trình và tính toán tối ưu được thực hiện nhờ sự trợ giúp của
một công cụ hết sức lợi hại là Optimization Toolbox của Matlab Công cụ này cung cấp cho ta rất nhiều thuật toán khác nhau trong việc tìm lơi giải tối ưu
+ Giải phương trình tuyến tính và phi tuyến
+ Xây dựn các đường cong thực nghiệm tuyến tính và phi tuyến
+ Tìm cực trị của các hàm mục tiêu
+ Thiết lập và khôi phục những lựa chọn tối ưu
6.2 Giải phương trình:
1.Tìm nghiệm phương trình dạng đa thức
Ta có thể giải phương trình bậ k bất kì 1 cách đơn giản bằng lệnh roots(p) với p
là vector các hệ số đa thức
2 Giải phương trình bằng phương pháp đồ thị
Trước hết ta dung lệnh plot để vẽ đồ thị vế trái phương trình, sau đó dùng ginput
để xác định nghiệm Dấu chữ thập xuất hiện ngay sau khi lệnh ginput được gõ, ta
cần dịch chuyển nó đến các vị trí của điểm cắt đồ thị với trục hoành và ấn chuột trái Để đọc kết quả ta dung lệnh sau: nx=length(x);w=1:nx-1;
X(find(f(w))).*f(w+1)If(w)==0
3.Giải hệ phương trình tuyến tính
Áp dụng phép tính ma trận: Ax=b
X=A\b
4.Giải phương trình phi tuyến vô hướng
Ta dung lệnh fzero: x=fzero(‘function’,x0) trong đó x0 là xuất phát điểm dự đoán trước, việc chọn x0 rất quan trọng
5.Giải hệ phương trình phi tuyến
Để giải hệ này ta dung lệnh fsolve(‘function’,x0,option) trong đó function là hàm
m.file được thiết lập trên cơ sở hệ phương trình, x0 là xuất phát điểm dự tính trước Trình tự thực hiện bài toán như sau:
+ Viết m.file và cất giữ vào dữ kiện để giải hệ phương trình
+ Cho các giá trị ban đầu x0
SVTH: Phạm Thanh Huyền 30 Lớp Đ3H1
Trang 31+ Giải hệ bằng lệnh fsolve
6.Giải phương trình của hàm vectơ
Phương trình này được giải dưới sự giúp đỡ của lệnh:
fsolve(‘function’,x0,options) Lệnh fsolve cho phép giải bài toán với nhiều thuật toán khác nhau
Trang 33x(1)*x(2)-x(1)-x(2)<=-1.5
x(1)*x(2)>=-10
Chương trình Matlab như sau:
Bước 1: viết hàm m.file cho hàm f(x):
Trang 34[x,y,h]=fsolve('f2',x0,options)
Norm of First-order Trust-region
Iteration Func-count f(x) step optimality radius
5 18 3.54637e-026 2.27883e-007 5.67e-013 1.13
Optimization terminated: first-order optimality is less than options.TolFun
Tìm cực trị của hàm f(x) trong khoảng -2÷2 bằng hàm
fminbndvới nhiều biến ra : f(x)=x^2*(log(x))^2 với x trong khoảng 0.1÷0.5
Chương trình Matlab như sau:
- Bước 1: lập hàm m.file ta gõ tiếp các chuỗi lệnh
Trang 35Bài 7.1: Cho hai đa thức:
Trang 381 0.04s+1
T ransfer Fcn3
1 s+1
T ransfer Fcn2
1 0.35s+1 Transfer Fcn1
10 0.1s+1 Transfer Fcn Subtract
Step
Scope
0.8986 Display
Kết quả là : U(t)=0,8986.
CHƯƠNG IX GIẢI MẠCH ĐIỆN
Bài 9.1 :
Cho mạch điện một chiều (hình vẽ) với suất điện động Ei và các điện trở:
SVTH: Phạm Thanh Huyền 38 Lớp Đ3H1
Trang 39Ri (Ω) cho trong bảng 9.1.(dữ liệu lấy theo chữ cái đầu của tên người giải) Hãy áp dụng chương trình Matlab xác định các giá trị dòng điện chạy trong mạch.
%Ma tran dien ap
I=Z\U;%dong dien nhanh
disp(' I1 I2 I3 I4 I5')
fprintf('%g'), disp([I(1) I(2) I(3) I(4) I(5)])
I1 I2 I3 I4 I5
20.4596 -36.0921 28.3396 13.7175 -26.4246
Bài 9.2 Giải bài toán ví dụ 9.1 với các tham số phức bảng 9.2.
>> R=[9+6.3i 5.2+7.2i 6.2+8.2i 5.4+6i 0];
E=[142+65i 176+132i 0 0 0];
Z=[1 1 1 1 1;R(1) -R(2) 0 0 0;0 R(2) -R(3) 0 0;0 0 R(3) -R(4) 0;0 0 0 R(4) -R(5)];
%Ma tran dien tro mach vong
U=[0;E(1)-E(2);E(2)-E(3);E(3)-E(4);E(4)-E(5)]; %Ma tran dien ap
I=Z\U; %dong dien nhanh
Số liệu bảng 9.2 như sau:
Um=120V; thetau=150; Zm=4.33Ω; thetaz=650;
>> Um=120;
thetau=15;
Trang 41disp(' P,W Q,VAr S,VA')
>> disp('xac ding gia tri hieu dung cua dien ap URL Cac thanh phan Ur va UL');R=4.67;
L=22*10^-3;
Rsh=0.15;
Ish=1.40;