Tải bản đầy đủ (.pdf) (24 trang)

Giáo trình tính toán khoa học - Chương 5 pps

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (391.54 KB, 24 trang )


111

Chương 5
NỘI SUY VÀ XẤP XỈ HÀM
5.1 NỘI SUY BẰNG ĐA THỨC
Nội suy là cơ sở của nhiều khái niệm trong giải tích số. Đó là công cụ để
khôi phục các đặc trưng liên tục của một hàm số y=f(x) từ các tập hợp dữ liệu rời
rạc do đo đạc hay quan sát được. Khi f(x) là một hàm phức tạp, khó tính toán và
khảo sát thì cũng cần được xấp xỉ bởi một đa thức. Nội suy đơn giản nhất là nội
suy bằng đa thức. Lý do đa thức là một hàm đơn giản: dễ tính đạo đạo hàm và
nguyên hàm…
Nội suy bằng đa thức là tìm một đa thức P(x
i
) bậc n-1 qua n mốc nội suy x
i

với
1,
i n

thỏa mãn P(x
i
)= f(x
i
). Nói cách khác, có thể mô tả tập các điểm dữ
liệu rời rạc của hàm y = f(x) dưới dạng bảng:
x x
1
x
2


x
n

y y
1
y
2
y
n

Sau đó tính các hệ số của đa thức P(x) bậc n-1 thỏa mãn:
y
i
=P (x
i
),
1,
i n

(5.1)
Bây giời ta cần xây dựng công thức tính các hệ số của đa thức P(x). Giả sử
đa thức P(x) được viết dưới dạng tường minh:
P(x) = p
1
x
n-1
+ p
2
x
n-2

+ +p
n-1
x+ p
n

Từ điều kiện (5.1), để tìm các hệ số p
i
của đa thức nội suy P(x) ta có thể giải
hệ phương trình sau đây:
1 2
1 1 2 1 1 1 1
1 2
1 2 2 2 1 1 2
1 2
1 2 1




n n
n n
n n
n n
n n
n n n n n n
p x p x p x p y
p x p x p x p y
p x p x p x p y
 


 

 


   


   



   



112
hay
1 2
1 1 1
1 1
1 2
2 2
2 2 2
1 2
1
1


1

n
n
n
n n
n n n
x x x
p y
p y
x x x
p y
x x x



 
   
 
   
 
   

 
   
 
   
 
   
 
.
Ma trận hệ số của hệ phương trình chính là ma trận Vandermonde của

vector x=( x
1
,x
2
, x
n
). Do đó, để giải hệ phương trình trên có thể sử dụng một câu
lệnh đơn giản trong Matlab:
>> p =vander(x)\y (5.2)
Đa thức nội suy được tính theo công thức trên đơn giản, nhưng khá cồng
kềnh. Tính hệ số của đa thức nội suy dạng tường minh bằng giải hệ phương trình
như trên sẽ mất nhiều công sức tính toán khi số nút nội suy lớn. Do đó ta cần phải
nghiên cứu một số phương pháp tìm đa thức nội suy khác, đơn giản hơn.
Định lý 5.1 (Tính duy nhất của đa thức nội suy). Đa thức nội suy bậc n-1
thoả mãn (5.1) là duy nhất.
Chứng minh.
Thật vậy. Giả sử có 2 đa thức nội suy bậc n-1 là P(x) và Q(x) cùng thoả mãn
điều kiện (5.1). Nghĩa là y
i
=P(x
i
)=Q(x) với
1,
i n

.
Xét đa thức R(x)=P(x)-Q(x). Rõ ràng là:
R(x
i
)=P(x

i
)-Q(x
i
) =0 ,
1,
i n

.
Như vậy R(x) là đa thức bậc không quá n-1 nhưng có tới n nghiệm khác
nhau x
1
,x
2
, x
n
. Do đó R(x) =0 với mọi x, hay P(x)

Q(x). Điều đó chứng tỏ rằng
đa thức nội suy bậc n-1 thỏa mãn (5.1) là duy nhất (đ.p.c.m).
Khi số nút nội suy lớn, thì việc giải hệ phương trình như trên tốn rất nhiều
công sức. Sau đây chúng ta sẽ nghiên cứu một số phương pháp khác để tìm đa
thức nội suy mà không cần giải hệ phương trình.
5.1.1 Đa thức nội suy Lagrange
Trước hết ta xây dựng các đa thức cơ bản như sau:

 











       
1 2 1 1
i
1 2 1 1

L x

i i N
i i i i i i i N
x x x x x x x x x x
x x x x x x x x x x
 
 
    

    
với
1,
i n

.

113
Dễ thấy các đa thức cơ bản có tính chất:


 
0 khi i j
1 khi i j
i j
L x







Do đó nếu đặt P (x) =


