Nèi ®iÓm mét chiÒu

Một phần của tài liệu Tài liệu MatLab (Trang 105 - 110)

Như đã giới thiệu thì nối điểm được định nghĩa như là một phương pháp dự đoán giá trị của hàm giữa những điểm cho tr−ớc. Nối điểm là một công cụ hữu hiệu khi chúng ta không thể nhanh chóng tiính đ−ợc giá trị của hàm tại các điểm trung gian. Ph−ơng pháp này đ−ợc sử dụng rộng rãi đối với dữ liệu là giá trị của các phép đo thực nghiệm hoặc là kết quả của các chuỗi tính toán dài. Có thể ví dụ đơn giản nhất của việc nối điểm chính là phương pháp vẽ từng điểm của MATLAB, tức là vẽ những đoạn thẳng nối những điểm dữ liệu liên tiếp để tạo lên một đồ thị.

Đây là ph−ơng pháp nối điểm tuyến tính, nó cho rằng các giá trị của hàm nằm giữa hai

điểm cho trước sẽ rơi vào khoảng giữa hai đầu của đoạn thẳng nối hai điểm đó. Hiển nhiên là khi số l−ợng các điểm dữ liệu tăng lên và khoảng cách giữa chúng giảm đi thì ph−ơng pháp nối điểm tuyến tính càng trở lên chính xác.

>> x1 = linspace(0,2*pi,60);

>> x2 = linspace(0,2*pi,6);

>> plot(x1,sin(x1),x2,sin(x2),'-')

>> xlabel('x'),ylabel('sin(x)')

>> title('Linear Interpolation')

H×nh 15.3 H×nh 15.3 H×nh 15.3 H×nh 15.3

Cả hai đồ thị cùng vẽ một hàm sine nh−ng đồ thị 60 điểm thì mịn hơn đồ thị 6 điểm.

Cũng giống nh− ph−ơng pháp xấp xỉ hoá đ−ờng cong, ở đây chúng ta cũng phải thực hiện một số lựa chọn, có rất nhiều cách để nối hai điểm, tuỳ thuộc vào giả định mà chúng ta

đã lựa chọn. Hơn nữa chúng ta có thể nối các điểm trong không gian không phải là một chiều. Nói nh− thế nếu bạn có dữ liệu phản ánh một hàm phụ thuộc vào hai biến z=f(x,y), bạn có thể nối giá trị nằm giữa hai điểm có x và y khác nhau để tìm ra giá trị trung gian của hai điểm. MATLAB cung cấp một số hàm để nối là : interp1 interp1 interp1 interp1 nối các dữ liệu một chiều, interp2

interp2 interp2

interp2 nối các dữ liệu hai chiều, interp3interp3interp3interp3 nối các dữ liệu ba chiều, interpninterpninterpninterpn nối các dữ liệu có số chiều lớn hơn 3.

Sau đây chúng ta sẽ xem xét các dữ liệu một và hai chiều. Để minh hoạ việc nối dữ liệu một chiều, hãy xét ví dụ sau, khả năng của thính giác, ví dụ nh mức âm thanh bé nhất hay còn gọi là ngưỡng nghe của tai ngời thay đổi theo tần số, dữ liệu do người thống kê được cho nh− sau:

>> Hz = [20:10:100 200:100:1000 1500 2000:1000:10000];

>> % Frequencies in Hertz

>> spl = [76 66 59 54 49 46 43 40 38 22 ...

14 9 6 3.5 2.5 1.4 0.7 0 -1 -3 ...

-8 -7 -2 2 7 9 11 12];

>> % sound pressure level in dB

Ng−ỡng nghe đ−ợc chuẩn hoá bằng 0dB tại tần số 1000Hz, bởi vì tần số trải trong một dải rất rộng nên khi vẽ các điểm dữ liệu chúng ta logarithm hoá trục x.

>> semilogx(Hz,spl,'-o')

>> xlabel('Frequency, Hz')

>> ylabel('Relative Sound Presure Level1, dB')

>> title('Threshold of Human Hearing')

Dựa vào hình 15.4 ta thấy tai người nhạy cảm hết đối với các âm thanh trong khoảng 3kHz. Dựa vào các số liệu này, chúng ta hãy dự đoán ng−ỡng nghe ở tần số 2,5kHz bằng một vài cách khác nhau.

>> s = interp1(Hz,spl,2.5e3) %linear interpolation s =

-5.5000e+000

>> s = interp1(Hz,spl,2.5e3,'linear') %linear interpolation again s =

-5.5000e+000

