MATLAB LECTURE - Trang 36

16/09/2015

5

Nguyen Quang Hoang

Department of Applied Mechanics

Nội suy bằng đa thức

17

Lệnh polyfit(x,y,n) cho ta một đa thức bậc n mà đồ thị của nó là đường
gần với đường tạo ra khi nối các điểm cho bởi bộ số liệu, còn nội suy đa
thức cũng cho ta một đường cong nhưng đi qua các điểm số liệu đó. Có
nhiều phương pháp để tạo ra đa thức đi qua các điểm cho như phương
pháp nội suy theo công thức Lagrange, phương pháp Newton, phương
pháp

Neville,

phương pháp nội suy với đường spline bậc 3, .... Chi tiết

về các phương pháp này có thể xem trong các tài liệu về giải tích số và
phương pháp số.

Trong

phần này chỉ trình bày việc sử dụng các lệnh

interp

của Matlab

để thực hiện tìm các giá trị nội suy từ các số liệu sẵn có. Bài toán đặt ra
là cho

biết các giá trị tương ứng của hai đại lượng x và y như trong bảng

số liệu

x

x1

x2

x3

xn

y

y1

y2

y3

yn

Nguyen Quang Hoang

Department of Applied Mechanics

Nội suy bằng đa thức

18

Hãy tìm giá trị của biến y* ứng với giá trị nào đó của biến x* với x1<= x*
<= xn. Bài toán này trong Matlab được giải quyết dễ dàng với lệnh
interp. Cách gọi lệnh này như sau:

y_star = interp1(x,y,x_star)

Nếu x là véctơ gồm các phần tử nguyên từ 1 đến n (x = 1:n), với n =
length(y), thì ta có thể gọi lệnh

y_star = interp1(y,x_star)

Để nói rõ hơn phương pháp nào được sử dụng trong việc nội suy này ta
sử dụng cú pháp

y_star = interp1(x, y, x_star, method)

với method được chọn là một trong các phương pháp sau

'nearest' -

nội suy theo lân cận gần nhất

'linear' -

nội suy tuyến tính

'spline' -

nội suy sử dụng đường spline bậc 3

'pchip' -

nội suy bậc 3 từng đoạn

'cubic' -

tương tự như 'pchip'

Nguyen Quang Hoang

Department of Applied Mechanics

Nội suy bằng đa thức

19

Nếu giá trị x* nằm ngoài khoảng [x1, xn], khi đó ta gọi phép tính giá trị y*
= y(x*) là phép tính ngoại suy và sử dụng lệnh với cú pháp:

y_star = interp1(x, y, x_star, method, 'extrap')

Sau đây xét ví dụ:

>> x = 1:20; y = sin(x);
>> x_star = 1.5;
>> y_star = interp1(x,y, x_star)

y_star = 0.8754

>> y_star = interp1(x,y, x_star, 'linear')

y_star = 0.8754

>> y_star = interp1(x,y, x_star, 'cubic')

y_star = 0.9008

>> y_star = interp1(x,y, x_star, 'nearest')

y_star = 0.9093

>> y_star = interp1(x,y, x_star, 'spline')

y_star = 1.0200

Nguyen Quang Hoang

Department of Applied Mechanics

Nội suy bằng đa thức

20

Như thế các phương pháp nội suy khác nhau sẽ cho ta các kết quả khác
nhau. Để thấy rõ hơn kết quả của các phương pháp nội suy, ta xét ví dụ
sau

x = 0:8; y = sin(x); plot(x,y,'-ko'), hold on
xi = 0:0.1:8;
yi1 = interp1(x,y, xi, 'linear');
yi2 = interp1(x,y, xi, 'cubic');
yi3 = interp1(x,y, xi, 'spline');

plot(xi,yi1,'-k','linewidth',1.5)
plot(xi,yi2,'-r','linewidth',1.5)
plot(xi,yi3,'-b','linewidth',1.5), grid on

xlabel('x'), ylabel('y'), axis([0 8, -1.1 1.1])
legend('points','linear','cubic','spline')

Liên Kết Chia Sẽ

** Đây là liên kết chia sẻ bới cộng đồng người dùng, chúng tôi không chịu trách nhiệm gì về nội dung của các thông tin này. Nếu có liên kết nào không phù hợp xin hãy báo cho admin.