n
i
ii
xLy
1
)( (5.3)
thì P(x) là đa thức bậc không quá n thoả mãn P(x
i
)=y
i
, với
1,
i n


. Do đó
P(x) chính là đa thức nội suy bậc n-1 của hàm số đã cho. Đa thức dạng (5.3) còn
gọi là đa thức nội suy Lagrange. Nó có dạng tổng của n đa thức bậc n-1.
Thí dụ 1. Xây dựng đa thức nội suy Lagrange bậc 2 từ bảng dữ liệu có dạng
sau đây:
x x
1
x
2
x
3

y y
1
y
2
y
3

Giải: Ta có các đa thức nội suy cơ bản:




 
 





 
 
2 3 1 3
1 2
1 2 1 3 2 1 2 3
( ) , ( )
x x x x x x x x
L x L x
x x x x x x x x
   
 
   






  
1 2
3
3 1 3 2
( )
x x x x
L x
x x x x
 

 
.

Do đó




 
 




 
 




  
2 3 1 3 1 2
1 2 3
1 2 1 3 2 1 2 3 3 1 3 2
( )
x x x x x x x x x x x x
P x y y y
x x x x x x x x x x x x
     
  
     
.
5.1.2 Đa thức nội suy Newton

Nội suy bằng đa thức Lagrange là một phương pháp khá đơn giản, sử dụng
rất ít các kiến thức về đại số, nên dễ nhớ. Tuy nhiên đây lại là một phương pháp
kém hiệu quả. Bây giờ xét trường hợp giữ bảng dữ liệu cũ và bổ sung thêm một
nút nội suy mới (để hàm số được nội suy chính xác hơn) thì tất cả các đa thức nội
suy cơ bản lại phải tính toán lại từ đầu. Thay cho công thức nội suy dạng
Lagrange ta viết đa thức nội suy P(x) dưới dạng:
P(x)= a
1
+ a
2
(x-x
1
) + a
3
(x-x
1
)(x-x
2
)+…+ a
N
(x-x
1
)(x-x
2
)(x-x
3
) (x-x
n-1
) (5.4)
Các hệ số a

i
của đa thức có thể được tính trong bảng tỉ hiệu (tỉ sai phân)
theo công thức qui nạp như sau:

114
 
1
1 1
1
,
i i
i i
i i
y y
f x x
x x






: Tỉ hiệu cấp 1 tại x
i
;

 
1 1 2 1 1
2 1 2
2

[ , ] [ , ]
, ,
i i i i
i i i
i i
f x x f x x
f x x x
x x
  
 




: Tỉ hiệu cấp 2 tại x
i
;…
 
1 1 2 1 1 1
[ , , , ] [ , , , ]
, ,
k i i i k k i i i k
k i i k
i k i
f x x x f x x x
f x x
x x
       






:Tỉ hiệu cấp k tại x
i
;

 
2 2 3 2 1 2 1
1 1 2
1
[ , , , ] [ , , , ]
, , ,
n n n n
n n
n
f x x x f x x x
f x x x
x x
  




:Tỉ hiệu cấp n-1 tại x
1
.
Tại nút x
i
chỉ phải tính các tỉ hiệu cấp 1 đến cấp n-i. Ta lập một bảng để

thuận tiện khi tính toán các tỉ hiệu.
Bảng 5-1
Bảng tỉ hiệu với 6 núy nội suy
x y
f
1
f
2
f
3
f
4
f
5

x
1
y
1
f
1
[x
1
,x
2
]

f
1
[x

2
,x
3
]

f
1
[x
3
,x
4
]

f
1
[x
4
,x
5
]

f
1
[x
5
,x
6
]






x
2
y
2
f
2
[x
1
,x
2
,x
3
]

f
3
[x
1
,x
2
,x
3
,x
4
]

f

3
[x
2
,x
3
,x
4
,x
5
]

f
3
[x
3
,x
4
,x
5
,x
6
]



x
3
y
3
f

2
[x
2
,x
3
,x
4
]

f
4
[x
1,
x
2
,x
3
,x
4
,x
5
]

f
5
[x
1
,x
2
,x

3
,x
4
,x
5
,x
6
]

x
4
y
4
f
2
[x
3
,x
4
,x
5
]

f
4
[x
2
,x
3
,x

4
,x
5
,x
6
]

x
5
y
5
f
2
[x
4
,x
5
,x
6
]



x
6
y
6





Khi đó các hệ số của đa thức nội suy (5.4) được xác định như sau:
a
1
=y
1
, a
2
= f
1
[x
1
,x
2
], a
3
= f
2
[x
1
,x
2
,x
3
] a
n
= f
n-1
[x
1

,x
2
,x
3
, ,x
n
].
Công thức (5.4) với cách tính các hệ số a
i
như trên gọi là công thức nội suy
Newton tiến xuất phát từ x
1
. Với công thức này, khi thêm một nút nội suy mới
x
n+1
thì ta chỉ cần tính thêm một hệ số mới a
n+1
. Khi đó bảng tỉ hiệu chỉ phải thêm
một dòng. Mặt khác, nếu chú ý ta thấy công thức Newton không đòi hỏi sự sắp
xếp thứ tự về giá trị của dữ liệu, nên khi đảo ngược thứ tự của dữ liệu thì dạng
mới của đa thức nội suy là:
P(x)=b
1
+ b
2
(x-x
n
) + b
3
(x-x

n
)(x-x
n-1
)+…+b
n
(x-x
n
)(x-x
n-1
)(x-x
n-2
) (x-x
2
) ( 5.5)
Khi đó các hệ số của đa thức nội suy dạng (5.5) được xác định như sau:
b
1
=y
n
, b
2
= f
1
[x
n-1
,x
n
], b
3
= f

2
[x
n-2
,x
n-1
,x
n
] b
n
= f
n-1
[x
1
,x
2
,x
3
, ,x
n
].

115
Công thức với cách tính các hệ số b
i
như trên gọi là công thức nội suy
Newton lùi xuất phát từ x
n
. Do định lý 5.1 có thể thấy công thức Lagrange và
các công thức Newton tiến hay lùi đều xác định cùng một đa thức, chỉ có hình
thức thể hiện là khác nhau và thuận tiện áp dụng cho các trường hợp khác nhau.

Thí dụ 2. Cho hàm y =f(x) dưới dạng bảng số sau:
x 1 2 3 5 6 8
y 5,230 2,092 1,406 -1,202 -1,321 0,015
Hãy lập đa thức nội suy cho hàm F(x) đã cho dưới dạng:
a. Tường minh;
b. Lagrange;
c. Newton tiến xuất phát từ x
1
=1.
d. Newton lùi xuất phát từ x
6
=8.
Giải.
a. Để tìm hệ số tường minh của đa thức P(x) ta sử dụng công thức (5.2):
>> x=[1 2 3 5 6 8];
>> y=[ 5.230 ; 2.092; 1.406; -1.202 ; -1.321; 0.015];
>> p=vander(x)\y
p =
-0.0187
0.4201
-3.4803
13.2919
-24.3719
19.3890
Do đó :
 
5 4 3 2
0,0187 0,4201 3,4803 + 13.2919 24,3719 19,389
0
P x x x x x x     

b. Lập đa thức nội suy Lagrange:
( 2)( 3)( 5)( 6)( 8) ( 1)( 3)( 5)( 6)( 8)
( ) 5,230 2,092
(1 2)(1 3)(1 5)(1 6)(1 8) (2 1)(2 3)(2 5)(2 6)(2 8)
x x x x x x x x x x
P x
         
  
         


116

( 1)( 2)( 5)( 6)( 8) ( 1)( 2)( 3)( 6)( 8)
+1,406 1,202
(3 1)(3 2)(3 5)(3 6)(3 8) (5 1)(5 2)(5 3)(5 6)(5 8)
x x x x x x x x x x
         

         

( 1)( 2)( 3)( 5)( 8) ( 1)( 2)( 3)( 5)( 6)
1,321 0,015
(6 1)(6 2)(6 3)(6 5)(6 8) (8 1)(8 2)(8 3)(8 5)(8 6)
x x x x x x x x x x
         
 
         

hay

( ) 0,0187( 2)( 3)( 5)( 6)( 8) 0,0291( 1)( 3)( 5)(
6)( 8)
P x x x x x x x x x x x
            

0,0234( 1)( 2)( 5)( 6)( 8) 0,0167 ( 1)( 2)( 3)( 6)
( 8)
x x x x x x x x x x
           

0,0110( 1)( 2)( 3)( 5)( 8) 0,00001( 1)( 2)( 3)( 5
)( 6)
x x x x x x x x x x
           

c. Lập đa thức nội suy Newton tiến xuất phát từ x
1
=1.
x y f
1
f
2
f
3
f
4
f
5

1


5,230
-3,1380
-0,6860
-1,3040

-0,1190
0,6680

1,2260

-0,2060
0,3950
0,2623

-0,3580
0,1502
-0,0265


-0,0187
2

2,092

0,1016
-0,0295
3

1,406


5

-1,202

6

-1,321


8

0,015


Từ bảng tỉ hiệu ta có:
















5, 230 3,1380 1 1, 2260 1 2 0,3580 1 2 3
P x x x x x x x
         




















0,1016 1 2 3 5 0,0187 1 2 3 5 6
x x x x x x x x x
          

d. Lập đa thức nội suy Newton lùi xuất phát từ x
6

=8.
Từ bảng tỉ hiệu ta có:















0,015 0,0668 8 0,2623 8 6 0,0265 8 6 5
P x x x x x x x
         





















0,0295 8 6 5 3 0,0187 8 6 5 3 2
x x x x x x x x x
          

5.1.3 Sai số nội suy
Giả sử P(x) là đa thức nội suy của hàm f(x) tại n nút nội suy x
1
,x
2
, ,x
n
;
x
i

[ a,b] và hàm f(x) khả vi đến cấp n. Khi đó có thể chứng minh được rằng:
R(x)= f(x) - P(x) =
 
n
( x )

f (c )
n!

, với c [ a,b];

117
trong đó

(x) =(x-x
1
)(x-x
2
) (x-x
n-1
)(x-x
n
) là đa thức bậc n và có n nghiệm tại các
nút nội suy x
1
, x
2
, ,x
n
. Do f
(n)
(c) là hằng số nên dáng điệu của sai số của nội suy
R(x) phụ thuộc vào dáng điệu của hàm

(x).
Xét trường hợp các nút nội suy cách đều. Khi đó hàm


(x) có biên độ nhỏ
dần ở giữa khoảng nội suy và lớn dần khi đi ra hai biên (xem hình 5.1). Từ đó có
một vấn đề nảy sinh là: nếu được phép chọn các nút nội suy thì nên chọn như thế
nào để sai số nội suy trở thành bé nhất. Điều đó dẫn đến việc giải bài toán:
max|

(x )|  min
Kết quả gải bài toán như sau:
- Nếu a=-1 vàc b=1, thì các nút nội suy “ tối ưu” được chọn như sau:
2 1
os , 1,
2
i
i
x c i n
n


 
 
 
 
. (5.6)
Đó chính là các nghiệm của đa thức Chebysev bậc n:
   
1
1
cos .arccos
2

n
n
T x n x



Hình 5.1 Đồ thị hàm y=

(x) trên lưới đều
Điều đó nghĩa là phân bố các nút nội suy “tối ưu” là thưa ở giữa, dày dần
khi tiến sang 2 biên của khoảng nội suy. Khi đó ta có đánh giá sai số :
   
1
1
2
n
n
x T x


 

118
- Nếu a

-1 hoặc b

1 thì tiến hành đổi biến
2
x a b

t
b a
 


để đưa x

[a,b]
về t [-1,1] rồi chọn t
i
theo công thức (5.4)
2 1
, 1,
2
i
i
t cos i n
n


 
 
 
 
. Sau đó tiến
hành đổi biến ngược lại





2
i
i
b a t a b
x
  
 . Khi đó sai số nội suy được tính
theo công thức sau:
   
 
 
2 1
( ) ( )
!2
n
n
n
n
b a
R x P x f x f x
n


   (5.7)
5.1.4 Một số hàm số tính toán với đa thức
Trong Matlab đã có sẵn các hàm nội trú thuận tiện cho thực hiện tính toán
các đa thức nội suy nói riêng và tổ hợp các đa thức nói chung.
 Hàm POLYFIT
Cú pháp:
p = polyfit(x,y,N)

Giải thích: Hàm POLYFIT tính hệ số của đa thức xấp xỉ hàm cho bởi cặp 2
vector cùng cấp x và y.
- Nếu N

length(x) –1, thì hàm tính vector p là vector hệ số của đa thức
nội suy bậc N: P(x)= p
1
x
N
+p
2
x
N-1
+ +p
N
x+p
N+1
thỏa mãn P(x
i
)= y
i
,i=1,2, ,
length(x).
- Nếu N < length(x)-1, hàm sẽ tính vector các hệ số p của đa thức xấp xỉ
tốt nhất đối với dữ liệu theo nghĩa bình phương tối thiểu.
 Hàm POLYVAL
Cú pháp:
y = polyval (p,x)
Giải thích. Hàm POLYVAL tính giá trị của đa thức có hệ số cho bởi
vector p tại tất cả các giá trị của vector x, nghĩa là :

y = p
1
x
n-1
+ p
2
x
n-2
+ +p
n-1
x+ p
n
 Hàm CONV
Cú pháp:
c = conv (a,b)

119
Giải thích. Hàm CONV thực hiện việc nhân hai đa thức có hệ số a và b
thành đa thức hệ số c.
Thí dụ 3. Nhân hai đa thức (3x
2
+4x+5).(2x
3
-3x
2
+2)
>> a = [0 3 4 5];
>> b = [2 -3 0 2];
>> c = conv(a,b)
c =

0 6 -1 -2 -9 8 10
 Hàm DECONV
Cú pháp:
[q,r] =deconv (a,b)
Giải thích. Hàm DECONV chia đa thức có hệ số là vector a cho cho thức
có hệ số là vector b, được đa thức có hệ số là vector q và phần dư là đa thức có
hệ số là vector r.
Thí dụ 4. Chia đa thức (2x
2
+3x+6)/(2x+3)
>> a = [2 3 6];
>> b = [2 3];
>> [q,r] = deconv (a,b)
q =
1 0
r =
0 0 6
 Hàm ROOTS
Cú pháp:
x = roots(p)
Giải thích. Hàm ROOTS tính tất cả các nghiệm thực và phức của đa thức
có hệ số là vector p trả về kết quả là vector nghiệm x.
Thí dụ 5.
>> roots([3 4 1])

120
ans =
-1.0000
-0.3333
>> x= roots([1 2 3 2 1])

x =
-0.5000 + 0.8660i
-0.5000 - 0.8660i
-0.5000 + 0.8660i
-0.5000 - 0.8660i
5.1.4 Biểu diễn hàm số trên đồ thị
 Vẽ đồ thị phẳng bằng lệnh plot
plot(x,y,'symbol'): Vẽ đồ thị hàm y đối với x. 2 vector thực x và y cùng cỡ.
'Symbol' là xâu qui định kiểu màu hoặc đường vẽ:
y yellow w white * star
m magenta g green o circle
c cyan b blue x x-mark
r red k black
plot(y,'symbol') : Nếu y là vector thực lệnh vẽ đồ thị của hàm y đối với x
là số thứ tự của toạ độ của y. Nếu y là vector phức thì tương đương với lệnh:
plot(real(y),imag(y), 'symbol')
 Xác định tỉ lệ trên đồ thị bằng lệnh axis
axis([xmin xmax ymin ymax]) : Thay đổi lại tỷ lệ của các trục toạ độ.
axis auto (mặc định): Matlab tự chọn một tỷ lệ thích hợp nhất cho đồ thị.
V = axis : Trả về một vectơ hàng mô tả tỷ lệ của đồ thị hiện tại, có dạng
[xmin xmax ymin ymax].
axis equal : Các trục toạ độ có cùng đơn vị.
axis square : Hộp đồ thị hình vuông.
Khi xem đồ thị có thể dùng các công cụ “+” và “ –“ để phóng to thu nhỏ
vùng đồ thị muốn xem.

121
 Các lệnh liên quan khác liên quan đến đồ thị
hold on / off : Xếp chồng đồ thị, mặc định là hold off : thay đồ thị cũ.
grid on / off : Hiện (on , mặc định ) hay ẩn (off) lưới.

xlabel('text'), ylabel('text') , zlabel('text') : Gắn nhãn cho các trục toạ độ.
tiltle('text') : Gắn tiêu đề cho đồ thị.
 Minh hoạ đa thức nội suy.
Như đa trình bày ở trên, việc nội suy bằng đa thức với các nút nội suy cách
đều có thể gây ra sự dao động không mong muốn cho đa thức nội suy của một
hàm số. Thí dụ sau đây sẽ là lời cảnh báo về điều này.
Thí dụ 6. Hãy nội suy hàm số

 
2
1
f x
1 16
x


với x [-1,1].
Giải. Ta tạo một tập dữ liệu tại 20 mốc cách đều trên đoạn [-1,1] là:
2
2( 1) 1
1, , 1,20
19
1 16
i i
i
i
x f i
x

   


.
Từ tập dữ liệu này nội suy bằng đa thức bậc 19. Kết quả minh hoạ trên đồ
thị hình thị 5.2 cho thấy: mặc dù hàm P
19
(x) thoả mãn P
19
(x
i
) = y
i
, nhưng giá trị
xấp xỉ bởi nội suy tại gần 2 đầu mút của khoảng nội suy không tốt.
Sau đó, ta tạo lại tập dữ liệu như sau:
2
( 1) 1
cos , , 1,20
19
1 16
i i
i
i
x f i
x


  


và vẽ lại đồ thị của đa thức nội suy mới.

Chương trình tạo file dữ liệu ban đầu của hàm số:
% Matlab Code to Produce Data file
n=20;
x=zeros(n,1); y=x;
for t=1:n;
x(t)=2*(t-1)/19-1; y(t)=1/(1+16*x(t)^2);
end;
save dulieu x y; %% Hoặc save('dulieu.mat', 'x', 'y'
Chương trình vẽ đồ thị của các hàm nội suy:
% Demonstrate the "failure" of Polynomial Interpolation on equidistant grids

122
clear;
load dulieu;
n=length(x);
axis([-1 1 -0.5 4]);
plot(x,y,'o'); %% Đánh dấu các điểm dữ liệu bằng hình chữ “ o”
hold on; grid on;
coef=polyfit(x,y,n-1);
xx=[-1:0.01:1];
yy=polyval(coef,xx);
plot(xx,yy,'r');
xlabel(' Truc X'); ylabel(' Truc Y');
title( ' Noi suy da thuc ');
for t=1:n
x(t)=cos((t-1)*pi/19); y(t)=1/(1+16*x(t)^2);
end
coef1=polyfit(x,y,n-1); yy=polyval(coef1,xx);
plot(xx,yy,'g'); hold off;











Hình 5.2 “Thất bại” của nội suy trên lưới đều
và ưu điểm của các nút nội suy “tối ưu”
Kết quả chạy chương trình được minh họa trong hình 5.2 cho thấy với các
nút nội suy mới đồ thị đường nội suy đẹp hơn rất nhiều.


123
5.2 NỘI SUY BẰNG HÀM SPLINE BẬC 3
Nội suy bằng đa thức bằng đa thức có nhược điểm là khi có nhiều mốc nội
suy thì bậc của đa thức rất cao, nên không thuận tiện cho việc tính toán. Phương
pháp spline là thực hiện ghép nối trơn tru những đa thức bậc thấp, từng khúc để
nội suy hàm đã cho.
Cho hàm f(x) liên tục trên đoạn [a,b]. Xét một phân hoạch trên [a,b]
={a =x
1
<x
2
< <x
n
=b}.
Hàm spline bậc m (m


1) trên  là hàm số thoả mãn:
- Thuộc lớp C
m-1
[a,b];
- Là đa thức bậc m trên mỗi đoạn con

j
=[x
j
,x
j+1
] ( 1,1  nj ).
Như vậy, ta cần phải tìm một hàm spline S(x) bậc m sao cho:
- S(x
j
) = f(x
j
) với nj ,1 ;
- S
(i)
(x
j
-0) = S
(i)
(x
j
+0) với
2 1
j ,n

 
,
0 1
i ,m
 
. (5.8)
Đặt S
j
(x)= S(x)/
j
,
1 1
j ,n
 
, là một đa thức bậc m. Để xác định mỗi S
j
(x)
cần tìm m+1 hệ số. Do đó cần tìm (n-1)(m+1) hệ số của S(x). Tuy nhiên trong
(5.8) chỉ có (n-2)m+n phương trình, nên cần phải bổ sung thêm m-1 điều kiện
nữa để hoàn toàn xác định các hệ số của S(x). Những điều kiện như vậy thường
liên quan đến giá trị của hàm S(x) và các đạo hàm của nó tại 2 mút a và b nên
được gọi là những điều kiện biên.
Sau đây là các kết quả nghiên cứu của 3 nhà toán học Alberg, Nilson và
Walsh về hàm spline bậc m=3.
Đặt h
j
=x
j+1
-x
j

và S”(x
j
) = m
j
. Do S
j
(x) là một đa thức bậc 3 nên
''
j
S ( x )

một đa thức bậc nhất. Do đó có thể đặt:





1
''
j j j j j
S ( x ) x x x x
 

    (5.9)
Thay x=x
j
vào (5.9) ta có m
j
=
j j

h

hay
j
j
j
m
h

 .
Tương tự , thay x=x
j+1
vào (5.9) ta cũng được
1
j
j
j
m
h


 . Vì vậy:

124
   
1
''
1
( )
j j

j j j
j j
m m
S x x x x x
h h


   
(5.10)
Từ đó suy ra:
       
3 3
1
1 1
( )
6 6
j j
j
j j j j j
j
j j
m m
S x x x x x x x x x
h h
 

 
        (5.11)
Để tính
j



j

, lần lượt thay x=x
j
và x=x
j+1
vào (5.11) ta sẽ được:
   
   
3 3
1
1
2 2
1
1 1
( )
6 6
1 1

6 6
j j
j j j
j j
j j j j
j j j j
j j
m m
S x x x x x

h h
m h m h
y x x y x x
h h



 
    
   
   
     
   
   
(5.12)
Và do đó:
   
2 2
2 2
1 1
1 1
1 1
' ( )
2 2 6 6
j j j j j j
j j j j j
j j j j
m m m h m h
S x x x x x y y
h h h h

 
 
   

   
       
   
   


'( 0) '( 0)
j j
S x S x
  
với
2 1
j ,n
  
hay
1
' ( ) ' ( )
j j j j
S x S x

 , suy ra:
1 1 1 1
1 1
1
6 3 6 3
j j j j j j j j

j j j j
j j
h h y y h h y y
m m m m
h h
   
 

 
     
1 1 1 1
1 1
1
6 3 6
j j j j j j j j
j j j
j j
h h h h y y y y
m m m
h h
   
 

  
    (5.13)
Nếu chia cả hai vế của (5.11) cho
1
6
j j
h h



và đặt
1
1 1
, 1 ,
j j
j j j
j j j j
h h
h h h h
  

 
   
 


1 1
1 1
6
, 2, 1
j j j j
j
j j j j
y y y y
d j n
h h h h
 
 

 
 
   
 
 

 
(5.14)
thì (5.13) trở thành:

1 1
2 , 2, 1
j j j j j j
m m m d j n
 
 
    
(5.15)
Đây là một hệ gồm n-2 phương trình tuyến tính của n ẩn số m
j
. Để bổ xung
thêm 2 (hay m-1) phương trình nữa, có thể sử dụng một trong hai cách chọn 2
điều kiện biên như sau:

125
a) Buộc S'(a) =y'(a) và S'(b) =y'(b) khi đó :
2 1
1 2 1 1
1 1
1

1
1 1
6
2 '
6
2 '
n n
n n n n
n n
y y
m m y d
h h
y y
m m y d
h h


 

 

   

 
 

 


   

 

 


b) Buộc S”(a)=y”(a)=
1
2
d
hay 2. m
1
+0.m
2
=d
1
,
và buộc S”(b) =y”(b) =
2
n
d
hay 0.m
n-1
+ 2m
n
=d
n
.