>> s = interp1(Hz,spl,2.5e3,'cubic') % cubic interpolation s =

-5.8690e+000

>> s = interp1(Hz,spl,2.5e3,'spline') % spline interpolation s =

-5.8690e+000

>> s = interp1(Hz,spl,2.5e3,'nearest')% nearest-neighbor s =

-8

Hãy để ý đến sự khác nhau trong các kết quả, hai giá trị đầu tiên trả về một cách chính xác giá trị đ−ợc vẽ ở trên hình tại tần số 2,5kHz bởi vì MATLAB đã nối các điểm một cách tuyến tính giữa các điểm dữ liệu trên đồ thị các đường cong đa thức, ví dụ như đa thức bậc 3 sẽ xấp xỉ hoá các điểm trên đồ thị theo các cách khác nhau, kết quả là các đường cong này tương đối phù hợp với các dữ liệu mà nó đi qua trên đồ thị nhưng khác biệt khá xa so với ph−ơng pháp nối bằng đ−ờng thẳng.

H×nh 15.4 H×nh 15.4 H×nh 15.4 H×nh 15.4

Vì vậy bạn chọn cách nào để giả quyết một bài toán cho trước?, trong nhiều trường hợp thì chỉ cần nối một cách tuyến tính là đủ, trong thực tế thì đó chính là phương pháp mặc định khi các đ−ờng cong càng gần với các đoạn thẳng thì càng kém chính xác nh−ng ng−ợc lại tốc độ tính toán nhanh, điều này đặc biệt quan trọng khi tập dữ liệu lớn. Một phương pháp tiêu tốn nhiều thời gian, cho ra kết quả đẹp mắt nh−ng không hiệu quả. Trong thực tế một trong những tác dụng chủ yếu của ph−ơng pháp nối điểm bằng hàm bậc 3 hoặc cao hơn là

để mịn hoá dữ liệu, có nghĩa là cho trước một tập dữ liệu ta có thể dùng phương pháp này

để tính ra giá trị của hàm ở những thời điểm nhất định bất kỳ. Ví dụ:

>> Hzi = linspace(2e3,5e3); % look closely near minimum

>> spli = interp1(Hz,spl,Hzi,'cubic');% interpolate near minimum

>> i = find(Hz>=2e3&Hz<=5e3);

>> % find original data indices near minimum

>> semilogx(Hz(i),spl(i),'-o',Hzi,spli) % plot old and new data

>> xlabel('Frequency, Hz')

>> ylabel('Relative Sound Presure Level1, dB')

>> title('Threshold of Human Hearing')

>> grid on

H×nh 15.5 H×nh 15.5 H×nh 15.5 H×nh 15.5

Trên hình 15.5 đ−ờng gạch gạch sử dụng ph−ơng pháp nối điểm tuyến tính, đ−ờng liền nét là một hàm bậc 3, còn những điểm dữ liệu gốc đ−ợc đánh dấu bởi chữ o. Bằng cách nâng cao độ phân giải trên trục tần số và sử dụng đường bậc 3 thì các số liệu về ngưỡng nghe mà chúng ta dự đoán đ−ợc sẽ mịn hơn.

Cần chú ý rằng độ dốc của đường bậc 3 không thay đổi một cách đột ngột khi đi qua

điểm dữ liệu nh− là khi sử dụng ph−ơng pháp nối tuyến tính. Với bộ dữ liệu trên chúng ta có thể dự đoán đ−ợc tần số mà tại đó tai ngời nhạy cảm nhất đối với âm thanh.

>> [sp_min,i] = min(spli) % minimum and index of minimum sp_min =

-8.4245e+000 i =

45

>> Hz_min = Hzi(i) % frequency at minimum Hz_min =

3.3333e+003

Tai người nhạy cảm nhất đối với âm thanh có tần số khoảng 3.3kHz. Trước khi đề cập

đến việc xấp xỉ hoá hai chiều thì chúng ta cần nhận rõ hai hạn chế lớn của interp1interp1interp1interp1 là: Thứ nhất khi yêu cầu tính toán ở ngoài khoảng của một biến độc lập. Ví dụ nh interp1 interp1 interp1 interp1(Hz, spl, 1e5) thì sẽ sinh ra kết quả NaN.

Thứ hai là các biến độc lập phải đơn điệu, nghĩa là các biến độc lập phải luôn tăng hoặc là luôn giảm. Trong ví dụ trên của chúng ta thì trục tần số Hz luôn tăng.

Một phần của tài liệu Tài liệu MatLab (Trang 105 - 110)

Tải bản đầy đủ (PDF)

(215 trang)