TRƯỜNG ĐẠI HỌC VINH KHOA TOÁN HỌC --- KHÓA LUẬN TỐT NGHIỆP ĐẠI HỌC TÍNH GẦN ĐÚNG GIÁ TRỊ HÀM SỐ BẰNG ĐA THỨC NỘI SUY VỚI NGÔN NGỮ LẬP TRÌNH C... Do đó, người ta thường tìm cách thay t
Trang 1TRƯỜNG ĐẠI HỌC VINH KHOA TOÁN HỌC
-
TÍNH GẦN ĐÚNG GIÁ TRỊ HÀM SỐ BẰNG ĐA THỨC NỘI SUY VỚI NGÔN NGỮ LẬP TRÌNH C
KHÓA LUẬN TỐT NGHIỆP ĐẠI HỌC CHUYÊN NGÀNH TOÁN - TIN HỌC ỨNG DỤNG
Vinh, tháng 5 năm 2012
Trang 2TRƯỜNG ĐẠI HỌC VINH KHOA TOÁN HỌC -
KHÓA LUẬN TỐT NGHIỆP ĐẠI HỌC
TÍNH GẦN ĐÚNG GIÁ TRỊ HÀM SỐ BẰNG ĐA THỨC NỘI SUY VỚI NGÔN NGỮ LẬP TRÌNH C
Trang 3Mục lục
Mở đầu 2
Chương 1 : Nội suy hàm số bằng đa thức nội suy Lagrange 4
1.1 Đa thức nội suy 4
1.2 Nội suy hàm số bằng đa thức nội suy Lagrange 5
Chương 2 : Nội suy hàm số bằng đa thức nội suy Newton 17
2.1 Đa thức nội suy Newton với mốc nội suy không cách đều 17
2.2 Đa thức nội suy Newton với mốc nội suy cách đều 24
Chương 3 : Một số ứng dụng của phép nội suy 34
3.1 Tính gần đúng đạo hàm 34
3.2 Tính gần đúng tích phân 36
Kết luận 40
Tài liệu tham khảo 41
Trang 4MỞ ĐẦU
Trong thực tế ứng dụng, dẫn đến phải làm việc với hàm số y = f(x) với
( *); ( *); ( )
b n
y f x tại một số điểm x i[a,b] Khi đó, việc tính đúng các giá trị trên gặp
phải khó khăn Không những thế nhiều trường hợp hàm số f có được từ thực
nghiệm nên các hệ số của nó thường là những số gần đúng Trong trường hợp
đó, việc tính đúng các giá trị trên không những khó thực hiện mà còn không
có ý nghĩa ứng dụng Do đó, người ta thường tìm cách thay thế hàm số f bởi một hàm số g có dạng quen thuộc mà việc tính các giá trị như đạo hàm, tích phân đối với hàm g dễ thực hiện đồng thời các kết quả tính được đối với hàm
g sai khác các kết quả đối với hàm f một lượng không đáng kể Một trong
những phương pháp thường được sử dụng để tìm hàm g là phép nội suy hàm
số
Phép nội suy hàm số là phương pháp xây dựng các điểm dữ liệu mới dựa vào một tập rời rạc các điểm dữ liệu đã biết Các dữ liệu này có được nhờ việc lấy mẫu, thí nghiệm, phép thử…từ đó người ta cố gắng xây dựng một hàm mà khớp rất gần với các dữ liệu này Có nhiều phương pháp nội suy hàm
số đã được xây dựng Chúng ta có thể kể đến các phương pháp như: Nội suy hàm số bằng đa thức nội suy Lagrange, Nội suy hàm số bằng đa thức nội suy Newton…
Ngày nay, có rất nhiều ngôn ngữ lập trình hỗ trợ chúng ta trong việc tính toán có thể kể đến các ngôn ngữ lập trình như: Pascal, C, C++ , C# … Các kết quả của phép nội suy được nghiên cứu và ứng dụng rộng rãi Trên cơ lý thuyết nội suy hàm số và các ngôn ngữ lập trình quen thuộc, chúng
Trang 5tôi chọn đề tài nghiên cứu cho khóa luận là “Nội suy hàm số để tính giá trị
hàm số tại điểm bất kì với ngôn ngữ lập trình C” Mục đích của khóa luận là
viết chương trình nội suy hàm số bằng ngôn ngữ C Với mục đích đó, Khóa luận được trình bày thành 3 chương
Chương 1 Nội suy hàm số bằng đa thức nội suy Lagrange Nội dung
chính của phần này là trình bày phương pháp nôi suy hàm số sử dụng đa thức nội suy Lagrange với mốc nội suy cách đều và mốc nội suy không cách đều Cài đặt thuật toán sử dụng trên máy tính bằng ngôn ngữ C
Chương 2 Nội suy hàm số bằng đa thức nội suy Newton Nội dung
chính của phần này là trình bày phương pháp nội suy hàm số sử dụng đa thức nội suy Newton với mốc nội suy cách đều và mốc nội suy không cách đều Cài đặt thuật toán sử dụng trên máy tính bằng ngôn ngữ C
Chương 3 Một số ứng dụng của phép nội suy hàm số Nội dung chính
của phần này là trình bày một số ứng dụng của phép nội suy hàm số Sử dụng
đa thức nội suy để tính gần đúng đạo hàm và tính gần đúng tích phân
Khóa luận được thực hiện tại trường Đại học Vinh, dưới sự hướng dẫn
của ThS.Nguyễn Thanh Diệu Em xin bày tỏ lòng biết ơn sâu sắc tới Thầy về
sự nhiệt tình hướng dẫn đã dành cho em trong suốt quá trình hình thành khóa luận Nhân dịp này em xin trân trọng cảm ơn Ban chủ nhiệm khoa Toán, các thầy cô giáo trong khoa Toán trường Đại học Vinh, gia đình và bạn bè đã tạo điều kiện thuận lợi để em được học tập và hoàn thành khóa luận
Mặc dù đã có nhiều cố gắng, song khóa luận không tránh khỏi những thiếu sót Em mong nhận được những ý kiến đóng góp của các thầy, cô giáo
và các bạn đọc để khóa luận được hoàn thiện hơn
Sinh viên
Đậu Thanh Sang
Trang 6CHƯƠNG 1
NỘI SUY HÀM SỐ BẰNG ĐA THỨC NỘI SUY
LAGRANGE
1.1 Đa thức nội suy
Định nghĩa 1.1.1 Giả sử y = f(x) tương ứng tại các giá trị khác nhau x 0 ,
x 1 ,…, x n được giá trị y 0, y 1 ,…, y n Các giá trị x 0 , x 1 ,…, x n được gọi là các mốc
nội suy Đa thức P n (x) được gọi là đa thức nội suy của hàm f(x) theo các mốc
nội suy x 0 , x 1 ,…, x n nếu P n (x) thỏa mãn:
+ P n (x) là đa thức bậc n
+ P n (x i ) = y i (i=1 ,n)
R n (x) = f(x) – P n (x) được gọi là sai số nội suy
Định lý 1.1.1 Đa thức nội suy P n (x) của hàm số y = f(x) với mốc nội suy x 0 ,
x 1 ,…, x n nếu có là duy nhất
Chứng minh
Giả sử y = f(x) với mốc nội suy đã cho có hai đa thức nội suy P n (x) và
Q n (x) Khi đó P n (x) – Q n (x) là một đa thức có bậc không lớn hơn n nhưng có
(n+1) nghiệm khác nhau,đó là các nghiệm x 0 , x 1 ,…,x n
Điều đó chứng tỏ P n (x) – Q n (x) là đa thức 0,tức là:
P n (x) – Q n (x) = 0 hay P n (x) = Q n (x) (đpcm)
Nội suy hàm số bằng đa thức đại số
Trên đoạn [a,b] cho tập các nút a x 0 < x 1 <…< x n b và tại các điểm này
cho các giá trị y i = f(x i ) (i=0 ,n ) của hàm f(x) Hãy xây dựng hàm P n (x) dễ tính
toán và trùng với hàm f(x) tại các điểm nút trên tức là :
P m (x) = y i (i=0 ,n)
Trang 7Hàm P m (x) được gọi là hàm nội suy Các điểm x i (i=0 ,n) là các mốc nội suy
P m (x) = i
m
i
i x a
1
Giải Ta có thể hiểu ý nghĩa của bài toán là: hãy xây dựng đường cong đại số
y = P m (x) đi qua các điểm cho trước (x i, ,y i ) Vậy ta cần xác định m+1 hệ số ai
(i =0 ,m ) từ hệ phương trình sau:
j i m
j
j x a
n n
x x
x x
x x
0 0
0
j i n j i
1.2 Nội suy hàm số bằng đa thức nội suy Lagrange
1.2.1 Đa thức nội suy Lagrange với mốc nội suy không cách đều
1.2.1.1 Xây dựng đa thức nội suy Lagrange
Giả sử trên [a, b] cho n+1 giá trị khác nhau của đối số x 0 , x 1 ,…, x n và biết
các đối với hàm số y = f(x) những giá trị tương ứng: f(x i ) = y i
Bây giờ ta xây dựng đa thức nội suy P(x) bậc không cao hơn n thỏa mãn điều
kiện: P(x i ) = y i (i=0 ,n) theo cách của Lagrange
Trước hết xây dựng đa thức P i (x) thỏa mãn điều kiện:
j i
Vì đa thức P i (x j ) phải triệt tiêu tại điểm x 0 , …, x i-1 , x i+1 ,…, x n nên P i (x j ) có thể
được viết dưới dạng:
Trang 8n 1
1 - i
Thay vào (1.3) ta được:
P i (x) =
) x - (x ) x - )(x x - (x ) x - (x
) x - (x ) x - )(x x - (x ) x - (x
n i 1 i i 1 - i i 0 i
1 i 1 - i 0
i P x y
i 1 - i 0
) x - (x ) x - )(x x - (x ) x - (x
) x - (x ) x - )(x x - (x ) x - (x
Đa thức (1.6) là đa thức nội suy Lagrange
1.2.1.2 Đánh giá sai số của phương pháp
Định lý 1.2.1 (Định lý Rolle) Cho f : [a,b] R, f liên tục và khả vi trong khoảng [a,b] Giả sử f(a) = f(b) khi đó tồn tại c[a,b] sao cho f ‘ (c)=0
Trang 9Do f(a) = f(b) nên phải có c(a,b) sao cho f(c) = M hoặc f(c) = m suy ra
f ‘ (c) = 0
Đánh giá sai số Để đánh giá độ lệch giữa đa thức nội suy Lagrange P(x) và
hàm số f(x) tại các điểm xx i (i=0 ,n) ta chứng minh định lý sau:
Định lý 1.2.2 Nếu hàm số y = f(x) có đạo hàm liên tục đến cấp n+1 trên
[a,b] chứa tất cả các mốc nội suy x i (i=0 ,n ) thì sai số nội suy R n (x) = f(x) – P(x) có dạng:
R(x) = ( )
)!
1 (
) (
'
x n
) ( ) (
x
x P x f
Mặt khác: F(x i ) = 0 (i=0 ,n ) nên F(z) có n+2 nghiệm phân biệt x 0 , x 1 , x 2 ,…, x n
Theo định lý Rolle (định lý 1.2.2): F ’ (z) có n+1 nghiệm trên [a,b] và F ” (z) có
không ít hơn n nghiệm trên [a,b]
Trang 10Tiếp tục làm như trên ta thấy rằng trên [a,b] đạo hàm F (n+1)
) (
) 1 (
) ( )
(
x
x P x
) (
) 1 (
) (
) 1 (
) (
) 1 (
x n
1.2.1.3 Thuật toán và chương trình trên máy tính
a Thuật toán nội suy Lagrange
Bài toán Cho bảng giá trị (x i , y i ) (i=0 ,n) Tính giá trị của đa thức nội suy
Lagrange P(x) ta các điểm x cho trước theo công thức:
k i k
i i
k i
x x
x x y
Trang 13printf ("\n Nhap moc noi suy thu %d: ", i + 1);
printf ("\n x[%d]=", i); scanf ("%f ", &x[i]);
printf ("\n y[%d]=", i); scanf ("%f ", &y[i]);
}
//Hàm tính giá trị f(x) sử dụng công thức Lagrange
float Lagrange_KCD(float x[100], float y[100], int n, float x1)
Trang 14printf("\n ===Noi suy Lagrange moc khong cach deu===\n");
printf("\n nhap so moc noi suy:");
Trang 15getch();
}
1.2.2 Đa thức nội suy Lagrange với mốc nội suy cách đều
1.2.2.1 Xây dựng đa thức nội suy Lagrange
Giả sử hàm f(x) nhận các giá trị y i tại các điểm tương ứng x i (i=0 ,n), cách
2 1 ) 1 (
1 )
1 (
) )) (
1 ( ))(
1 ( ) (
1 (
i n i
i
n t i
t i t t
n t t
( ) (
) ) (
1 (
Vậy công thức nội suy Lagrange (1.6) trong trường hợp mốc nội suy cách đều
i n i i t
x f
) ( ) 1 (
hay
P(x 0 + th) =
!
) ) (
1 (
n
n t t
i n
i
i n i n
y i t
Trang 16Trong công thức (1.12) không phụ thuộc vào hàm số f(x), mốc nội suy và bước h Do đó chúng được tính sẵn, lập bảng để sử dụng nhiều lần
Trang 17printf("\n nhap khoang cach giua cac moc noi suy:");
scanf(" %f ", &h);
printf("\n nhap cac gia tri tai moc noi suy:");
for(i = 0; i <= n - 1; i++)
{
printf("\n nhap gia tri thu %d:", i+1);
printf("\n y[%d]=", i);
if((n - i) >= 0) s = s + to_hopC(n,i) * y[i] / (t-i);
else s = s - to_hopC(n,i) * y[i] / (t-i);
Trang 18float x0, y[100], h, x1, f, x[100];
printf("\n ===Noi suy Lagrange moc cach deu===\n");
printf("\n nhap so moc noi suy:");
Trang 192.1 Đa thức nội suy Newton với mốc nội suy không cách đều
2.1.1 Tỷ sai phân
Định nghĩa 2.1.1 Giả sử f : R R là hàm cho trước, các mốc nội suy được
sắp xếp theo thứ tự a x 0 < x 1 <…< x n b Hàm f(x) liên tục và xác định trên
[a,b] Ta định nghĩa :
+ Tỷ sai phân cấp 1 : f (x i ,x i+1 ) =
i i
i i
x x
x f x f
1
, (
i i i
i
x x
x x f x x f
+ Một cách tổng quát, tỷ sai phân cấp n :
f (x 0 , x 1 , … , x n ) =
n
x
f f
1
x
) x , x ( ) x , x (
) (
Hệ quả:
+ Tỷ sai phân là toán tử phi tuyến:
Trang 20) (
1 ' ( )
) (
1 ' ( )
) (
) (
Tính chất 2: Nếu P n (x) là đa thức bậc n thì tỷ sai phân bậc nhất của P n (x, x 0 )
là một đa thức bậc n – 1, tỷ sai phân bậc hai P n (x, x 0 , x 1 ) là một đa thức bậc
n – 2, … ,tỷ sai phân bậc n của P n (x, x 0 , x 1 , … ,x n ) là đa thức bậc 0 và tỷ sai
phân bậc n+1 của P n (x) là P n (x, x 0 , x 1 , … ,x n ) = 0
Bảng tỷ sai phân
Để tính các tỷ sai phân trong công thức của đa thức nội suy Newton ta lập bảng tỷ sai phân như sau(với n = 4):
2.1.2 Xây dựng đa thức nội suy Newton
Giả sử trên [a,b] cho n+1 giá trị khác nhau của đối số x 0 , x 1 , … ,x n và f(x i )
= y i (i=0 ,n ) Bây giờ ta xây dựng đa thức nội suy P(x) có bậc không cao hơn
n thỏa mãn : P(x i ) = y i (i=0 ,n)
x f (x) Tỷ sai
phân cấp 1
Tỷ sai phân cấp 2
Trang 21Theo định nghĩa tỷ sai phân ta có:
f(x, x 0 ) =
0 0
) (
x x
y x f
x x
x x f x x f
Vế phải của (2.2) bỏ đi số hạng cuối là cùng một đa thức bậc không cao hơn n
P(x) = y 0 + (x – x 0 )f(x 0 ,x 1 )+ … +(x – x 0 )…(x – x n-1 )f(x 0 ,x 1, …,x n ) (2.3)
Đa thức (2.3) được gọi là đa thức nội suy Newton (tiến) xuất phát từ mốc
x 0 Nó trùng với đa thức nội suy Lagrange (vì đa thức nội suy đều là duy nhất) nhưng nó được viết dưới dạng khác Cách xây dựng này dựa vào bảng tỷ sai
phân của hàm số f(x) nên đa thức được thành lập dần theo mốc nội suy và khi
thêm mốc nội suy không phải làm lại từ đầu như đối với đa thức nội suy Lagrange
Bằng cách làm tương tự ta xây dựng được đa thức nội suy Newton lùi xuất
phát từ mốc x n của hàm số f(x) :
P n (x) = y n + (x – x n )f(x n ,x n-1 ) + (x – x n )(x – x n-1 )f(x n ,x n-1 ,x n-2 ) +
+…+ (x – x n )(x – x n-1 )…(x – x 1 )f(x n ,x n-1 ,…,x 1 ,x 0 )
2.1.3 Đánh sai số của phương pháp
Từ công thức (2.2) và (2.3) ta viết được:
f(x) = P(x) +n1(x).f(x,x 0 , … ,x n )
với n1(x) = (x – x 0 )(x – x 1 ) …(x – x n-1 )(x – x n )
Trang 22Theo công thức đánh giá sai số ta suy ra sai số của đa thức nội suy Newton là:
0
) (
2.1.4 Thuật toán và chương trình trên máy tính
2.1.4.1 Thuật toán nội suy Newton với mốc nội suy không cách đều
Input: x, xi, yi (i=0, ,n)
Output: giá trị của hàm số f(x) tại một điểm trong khoảng chứa các mốc nội
2.6 f = f + t * P 0
2.1.4.2 Sơ đồ khối
Trang 24printf ("\n Nhap moc noi suy thu %d: ", i+1);
printf ("\n x[%d] = ", i); scanf (" %f ", &x[i]);
printf ("\n y[%d] = ", i); scanf (" %f ", &y[i]);
Trang 25{
for(i = 0; i < n - j; i++) {
P[i] = (P[i+1] - P[i]) / (x[i+1] - x[i]);
printf("\n ===Noi suy Newton moc khong cach deu===\n");
printf("\n nhap so moc noi suy:");
Trang 271
) (
n f x C
1
) (
h i n x f C
1
) ) ( ( ) 1
7 Giả sử f C n [a,b] và (x, x + nh) [a,b] Khi đó:
n n
2.2.2 Nội suy ở đầu bảng
Vì trường hợp các mốc nội suy cách đều chỉ là trường hợp đặc biệt của trường hợp các mốc nội suy không cách đều Do đó để xây dựng đa thức nội
suy Newton tiến xuất phát từ mốc x 0 của hàm số f(x) trong trường hợp các
mốc nội suy cách đều : x i = x 0 – ih (i=0 ,n ) ta làm như sau:
Ta có, tỷ sai phân cấp 1 : f(x 0 , x 1 ) =
0 1
0 1
x x
y y
;
sai phân cấp 1 : y 0 = y 1 – y 0
Trang 28 f(x 0 , x 1 ) =
0 1
0
x x
t
y 0 + 2
! 2
) 1 (
t t
y 0 + … + n
n
n t t
1 (
y 0 (2.4)
Đa thức (2.4) được gọi là đa thức nội suy Newton tiến với mốc nội suy
cách đều xuất phát từ mốc x 0 của hàm số f(x)
2.2.3 Nội suy ở cuối bảng
Các mốc nội suy được sắp xếp theo thứ tự giảm dần x n >x n-1 >…>x 0 bằng cách xây dựng tương tự trên ta xây dựng được đa tức nội suy Newton lùi như sau:
P(x) = y n +
! 1
t
y n-1 + 2
! 2
) 1 (t
t
y n-2 + … + n
n
n t t
!
) 1 ) (
1 (
y 0 (2.5)
Đa thức (2.5) được gọi là đa thức nôi suy Newton lùi với mốc nội suy cách
đều xuất phát từ các mốc x n của hàm số f(x)
2.2.4 Nội suy giữa bảng
Các công thức Newton tiến, lùi chỉ mang tính đặc trưng một phía Nhiều khi ta cần sử dụng các công thức nội suy chứa giá trị trước và sau giá trị ban đầu Các công thức nội suy thông dụng nhất là các công thức chứa sai phân
trung tâm Giả sử các mốc nội suy được sắp xếp như sau: x i = x 0 + ih (i =
0,1,…,n)
2.2.4.1 Công thức nội suy Gauss I
Trang 29Đa thức nội suy tìm dưới dạng “hai tiến, một lùi”:
P(x) = a 0 + a 1 (x – x 0 ) + a 2 (x – x 0 )(x – x 1 ) + a 3 (x – x -1 )(x – x 0 )(x – x 1 )+ +…+a 2n-1 (x – x –(n-1) ) … (x – x -1 )(x – x 0 ) … (x – x n-1 ) +
)!
1 2
h i
y
; a 2i = i i
i
h i
y
2 2
)!
2 (
t
y 0 + 2
! 2
) 1 (t
t
y -1 + 3
! 3
) 1 ( ) 1 (t t t y -1 +
! 4
) 2 )(
1 ( ) 1 (
t t t t
! 5
) 2 )(
1 ( ) 1 )(
2 (
) 1 ) (
1 ( ) 1 ) (
t t n
t t n
)!
2 (
) ) (
1 ( ) 1 ) (
1 (
2.2.4.2 Công thức nội suy Gauss II
Ta tìm công thức nội suy dưới dạng “một tiến, một lùi”
P(x) = a 0 + a 1 (x – x 0 ) + a 2 (x – x -1 )(x – x 0 ) + a 3 (x – x -1 )(x – x 0 )(x – x 1 )+ +…+a 2n-1 (x – x –(n-1) ) … (x – x -1 )(x – x 0 ) … (x – x n-1 ) +