Như vậy để tính các hệ số m
j

với nj ,1 , thì cần giải hệ phương trình:
1 1
1
2 2
2 2
3 3
3 3
1 1
1 1
n
2
2
2


2
2
n n
n n
n n
m d
m d
m d
m d
m d

 
 
 


 
 
 
   
 
   
 
   
 
   
 

   
 
   
 
   
 
   
   
 
   
 
(5.16)
Cần chú ý rằng (5.13) là hệ phương trình có ma trận hệ số dạng ma trận
thưa và chéo trội, nên có thể hệ giải bằng phương pháp lặp đơn Jacoby hay
phương pháp lặp Gauss-Seidel hội tụ. Khi các nút nội suy cách đều thì:

1
, 2, 1

2
j j
j n
 
   
.
Có thể dễ dàng nhận thấy việc xác định các hệ số của hàm spline bậc 3 khá
phức tạp và khó nhớ. Do tính ứng dụng lớn của nội suy bằng hàm spline bậc 3,
nên trong Matlab đã cài đặt sẵn một hàm spline bậc 3.
 Hàm SPLINE trong Matlab
Cú pháp:
yy = spline(x,y,xx)
Giải thích. Hàm SPLINE tính giá trị hàm nội suy spline bậc 3 xác định từ
tập dữ liệu (x,y). x và y phải là 2 vector cùng cỡ. Hàm trả về vector yy giá trị của
hàm spline bậc 3 tại mọi phần tử của vector xx.

