Tìm hàm xấp xỉ khớp với dãy điểm thực nghiệm

Một phần của tài liệu bai giang matlab full (Trang 40 - 47)

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 fitfittype.

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ệmy-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]; (adsbygoogle = window.adsbygoogle || []).push({});

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ừ (adsbygoogle = window.adsbygoogle || []).push({});

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

Một phần của tài liệu bai giang matlab full (Trang 40 - 47)