Trong mục §1.4 ta đã làm khớp bằng hàm đa thức bậc n nhờ lệnh
polyfit(x, y, n). Trong mục này sẽ đề cập đến một cách làm khác nhờ các
hàm fit và fittype.
Cú pháp: fit(xdata,ydata,‘ltype’) ; fittype(’ltype’)
hoặc fittype(’expr’)
trong đó ltype là một dạng hàm có sẵn trong thư viện mẫu, đó là các hàm
Đa thức y = với n là bậc của đa thức, 1 ≤ n ≤ 9 ; ký hiệu
‘polyn’.
Hàm mũ y = aebx hoặc y = aebx + cedx ; ký hiệu ‘exp1’ hoặc ‘exp2’.
Hàm lũy thừa y = axb hoặc y = a + bxc ; ký hiệu ‘power1’ hoặc ‘power2’.
Hàm hữu tỷ
trong đó bậc n của tử thức 0 ≤ n ≤ 5 , bậc m của mẫu thức 1 ≤m ≤ 5 với hệ số của xm luôn bằng 1 ; ký hiệu ‘ratnm’.
11 1 n n i i i p x + − = ∑
Hàm tổng của sin
trong đó n là số từ trong chuỗi và 1 ≤ n ≤ 8 ; ký hiệu ‘sinn’.
Hàm chuỗi Fourier
với n là số thành phần điều hòa trong chuỗi , 1 ≤ n ≤ 8 ; ký hiệu ‘fouriern’.
Hàm Gauss , 1 ≤ n ≤ 8 ; ký hiệu ‘gaussn’.
Hàm phân phối Weibull ; ký hiệu ‘weibull’.
Hàm ftype = fittype(‘expr’) tạo nên hàm xấp xỉ từ biểu thức expr do ta tạo nên.
Để tạo nên hàm tuyến tính đối với các hệ số, chẳng hạn a1cos(x) + a2 ta làm như sau:
ftype = fittype((‘cos(x)’, ‘1’) , ‘coeff’ , (‘a1’ , ‘a2’));
Để tạo nên hàm phi tuyến, chẳng hạn y = aebx + c ta phải thực hiện:
opts = fitoptions(‘Method’ , ‘Nonlinear’ , ‘Normalize’ , ‘On’);
% lựa chọn phi tuyến và chuẩn hóa số liệu
ftype = fittype(‘a*exp(b*x)+c’ , ‘options’ , opts); f1 = fit(x , y , ftype)
Ta có thể đánh giá sai số của việc xấp xỉ bằng cách tính tổng bình phương các sai lệch giữa giá trị y-thực nghiệm và y-tính theo công thức xấp xỉ SSE = Σ(ytn - ytính)2.
Thí dụ 43: Tìm hàm xấp xỉ là đa thức bậc hai và tính SSE cho dãy số
liệu thực nghiệm (x, y theo cột): x=[0: 0.25/15: 0.25] ;
y=[0 1.55 3.25 5.3 7.55 10.2 13.05 16.15 19.5 23.15 27.05 31.3 35.75 40.55 45.55 50.8]
Thí dụ 44: Tìm hàm số dạng y = asinbx khớp với dãy điểm sau: x = [0:pi/10:pi];
y=[.0476 .2443 .5689 .8961 1.0344 .9821 1.0298 .7206 .5584 .3717 -0.0980]
Thí dụ 45: Tìm hàm mũ dạng aebx + c theo dữ liệu sau:
x = (1900:10:1990);
y = [75.995 91.972 105.711 123.303 131.669... 150.697 179.323 203.212 226.505 249.633 ]
Chú ý: Trong MATLAB có chứa hộp Curve Fitting Toolbox, nó cho phép ta bằng đồ thị để tìm ra dạng thích hợp của đường cong dùng làm khớp dãy điểm và đánh giá được sai số. Mở hộp Curve Fitting Tool bằng lệnh
cftool. Trước khi mở hộp thì các dữ liệu x , y đã được nhập theo cột vào
cửa sổ làm việc của MATLAB. Ta sử dụng lại dữ liệu của thí dụ 44.
Thí dụ 46:
>> x =[0:pi/10:pi]';
>> y=[.0476 .2443 .5689 .8961 1.0344 .9821 1.0298 .7206 .5584 .3717 -0.0980]’;
Ta thấy xuất hiện hộp thoại Curve Fitting Tool. Nháy vào khung Data sẽ xuất hiện thêm hộp thoại Data.
Trong khung Xdata ta nháy vào mũi tên xuống rồi chọn biến x; Trong khung Ydata ta nháy vào mũi tên xuống rồi chọn biến y;
Trong phần Preview ta được đồ thị của tập điểm (x , y), chúng gợi cho ta cách chọn hàm thích hợp, ở đây chúng giống như một nhịp của đường hình sin.
Ta chọn vào khung Create data set để đưa dữ liệu vào.
Sau đó ta trở lại hộp thoại Curve Fitting Tool và nháy vào khung Fitting
sẽ xuất hiện hộp thoại Fitting. Chọn vào New fit để khởi động.
Trong khung Type of fit chọn Sum of Sin Functions và chọn dạng đầu tiên asin(bx+c)
Chọn vào Apply để được kết quả. Trong khung Results ta được:
Các hệ số của hàm cùng với khoảng tin cậy 95% của chúng a = 1.031; b = 1.019; c = -0.007 tức là đường cong có dạng y = 1.031sin(1.019x – 0.007) ;
Chất lượng của việc xấp xỉ thể hiện ở SSE = 0.04172 (tổng bình phương độ lệch giữa y-thực nghiệm và y-tính theo hàm), hệ số xác định R2 = 0.9738 (càng gần 1 càng tốt), sai số tiêu chuẩn RMSE = 0.0722
Trong hộp Curve Fitting Tool là đồ thị của hàm tìm được cùng với tập các điểm đã cho.
Thí dụ 47: Tìm các thành phần điều hòa của tín hiệu được cho bởi dữ liệu
sau trong một chu kỳ 2π. x=[-pi:pi/12:pi];
y=[.04328 .05613 .07353 .09536 .1237 .1604 .2080 .2698 .3535 .4584 .5945 .7711 1.0000 1.2969 1.6820 2.1815 2.8292 3.7062 4.8066 6.2399 8.0849 10.4860 13.5993 17.8142 23.1040]
§5. GIẢI PHƯƠNG TRÌNH VÀ HỆ PHƯƠNG TRÌNH5.1. Giải phương trình f(x) = 0 5.1. Giải phương trình f(x) = 0
Với phương trình tuyến tính ta sử dụng hàm roots(f) để xác định nghiệm thực va ảo của phương trình (xem lại phần 1.1).
Ngoài ra có thể sử dụng lệnh fzero(@myfun,x0) cho ta nghiệm của phương trình gần với giá trị xuất phát x0; @myfun là một hàm trong M-file hay một hàm không tên. Kết quả là một điểm gần với điểm mà hàm đổi dấu hoặc là NaN (Not a Number) nếu quá trình tìm nghiệm không hội tụ.
Có thể thay x0 bởi một khoảng chứa nghiệm.
Thí dụ 48: Tìm nghiệm của phương trình x3 – 2x -5 = 0. Ta xuất phát từ
x0 = 2.
Thí dụ 49: Giải phương trình f(x) = 0 với f(x) là hàm trong M-file có tên là
humps f(x)=1/((x-0.3)2 + 0.01) + 1/((x-0.9)2 + 0.04) – 6 (xem thí dụ 25).
Thí dụ 50: Kiểm tra điều kiện trái dấu của hàm f(x) = 2 - log10(x) – x trên