126
Thí dụ 7. Cài đặt chương trình nội suy hàm số từ tập dữ liệu (x,y) trong file
dulieu.m bằng hàm spline bậc 3.
Giải. Soạn file chương trình có nội dung:
% Malab code for Cubic Spline Interpolation
clear
load dulieu;
n = length(x);
xx = [x(1): (x(n)-x(1))/200:x(n)] ;
yy = spline(x,y,xx);
plot(x,y,'o');
grid on; hold on;
plot(xx,yy,'r');
hold off;

xlabel(' Truc X'); ylabel(' Truc Y');
title( ' Noi suy bang Spline bac 3 ');
Kết quả chạy chương trình được minh họa trong hình 5.3. Đồ thị cho ta
thấy việc xấp xỉ bằng spline bậc 3 là khá tốt.

Hình 5.3 Nội suy bằng spline bậc 3

127
5.3 XẤP XỈ HÀM
5.3.1 Phân tích hồi qui tuyến tính
Hồi qui tuyến tính là tìm một đường thẳng phù hợp với một tập các dữ liệu
đã thống kê. Khi nghiên cứu hồi qui tuyến tính có thể sử dụng nhiều phương
pháp khác nhau, tuy nhiên trong nghiên cứu thực nghiệm người ta thường sử
dụng phương pháp bình phương tối thiểu.
Cho một tập gồm n cặp dữ liệu thống kê {(x
i
,y
i
),
1
i ,n

} cần phải tìm các
hệ số a và b của một đường thẳng hồi qui có dạng y(x)=ax+b sao cho đường
thẳng đó “phù hợp nhất ” với tập dữ liệu đã cho. Đây là một bài toán được áp
dụng nhiều trong các ngành khoa học thực nghiệm.
Đặt e
i
= y
i

