Chương 3 Các công cụ tốn học thơng thường của Matlab
3.3. Tối ưu các hàm số
3.3.2. Tìm điểm của hàm số
Sử dụng hàm fzero
z = fzero('fun',x,tol) Mô tả
Hàm fzero('fun',x, tol) tìm điểm mà tại đó hàm fun nhận giá trị 0
Trong lệnh này :
fun là một chuỗi chỉ ra tên của tệp dùng để định nghĩa hàm số thực
Nếu x là một giá trị vơ hướng thì fzero sẽ tìm ra điểm 0 gần với giá trị của x của hàm được định nghĩa
Nếu x là một véc tơ có 2 phần tử, fzero sẽ tìm ra điểm khơng nằm trong khoảng giá trị giữa hai phần tử đó
tol : quy định sai số tương đối của nghiệm tìm ra. Nếu khơng quy định giá trị
tol, máy sẽ nhận giá trị sai số tương đối mặc định
Ví dụ
Tìm nghiệm của phương trình X3-2X-5=0 ở gần điểm x=2 Trước hết ta phải viết một M.file định nghĩa hàm f:
function y = f(x) y = x.^3-2*x-5;
Để xác định nghiệm gần x=2 ta gọi lệnh sau trong môi trường Matlab: z = fzero('f',2)
z = 2.0946
Chú ý:
hàm fzero xác định điểm mà tại đó đồ thị hàm số cần khảo sát cắt trục hồnh, khơng phải là khi đồ thị tiếp xúc với trục hoành
3.3.3. Sử dụng hàm fmin
Dùng để xác định cực tiểu của hàm 1 biến
Cú pháp
x = fmin('fun',x1,x2)
x = fmin('fun',x1,x2,options)
Mô tả
x = fmin('fun',x1,x2)
Trong đó fun là chuỗi chỉ tên hàm khảo sát được định nghĩa trong tệp M.file sẽ đưa ra giá trị x tại đó hàm fun sẽ đạt giá trị cực tiểu cục bộ trong khoảng khảo sát x1<=X<=x2 . trong trường hợp này chúng ta khơng đưa vào tuỳ chọn option, chế độ tính tốn sẽ dựa trên các giá trị mặc định của thông số điều khiển.
x = fmin('fun',x1,x2,options) Cho phép chúng ta xác định các thông số
options(1) -- Nếu giá trị của nó khác 0, máy sẽ hiển thị các kết quả tính
trong quá trình tìm cực tiểu, giá trị mặc định bằng 0.
options(2) -- quy định sai số tương đối. Giá trị mặc định là 1.e-4. options(14) -- quy định số bước tính tối đa. Giá trị mặc định là 500.
Ví dụ
Xác định cực tiểu của hàm f= X3-2X-5=0 ở trong khoảng từ 0 đến 2. Trước hết ta phải viết một M.file định nghĩa hàm f:
function y = f(x) y = x.^3-2*x-5; Để xác định cực tiểu ta gọi hàm x = fmin('f', 0, 2) Sẽ đưa ra kết quả x = 0.8165
Và giá trị của hàm tại điểm cực trị là
y = f(x) y = -6.0887 3.3.4. Sử dụng hàm fmins Cú pháp x = fmins('fun',x0) x = fmins('fun',x0,options) Mơ tả
x = fmins('fun',x0) Trong đó x0 là một véc tơ các giá trị thực sẽ trả kết quả
là véc tơ x xác định cực tiểu cục bộ cuả hàm nhiều biến định nghĩa bằng Mfile 'fun' gần điểm x0 . Các thông số điều khiển q trình tính tốn sẽ nhận giá trị mặc định
x = fmins('fun',x0,options) Cho phép ta ấn định giá trị của các thơng số
điều khiển q trình tính tốn. ý nghĩa của các thơng số này cũng tương tự như ở hàm fmin
Thí dụ
Hàm có cực tiểu tại (1,1) và giá trị cực tiểu =0. Điểm ước lượng ban đầu là (- 1.2,1). M-file banana.m sẽ dùng để định nghĩa hàm trên.
function f = banana(x) f = 100*(x(2)-x(1)^2)^2+(1-x(1))^2; Câu lệnh [x,out] = fmins('banana',[-1.2, 1]); x out(10) Sẽ cho kết quả là x = 1.0000 1.0000 ans = 165 Các chú ý:
để quá trình tìm kiếm cực trị hội tụ, hàm nhiều biến phải thoả mãn các yếu tố sau: Hàm khơng có điểm gián đoạn
Hàm không trả ra các giá trị phức, inf hoặc NaN Cần chọn điểm xuất phát tìm kiếm hợp lý
Các biến của hàm cần chuyển đổi sao cho các giá trị của biến gần tương đương nhau về độ lớn
Để giải các bài tốn tìm cực trị có ràng buộc ta phải sử dụng các hàm 'penalty'
3.4. Tích phân và đạo hàm các hàm số:
3.4.1. Tích phân các hàm số
a, Sử dụng hàm trapz
Tích phân số các hàm số bằng phương pháp hình thang
Cú pháp
Z = trapz(X,Y) Z=trapz(Y)
Mô tả
Z = trapz(X,Y) tính tích phân của hàm đưa ra bởi véc tơ y phụ thuộc vào
Z = trapz(Y) tính tích phân của hàm đưa bới véc tơ y với trục hồnh có
khoảng chia là đơn vị. Trong trường hợp trục hoành được chia đều với khoảng cách khác đơn vị, giá trị của tích phân sẽ là giá trị của hàm nhân với trị số của chiều dài khoảng chia.
Ví dụ
Giá trị chính xác của hàm là 2.
Để tính gần đúng tích phân này bằng phương pháp số ta sử dụng các câu lệnh sau:
X = 0:pi/100:pi; Y = sin(x);
Sau đó 2 câu lệnh sau:
Z = trapz(X,Y) Và Z = pi/100*trapz(Y)
Sẽ đưa ra cùng kết quả:
Z =
1.9998
+ Tích vi phân bằng hàm int - Nếu S là biểu thức Symbolic thì:
int(S) tích phân khơng xác định của S theo biến mặc nhiên (muốn biết biến mặc nhiên này ta dựng hàm findsym).
int(S,v) tích phân khơng xác định của S theo v. int(S,a,b) tích phân xác định của S trên cận [a,b]
int(S,v,a,b) tích phân xác định của S theo v trên cận [a,b]
Ví dụ: Tính
>>syms x
>>S=2*x^2*(19+12*x^2)/(7*(x^2+1))
>>y=int(S,x,0,1) % tích phân S theo x trên cận [0,1] >>subs(y) % đổi sang kiểu số
b, Sử dụng hàm cumtrapz
Cú pháp
Z = cumtrapz(Y) Z = cumtrapz(X,Y)
Mô tả
Z = cumtrapz(Y) Tính tốn tích phân số tích luỹ của hàm đưa ra bởi véc
Z = cumtrapz(X,Y) Tính tốn tích phân số tích luỹ của hàm đưa ra bởi
véc tơ y với đối số đưa ra bởi véc tơ x . X và y cần có cùng chiều dài. Hoặc x là véc tơ cột và y là mảng 2 chiều Ví dụ: Nếu Y = [0 1 2; 3 4 5] cumtrapz(Y,1) Cho kết quả là ans = 0 1.0000 2.0000 1.5000 2.5000 3.5000 và cumtrapz(Y,2) ans = 0 0.5000 2.0000 3.0000 3.5000 8.0000 c, Sử dụng hàm quad, quad8 Cú pháp: q = quad('fun',a,b) q = quad('fun',a,b,tol) q = quad8(...) Mô tả
Các hàm Quad cho phép tính diện tích bên dưới đồ thị của hàm số bằng các phương pháp số. Đó chính là tích phân: b a dx ) x ( F q
q = quad('fun',a,b) trả kết quả của phép tích phân số của hàm 'fun' trong khoảng giới hạn giữa a và b. 'fun' cần phải trả ra các giá trị một véc tơ khi giá trị đầu vào là một véc tơ.
q = quad('fun',a,b,tol) cho phép quy định sai số tương đối của phép tích phân. Giá trị mặc định của nó là 1.e-3. Hãy sử dụng véc tơ 2 phần tử tol = [rel_tol abs_tol], để quy định đồng thời cả sai số tương đối và tuyệt đối.
Chú ý: Hàm Quad và Quad8 đều sử dụng phương pháp simson để tính tích phân,
Trong đó hàm quad8 sử dụng phương pháp bậc cao.
3.4.2. Đạo hàm các hàm số
Tính tốn độ lệch và xấp xỉ các đạo hàm Cú pháp Y = diff(X) Y = diff(X,n) Y = diff(X,n,dim) Mô tả
Y = diff(X) tính ra độ lệch giữa các phần tử kề nhau của véc tơ X.
Nếu X là véc tơ kết quả đưa ra là véc tơ ít hơn X 1 phần tử:
[X(2)-X(1) X(3)-X(2) ... X(n)-X(n-1)]
Nếu X là ma trận , hàm diff(X) đưa ra kết quả là ma trận cột các độ lệch :
[X(2:m,:)-X(1:m-1,:)]
Y = diff(X,n) Đưa ra véc tơ độ sai lệch bậc n : như vậy diff(X,2) cho ra cùng kết quả
với diff(diff(X)).
Chú ý
Giá trị diff(y)./diff(x) đưa ra kết quả đạo hàm của hàm số y(x) Ví dụ: x = [1 2 3 4 5]; y = diff(x) y = 1 1 1 1 z = diff(x,2) z = 0 0 0
CHƯƠNG 4: LẬP TRÌNH ỨNG DỤNG TRONG MATLAB