- (ax
i
+ b) là sai số của đường hồi qui tại điểm x
i
. Cần phải tìm
đường hồi qui sao cho tổng bình phương của các sai số trở nên bé nhất, nghĩa là:
L(a,b) =
 
 
2
1
n
i i
i
y ax b

  

min
Để tìm lời giải tối ưu của bài toán cực trị 2 biến ở trên ta cần giải hệ 2
phương trình của a và b:
1
1
2{ ( )}( ) 0
2{ ( )}( 1) 0
n
i i i
i
n
i i

i
L
y ax b x
a
L
y ax b
b




    







    







hay
2
1 1 1

1 1
.
n n n
i i i i
i i i
n n
i i
i i
x a x b x y
x a nb y
  
 

   

   
 
   

   

 

 
 

 

 


  
 
(5.17)
Thí dụ 8. Tạo một text file có tên data.m gồm 2 cột dữ liệu:
0 2.38471
1.0e-01 1.82271
2.0e-01 2.03641
3.0e-01 2.41649
4.0e-01 2.17773
5.0e-01 1.98777

128
Sau đây là chương trình xây dựng đường hồi qui tuyến tính:
% Matlab code for linear regression
clear;
load data.m;
x = data(:,1); y=data(:,2);
plot(x,y,'*');
axis([0 0.5 0 4]);
hold on; grid on;
a11=sum(x.*x) ;
a12=sum(x);
n=length(x);
b1=sum(x.*y) ;
b2=sum(y);
A=[ a11 a12; a12 n]; B=[b1;b2];
sol = A\B;
a=sol(1) ; b=sol(2);
x0 = x(1) ; xn=x(n);
y0 = a*x0 + b; yn=a*xn+b;

plot([x0 xn],[y0 yn],'r');
hold off;
xlabel(' X-Axis'); ylabel('Y-Axis');
title( ' Linear Regession Analysis ');


Hình 5.4 Đường thẳng hồi qui

129
5.3.2 Xấp xỉ hàm bậc cao.
Phân tích hồi qui tuyến tính là một trường hợp xấp xỉ hàm số chưa biết (hàm
thực nghiệm) bởi một hàm bậc nhất. Bây giờ ta xét một trường hợp xấp xỉ hàm
thực nghiệm bởi một đa thức bậc 2. Từ đó học viên có thể tự xây dựng công thức
tính cho các xấp xỉ hàm bậc cao hơn và một số dạng khác cũng theo phương
pháp bình phương tối thiểu.
Để tìm các hệ số a, b, c của đường parabol y(x) = ax
2
+bx +c sao cho nó
phù hợp nhất theo nghĩa bình phương tối thiểu với một tập gồm n cặp dữ liệu
thực nghiệm {(x
i
,y
i
)},
ni ,1
ta cần giải bài toán tìm cực trị:
L(a,b,c) =
 
 
2

2
1
n
i i i
i
y ax bx c

   

min
Từ đó dẫn đến cần giải hệ 3 phương trình tuyến tính của 3 ẩn a, b, c:
2 2
1
2
1
2
1
2{ ( )}( ) 0
2{ ( )}( ) 0
2{ ( )}( 1) 0
n
i i i i
i
n
i i i i
i
n
i i i
i
L

y ax bx c x
a
L
y ax bx c x
b
L
y ax bx c
c





     






     






     







(5.19)
Viết lại hệ phương trình dạng ma trận:
4 3 2 2
1 1 1 1
3 2
1 1 1 1
2
1 1 1
n n n n
i i i i i
i i i i
n n n n
i i i i i
i i i i
n n n
i i i
i i i
x x x x y
a
x x x b x y
c
x x n y
   
   
  
   

   
   
   
 
   
 

   
 
 
   
 
   
   
   
   
   
   
  
(5.20)

Bằng phương pháp tương tự bạn có thể tự xây dựng được hệ phương trình
tính hệ số của đường hồi qui bậc 3,4,5 Để tiện cho việc tính toán các hệ số của
hệ phương trình (5.20) người ta thường lập bảng tính toán có dạng:

130
Bảng 5-2
Bảng tính toán cho đa thức hồi qui bậc 2
x
i

y
i
2
i
x

3
i
x

4
i
x

i i
x y

2
i i
x y

x
1
x
2


x
n
y

1
y
2


y
n





















1
n

i
i
x



1
n
i
i
y



2
1
n
i
i
x



3
1
n
i
i
x




4
1
n
i
i
x



1
n
i i
i
x y



2
1
n
i i
i
x y



Thí dụ 9. Tính hệ số của đa thức bậc 2 xấp xỉ tốt nhất hàm số y=f(x) được
cho dưới dạng bảng:

x 1
1,5 2 2,5 3 3,5
y 1,2341 3,9242 2,4563 - 0,2224 -1,3215 0,5506
Giải. Đầu tiên ta lập bảng tính toán:
x
i
y
i
2
i
x

3
i
x

4
i
x

i i
x y

2
i i
x y

1
1,5
2

2,5
3
3,5
1,2341
3,9242
2,4563
-
0,2224
-
1,3215
0,5506

1,00

2,25


4,00
6,25

9,00
12,25

1,000
3,375

8,000
15,625

27,000


42,875
1,0000
5,0625
16,0000
39,0625
81,0000
150,0625
1,2341
5,8863

4,9126

-0,5560

-
3,9645
1,9271
1,2341
8,8294
9,8252
-1,3900
-11,8935
6,7448
13,5 6,6213 34,75

97,875 292,1875 9,4396 13,3501
- Giải hệ phương trình:

292,1875 97,875 34,75 13,3501

97,875 34,75 13,5 9,4396
34,75 13,5 6 6,6213
a
b
c
    
    

    
    
    

ta được các hệ số a= -0,1868, b= -0.4071 và c = 3,1013.

131
5.3.3 Một số dạng xấp xỉ khác bằng phương pháp bình phương tối thiểu
Cho một tập gồm n cặp dữ liệu thực nghiệm {(x
i
,y
i
),
ni ,1
}. Cần phải xác
định các hệ số a , b và c… của một số quan hệ hàm sao cho chúng “phù hợp
nhất” (theo nghĩa bình phương tối thiểu) với tập dữ liệu đã cho.
 Quan hệ hàm y = ae
bx

Giả sử a >0. Lấy logarithm hai vế ta được:
logy= log a + bxloge

Đặt Y =logy , A =loga và B = bloge ta có quan hệ:
Y = Ax + B
Bây giờ có thể áp dụng phương pháp đã được giới thiệu trong mục 5.3.1 để
xấp xỉ hàm Y(x) từ đó suy ra hàm y(x).
 Quan hệ hàm y = ax
b
, b>0
Giả sử a > 0. Lấy logarithm hai vế ta được:
logy= log a + blogx
Đặt Y =logy , A =loga , B = b và X= log x ta có quan hệ:
Y = AX + B
Ta lại áp dụng phương pháp đã được giới thiệu trong mục 5.3.1 để xấp xỉ
hàm Y(X) từ đó suy ra hàm y(x).
 Quan hệ hàm y = a+bcosx+csinx
Để xác định các hệ số a, b và c theo phương pháp bình phương tối thiểu, ta
cần giải bài toán:
L(a,b,c) =
 
2
1
os sin x
N
i i i
i
y a bc x c

 
   
 


min
Từ đó dẫn đến cần giải hệ 3 phương trình tuyến tính của 3 ẩn a, b, c:
 
 
 
1
1
1
2{ os sin x }( 1) 0
2{ os sin x }( os ) 0
2{ os sin x }( sin x ) 0
N
i i i
i
N
i i i i
i
N
i i i i
i
L
y a bc x c
a
L
y a bc x c c x
b
L
y a bc x c
c






     






     






     






(5.19)

132

hay

1 1 1
2
1 1 1 1
1
+ os + sin x
cos + cos sin x cos cos
sin
N N N
i i i
i i i
N N N N
i i i i i i
i i i i
N
i
i
Na c x b c y
x a x b x c y x
x a
  
   

   
   

   
   
     
     
 

     
     
 
 
 
 
  
   

2
1 1 1
+ sin x cos sin x sin
N N N
i i i i i
i i i
x b c y x
  









   

   
 


   

   

  

Giải hệ phương trình trên sẽ tính được các hệ số a,b và c của quan hệ hàm
số cần xấp xỉ.

133

BÀI TẬP
A. Cài đặt chương trình và lập hàm.
1. Cho tập dữ liệu {(x
i
,y
i
)},
ni ,1
. Cài đặt hàm tính vector hệ số:
a=(a
1
,a
2
, a
3
,…, a
n
)

của đa thức nội suy Newton tiến bậc n-1, xuất phát từ x
1
:
P(x) = a
1
+a
2
(x-x
1
)+ a
3
(x-x
1
)(x-x
2
)

+ + a
n
(x-x
1
)(x-x
2
)…(x-x
n-1
)

theo bảng tỉ hiệu. Lệnh gọi hàm có dạng:
a = NewtonFit(x,y).
2. Cho tập dữ liệu (x

i
,y
i
)},
ni ,1
. Cài đặt hàm tính xấp xỉ giá trị của đa thức nội
suy P(x) bậc n-1 tại xx=(xx
1
, xx
2
,xx
3
,…,xx
m
) bằng phương pháp Lagrange.
Lệnh gọi hàm có dạng:
yy = Lagrange(x,y,xx)
trong đó yy là vector giá trị hàm tại xx tính được.
3. Cho tập dữ liệu {(x
i
,y
i
)},
ni ,1
. Cài đặt hàm tính hệ số a, b và c của quan hệ
hàm y = ax
2
+ bx + c theo phương pháp bình phương tối thiểu. Lệnh gọi hàm
có dạng:
[a,b,c] =ParaboFit(x,y).

4. Cho tập dữ liệu {(x
i
,y
i
)},
ni ,1
. Cài đặt hàm tính hệ số a, b và c của quan hệ
hàm y = a +b cosx+ c sinx theo phương pháp bình phương tối thiểu. Lệnh gọi
hàm có dạng:
[a,b,c] =CosSinFit(x,y).
5. Cho tập dữ liệu {(x
i
,y
i
)},
ni ,1
. Xây dựng công thức tính và cài đặt hàm tính
hệ số a và b của quan hệ hàm y = ae
bx
(a>0) theo phương pháp bình phương
tối thiểu. Lệnh gọi hàm có dạng:
[a,b] =ExpFit(x,y).



134
B. Sử dụng các hàm nội trú của Matlab.
1. Tìm xấp xỉ các hệ số của đa thức P(x) bậc 3 được cho trong bảng bằng phương
pháp bình phương tối thiểu và tính P(x) tại x= 1; 1,2; 1.4; ; 2,8; 3.
x

1 1,5 2 2,5 3 3,5
y 1,2341 3,9242 2,4563 - 0,2224 -1,3215 0,5506
2. Đa thức P(x)= ax
3
+ bx
2
+cx +d

đo được dưới dạng bảng:
x
1 1,5 2 2,5 3 3,5
y 5,23401 2,09242 1,40563 - 1,20224 -1,32105 0,01501
- Tìm các hệ số a, b, c, d bằng phương pháp bình phương tối thiểu.
- Tính P(x) tại x = 1,5; 1,6; 1,7; 3,2.
3. Hàm số y=f(x) được cho dưới dạng bảng:
x 1,0 1,5 2,0 2,5 3,0 3,5
y -2,95001 -2,90250 -1,00020 2,75754 8,37002 15,83752

Tính xấp xỉ hàm f(x) tại x= 1; 1.1; 1.2; ; 3 bằng phương pháp spline bậc 3.
4. Hàm số y=f(x)

được cho bởi bảng số. Tính gần đúng f(x) tại x=1,25 bằng
phương pháp spline bậc 3:
x 1,0 1,1 1,2 1,3 1,4 1,5
y 3,85011 -2,30650 -1,12320 4,85754 8,36602 10,99154
5. Dùng ma trận pascal, đưa ra màn hình vector hệ số của khai triển nhị thức
Newton bậc 10

.
6. Hàm số y=f(x) được cho dưới dạng bảng, Tính vector hệ số của đa thức nội

suy bậc 5 bằng cách sử dụng ma trận Vandermonde
x 1,0 1,5 2,0 2,5 3,0 3,5
y -2,30650 -1,12320 -1,00020 2,75754 8,37002 15,83752
7. Cho 2 vector:
5x
10
+

12x
9
-4x
7
+3x
6
-5

x
2
-10 = 0


-3x
8
+

6x
5
+8x
7
+3x

3
+2x
4
-11x -2

= 0
Hãy tính vector p, q và s tương ứng là hệ số của tổng tích, thương và phần
dư phép chia của 2 đa thức đã cho.

×