Mục tiêu của phép nội suy khá nhiều, nhng chủ yếu tìm thuật toán đơn giản tính giá trị f x cho những x không nằm trong bảng x , i y i, i 0 ,n và một chơng Luận văn đợc chia làm 2 chơng:
Trang 1Khoa Toán
Sử dụng ngôn ngữ lập trình C#
NỘI SUY
Khoá luận tốt nghiệp đại học Ngành cử nhân khoa học toán-Tin
Chuyên ngành:
Xác suất Thống kê và Toán ứng dụng
Cán bộ hớng dẫn: PGS.TS Trần Xuân Sinh Sinh viên thực hiện: Phạm Thị Thanh Mai
Lớp: 47Toán-Tin ứng dụng
Vinh, 5/2010
MỤC LỤC trang MỞ ĐẦU 3
Chơng 1 4
CáC KIếN THứC CƠ Sở 4
1.1 ĐA THỨC NỘI SUY 4
1.1.1 Đa thức nội suy bằng đại số 4
1.1.2 Đa thức nội suy Lagange 5
1.1.3 Sai số của phép nội suy 7
1.1.3.1 Sai số phơng pháp 7
1.1.3.2 Sai số tính toán 10
Trang 21.1.4 Đa thức nội suy Newton 10
1.1.4.1 Tỷ hiệu 11
1.1.4.2 Đa thức nội suy Newton 11
1.1.5 Đa thức với mốc nội suy cách đều 12
1.1.5.1 Đa thức Chebysev 12
1.1.5.2 Chọn mốc nội suy 13
1.1.5.3 Sai phân và các tính chất 14
1.1.5.4 Một số quy tắc nội suy hàm số trên lới đều 14
1.1.5.5 Bảng sai phân 15
1.1.5.6 Nội suy ở đầu bảng 16
1.1.5.7 Nội suy ở cuối bảng 17
Chơng 2 18
THIếT LậP CHƯƠNG TRìNH BằNG NGÔN NGữ LậP TRìNH c# 18
2.1 Giới thiệu về C# 18
2.1.1 C# là gì? 18
2.1.2.Lịch sử ra đời của C# 19
2.1.3 Chức năng của C# 19
2.2 Cấu trúc và giao diện của chơng trình 20
KẾT LUẬN 31
tAi liÊu tham khảo.………32
Mở ĐẦU
“Xấp xỉ hàm số bằng đa thức nội suy” là một đề tài khá thú vị Trong thực tế,
nhiều khi ta phải tìm hàm y f (x), chỉ biết các giá trị của y i tại các điểm
a b
mà độ chính xác không kém bao nhiêu
Mục tiêu của phép nội suy khá nhiều, nhng chủ yếu tìm thuật toán đơn giản tính giá trị f (x) cho những x không nằm trong bảng x , i y i, (i 0 ,n) và một chơng
Luận văn đợc chia làm 2 chơng:
Chơng 1: Trình bày một số định nghĩa và tính chất về đa thức nội suy, đa
thức nội suy Lagrange, đa thức nội suy Newton, các kiến thức cơ sở để thiết lập
chơng trình tính giá trị hàm y tại các mốc nội suy đã cho nhờ đa thức nội suy.
Trang 3Chơng 2: Đa ra các cấu trúc thuật toán, cấu trúc của chơng trình và thiết kế
giao diện bằng ngôn ngữ lập trình C#
Do khóa luận đợc tiến hành tìm hiểu và hoàn thành trong một thời gian ngắn
Đồng thời với dung lợng của khóa luận và khả năng có hạn của mình tôi cha thểkhai triển và khai thác hết mọi vấn đề một cách sâu sắc Vì vậy, khóa luận của tôikhông thể tránh khỏi những thiếu sót
Qua khoá luận này, tôi xin bày tỏ lòng biết ơn sâu sắc đến PGS.TS TrầnXuân Sinh, ngời đã dành thời gian, tận tình hớng dẫn tôi trong suốt quá trình tôilàm khóa luận Tôi cũng xin gửi lời chân thành cảm ơn đến gia đình, bạn bè đã
động viên, giúp đỡ nhiệt tình, tạo điều kiện tốt nhất cho tôi trong quá trình họctập, nghiên cứu và hoàn thành luận văn này
Vinh, tháng 5 năm 2010
Tác giả
Chơng 1
CáC KIếN THứC CƠ Sở
1.1 ĐA THỨC NỘI SUY
1.1.1 Đa thức nội suy bằng đại số
Ngoài ý nghĩa lịch sử ra, đa thức đại số thờng đợc dùng trong phép nội suyvì lý do đơn giản sau: các phép cộng, trừ, nhân, đạo hàm, tích phân dễ dàng thực
i i
m x a x P
0
)
) ( : ) ( i i i
Trang 4i m
j
j i
0
2 0 0
n n n
n
n n
x x x
x x
x x
x
x x
x
Suy ra ph¬ng tr×nh (1.1) cã nghiÖm duy nhÊt
1.1.2 §a thøc néi suy Lagange
Sau ®©y ta sÏ tr×nh bµy c¸ch x©y dùng ®a thøc néi suy mµ kh«ng cÇn gi¶i hÖ (1.1)
)(
) (
(
) ) (
)(
) (
( ) ( 1
1 1
0
1 1
0
n i i i i i i
n i
i
x x x
x x x x x
x x x
x x x x x x
)(
) (
(
) ) (
)(
) (
(
1 1
0
1 1
0
n i i
i i i i
n i
i
x x x
x x x x x
x x x
x x x x x
Trang 5Nếu các mốc nội suy cách đều, tức là x ij x j h, (i 0 ,n 1 ), thì đặt 0 ,
h
x x
t
hay xx0th ta đợc
P i (x) = P i (x0+ht) =
) (
) ) (
1 ( )
1 (
i t n
n t t
t
C i n i n
i
i n
n
y i t
C n
n t t
t th x P
0
1 0
) 1 (
!
) ) (
1 ( )
Trong công thức (2.1), các hệ số ( 1 )ni C n i không phụ thuôc vào hàm số f (x),
Trang 6Sơ đồ khối tính giá trị hàm f (x) theo phơng pháp nội suy lagrange rất đơn giản
Trang 7VÝ dô 1: T×m ®a thøc néi suy bËc 2 cña hµmy 3 x trªn ®o¹n [ 1 , 1 ] t¹i c¸c mèc néi suy x0 1 ,x1 0 ,x2 1 ,ta cã y0 1 / 3 ,y1 1 ,y2 3 ;
) 6 8 4 ( 6
1 1 ) 1 1 (
) 1 ( 3 ) 1 0 )(
1 0 (
) 1 )(
1 ( 1 ) 1 1 )(
0 1 (
) 1 )(
0 ( 3
1 )
2 1 3
Trang 8Ví dụ 2: Tìm đa thức nội suy bậc 4 trùng với hàm y =2cos
640 196
9
) 3
4 2 ( 2 ) 3
4 2 )(
2 2 (
) 3
4 ( ) 3
4 )(
2 ( 0 ) 2 3
4 ( 3
4 ) 3
4 3
4 )(
2 3
4 (
) 2 ( ) 3
4 )(
2 ( 1 ) 2 0 )(
3
4 0 )(
3
4 0
3
4 )(
3
4 )(
4 )(
3
4 3
4 )(
3
4 )(
2 3
4 (
) 2 )(
3
4 ( ) 2 ( 1 ) 2 2 )(
3
4 2 )(
2 )(
3
4 ( )
x x x x
x x
x
x
x x
x x x
x x x
x = 1 thì y(1) = f(1) P(1) 1 4156
Sai số f( 1 ) P( 1 ) 0 0015
Công thức nội suy Lagrange trình bày ở trên có u điểm là đơn giản nhng nếuthêm mốc nội suy phải tính lại toàn bộ Nhợc điểm này đợc khắc phục trong côngthức nội suy Newton …
1.1.3 Sai số của phép nội suy
1.1.3.1 Sai số phơng pháp
).
, 0 )(
( ) (x f x i n
Xét hàm hỗ trợ
), ( ) ( : ) (z R z k z
trong đó
.) ( ) (
i
x z z
) (
) ( ) (
x
x p x f k
Mặt khác F(x i) 0 (i 0 ,n) do đóF (z)có n 2 nghiệm phân biệt x,x0,x1, ,x n Theo định lý Role F, (z) có ( n 1 ) nghiệm vv…, F(n 1 )(z) có nghiệm a, b
Trang 9, )!
1 ( ) ( )
)(
1 (
f n
)!
1 (
) ( ) 1 (
So sánh hai cách viết của k ta có:
) ( )!
1 (
) ( )
(
) 1 (
x n
f x R
n
M x
P x
; 180
11
; 5 36
; 3
; sin )
190809
0 11 sin ) ( sup ( 4 )
b x a
Vậy
9
10 106 1 ) 180
11 30
)(
20 30
)(
180
7 30
)(
36 30
(
! 4
190809
0 ) 6 ( 6
có
), ( )
( )
0 th h t x
Trong đó (t) t(t 1 ) (t n). nh vậy ta quy về việc nghiên cứu dáng điệu của
Trang 102
2 2
) 2 ( ) (
2 2
2 2
n z
2) ( 1 ) ( 1 ) ( 1 ) 1 (t)
n t
t n t n
t t
1 2
1 1
1
; 2
1 ,
n t n
t n t
t n t
thực hiện phép ngoại suy sẽ mắc phải sai số lớn
độ chính xác thấp đối với các đoạn ngoài rìa
1.1.3.2 Sai số tính toán
) ( ) (
) ( )
n
i i x x x
x y
x P
x y
x P
0 ( ) ,( )
) ( )
(
Trang 11
x y
p p
i n
i t
c n
n t t
t p p
0
!
1
1.1.4 §a thøc néi suy Newton
1.1.4.1 Tû hiÖu §Þnh nghÜa tû hiÖu cÊp 1, 2, , n nh sau
i i
x x
y y
, i = 1, 2, , n.
Tû hiÖu cÊp 2
f[x i +1 , x i , x i -1] =
1 1
i i i
i
x x
x x f x x f
Tû hiÖu cÊp n
f[x n , x n -1 , , x0] =
0
0 1
1 ] [ , , ] , ,
[
x x
x x
f x x f
n
n n
+) Tû hiÖu cÊp n cña ®a thøc bËc n lµ h»ng sè.
1.1.4.2 §a thøc néi suy Newton
Ta cã f[x, x0] =
0
0 ) ( ) (
x x
x f x f
, [
x x
x x f x x f
Trang 12) (
) 1 (
) (
) 1 (
+ Công thức (*) gọi là công thức nội suy Newton tiến Bằng phơng pháp tơng
tự, ta có công thức nội suy lùi nh sau:
1.1.5 Đa thức với mốc nội suy cách đều
b x
x
b x
) (
Trang 131 2
) ( )
x x
x T Max x
P
Chứng minh: Giả sử tìm đợc đa thức P(x) x a 1x n 1 a0
n n
Nh vậy G (x) luân phiên đổi dấu qua x i , i = 0, 1, , n, do đó G (x) có ít nhất n
2
) (
n
n x T
Điều này mâu thuẫn với giả thiết
1
1 )
Trang 141 2
x T x x x x x
2
) ( )
) (
( )
1 ( ) ( ) (
n
M x
f x
a b
a b x t
1 2 cos )
n
i a
b
Ước lợng tốt nhất của phép nội suy trong trờng hợp này là
1 2
1 2
) ( ) 1 ( )) (
M x
f x
1.1.5.3 Sai phân và các tính chất
1 của f(x) là đại lợng f(x) f(xh) f(x) Tỷ sai phân cấp 1 của f(x) là
Các tính chất của sai phân:
f g f g g
Trang 154) Nếu P (x) là đa thức bậc n thì theo công thức Taylor
) (
! )
( ) (
0
x p i
h x
p h x p
i i
n f x c nh
x
f
0
) ( )
i i n
n f x c f x h
n x f nh
x f
0
) ( )
( ) 1 (
) ) 1 ( ( ) 1 ( )
(
i
i n i
n i
i n i n
i n i n
1 ( ) ( 1 ) ( ( ) ) )
1 ( ) 1 ( ) ( ] 1 ) 1 [(
) ( ( )
Giả sử công thức đúng cho mọi k n Ta chứng
( )
' ( )
' ( )
' ( )
f( ) ( ) ( )
Trang 161.1.5.4 Một số quy tắc nội suy hàm số trên lới đều
i i
i i
i i i
y y
y y
y y
y y
y y y
1 1 1 1
1 2
j n i
j n
j i
n
n j
i j j n i
n
y C y
y c y
0
0
) 1 (
i
y
1.1.5.5 Nội suy ở đầu bảng
nội suy dới dạng
) ) (
(
) )(
( ) ( )
(x a0 a2 x x0 a2 x x0 x x1 a n x x0 x x n1
Trang 17Cho x x0, ta đợc a 0 y0 ;
h
y a x
h i
y a
) 1 (
t t
n
n t t
t
0
!
) 1 ) (
1 (
Ta gọi công thức nêu trên là công thứ Newton tiến
1.1.5.6 Nội suy ở cuối bảng
th x x h
x x
h a a x
x y a x
n n
y a
n t t
t y
t t y
t y
th
x
n n
!
1
1
! 2
1
! 1
1 1
0 1
2 1
f(x n +ht) P(x n +ht) = y n + t1n1 + 2 ! 2 2
) 1 (
n t
t
n
n t t
t
0
!
) 1 ) (
1 (
Chú ý
a) Công thức nội suy Newton tiến (lùi) chỉ là một cách viết khác của côngthức Lagrange
Newton tiến (lùi) thì độ chính xác cao hơn
c) Dùng công thức nội suy Newton tiến (lùi) không phải tính lại từ đầu nếuthêm mốc nội suy mới
Trang 18Chơng 2 THIếT LậP CHƯƠNG TRìNH BằNG NGÔN NGữ LậP TRìNH c# 2.1 Giới thiệu về C#
2.1.1 C# là gì?
C# là 1 ngôn ngữ lập trình đa năng và khá toàn diện hiện nay C# đợc pháttriển bở Microsoft và cũng chính là 1 phần của NET Phù hợp với nhiều tiêuchuẩn nh ECMA (ECMA-334) và ISO (ISO/IEC 23270) C# là 1 trong 44 ngônngữ đợc hỗ trợ bởi Common Language Runtime của .NET Framework.C# là ngôn ngữ lập trình đơn giản, hiện đại, có tính tổng quát và dễ dàng định h-ớng cho dự án Gói C# gần đây nhất chính là bản 3.0 và bản này chỉ có thể chạyvới >NET Framework 3.5 Phiên bản 4.0 đang đợc hoàn tất
C# có khoảng 80 từ khóa và hơn 10 kiểu dữ liệu dựng sẵn, những C# có tínhdiễn đạt cao C# hỗ trợ lập trình có cấu trúc, hớng đối tợng, hớng thành phần(component oriented)
Trọng tâm của ngôn ngữ hớng đối tợng là lớp Lớp định nghĩa kiểu dữ liệumới, cho phép mở rộng ngôn ngữ theo hớng cần giải quyết C# có những từ khóadánh cho việc khai báo lớp, phơng thức, thuộc tính (property) mới C# hỗ trợ đầy
đủ các khái niệm trụ cột trong lập trình hớng đối tợng: đóng gói, kế thừa, đa hình
Định nghĩa lớp trong C# không đòi hỏi tách rồi các tập tin tiêu đề với tập tincài đặt nh C++ Hơn thế, C# hỗ trợ su liệu mới cho phép su liệu trực tiếp trong tậptin mã nguồn Đến khi tập tin biên dịch sẽ tạo tập tin su liệu theo định dạng XLM.C# hỗ trợ khái niệm giao diện, interface (tơng tự java) Một lớp chỉ có thể kếthừa duy nhất một cha nhng có thể cài đặt nhiều giao diện
C# cung cấp những đặc trng lập trình hớng thành phần property, sự kiện vàdẫn hớng khai báo (đợc gọi là attribute) Lập trình hớng component đợc hỗ trợCLR thông qua siêu dữ liệu (metadata) Siêu dữ liệu mô tả các lớp bao gồm cácphơng thức và thuộc tính, các thông tin bảo mật…
2.1.2 Lịch sử ra đời của C#
Vào năm 1996, Sun Microsystem cho ra đời ngôn ngữ lập trình Java vàMicrosoft đã nhanh chóng mua bản quyền sản phẩm cho hệ điều hành của mình.Java là 1 ngôn ngữ lập trình chạy nền độc lập đem lại sự nổi tiếng cho Sun lúc bấygiờ nhng Microsoft không chịu thua Họ tập hợp đội ngũ nhân lực hoạt động cật
Trang 19lực để tạo ra chơng trình không cần phải dùng phần mềm của Sun chạy nền Kếtquả là có 1 ngôn ngữ đợc ra đời và có cấu trúc khá giống Java C++ ra đời từ đấy.Trong suốt quãng thời gian phát triển NET, toàn bộ các th viện cũ của ngônngữ và các trình biên soạn đợc gọi là Simple Managed C (SMC) Tháng 1 năm
1999, Ander Hejlsberg đã xây dựng thành công 1 ngôn ngữ mới gọi là "Cool".Tuy nhiên, Microsoft không thích cái tên này cho lắm Cùng thời điểm này, dự
ánh NET đợc phát hành ra thị trờng tại cuộc họp của các chuyên gi lập trình vàotháng 7 năm 2000 và cũng chính từ đây "cool" chính thức chuyển tên thành C#.Các th viện ASP.NET runtime cũng đợc tích hợp vào
* Không thể quản lý bộ nhớ 1 cách thoải mái tuy nhiên, bó sẽ tự thu gomnhững câu lệnh vô nghĩa
*C# bản mật an toàn hơn C++
Trang 202.2 Cấu trúc và giao diện của chơng trình
Hình 1 Chơng trình gồm có 4 Form(Giao diện )chính
Form1: Là giao diện chính của chơng trình có giao diện nh hình dới đây:
Trong Form1 gồm menu Các Phép nội suy và Trợ giúp
Trong menu Các Phép nội suy có ba menu con là Newton và Lagrange,Thoát
Mỗi menu con sẽ đa chúng ta tới các form(giao diện) để thực hiện các phép nội suy tơng ứng đó là Nội suy Newton và nội suy Lagrange
Đoạn code để hiện giao diện tính nội suy newton khi nhấp vào menu Newton sẽ là:
private void newTonToolStripMenuItem_Click(object sender, EventArgs e)
{
frmNewton fnt = new frmNewton();//xin một đối tợng mới là frmNewton fnt.Show();//sau đó cho hiện giao diện nay lên bằng phơng thức Show
Trang 21Đoạn code khi thoát chơng trình khi nhấp chuột vào nút Thoát sẽ là:
private void thoatToolStripMenuItem_Click(object sender, EventArgs e)
{
Application.Exit();//toàn bộ ứng dụng sẽ đợc giải phóng
}
Đoạn code để hiện giao diện giới thiệu về tác giả của chơng trình là
private void tácGiaToolStripMenuItem_Click(object sender, EventArgs e)
{
frmAbout fab = new frmAbout();//xin một đối tợng mới là frmAbout
fab.Show();//cho hiện form này lên bằng phơng thức Show
Form Newton là giao diện để thực hiện các phép nội suy của newton.
Nội dung code ở giao diện tính nội suy newton nh sau:
Với giao diện ban đầu nh hình vẽ khi ta nhập vào số ô dự kiến sẽ nhập giá trị của
x và y tơng ứng là bao nhiêu ví dụ có 5 giá trị x, y tơng ứng nhau thì ta nhập vào
đó là số 5 và nhấp chuột vào Nhập số ô của x ta sẽ có đoạn code nh sau để hiện ra giao diện cho phép ta thực hiện nội suy newton nh ở hình 3 là
private void btnNhapDaySo_Click(object sender, EventArgs e)
{
Trang 22//nếu ô text đã nhập giá trị tức là khác rỗng thì thực hiện xin
// mới số text tơng ứng x,y để nhập vào
tx[j].Size = new System.Drawing.Size(54, 20);
//thêm ô text vào giao diện tính nội suy bằng phơng thức Add this.Controls.Add(tx[j]);
Trang 23}
}
Trang 24Hình 2
Phần tính toán nội suy newton ở Hình 3 ta có đoạn code thể hiện chơng trình nh sau:
Nhập các giá trị x,y vào các ô đã đợc hiển thị ở dới
Nhập giá trị của x cần nội suy từ các giá trị x,y đã nhập sau đó ta nhấp chuột vào nút NộI SUY ta sẽ có kết quả của y
Đoạn code đơc thực hiện khi nhấp chuột vào nút NộI SUY là
private void btnNoiSuy_Click(object sender, EventArgs e)
{
//tính các giá trị delta ban đầu
Trang 25for (int i = 0; i < Convert.ToInt32(txtsopt.Text); i++)
delta[i, k] = (delta[i, k - 1] - delta[i - 1, k - 1]) /
(Convert.ToSingle(tx[i].Text) - Convert.ToSingle(tx[i - k].Text));
}
}
giatri = delta[0, 0];
float tich = 1;
//áp dụng đúng công thức nội suy newton tại đây
for (int u = 1; u < Convert.ToDouble(txtsopt.Text); u++)
Trang 26Hình 3 Form Lagrange là giao diện để thực hiện các phép nội suy của lagrange.
Với giao diện tính nội suy lagrange hoàn toàn tơng tự nội suy newton với hình 4
Và đoạn code chính để tính nội suy Lagrange là:
private void btnNoiSuy_Click(object sender, EventArgs e)
{
double giatri=0;
Trang 27x x x x x
x
L
n k k
k k k k
n k
0
1 1
Trang 29H×nh 6
Form frmAbout lµ giao diÖn giíi thiÖu t¸c gi¶ viÕt ch¬ng tr×nh.
Trang 30Hình 7
KẾT LUẬN
Luận văn đã đạt đợc một số kết quả sau:
Trang 311 Hệ thống đợc một số kiến thức cơ bản, cần thiết về lý thuyết của đa thứcnội suy Lagrange và đa thức nội suy Newton làm công cụ để giả quyết các bàitoán về tìm giá trị của hàm tại các điểm khi biết các mốc nội suy cho trớc.
2 Giới thiệu tổng quát về ngôn ngữ lập trình visual C#
3 Viết chơng trình chạy thử bằng ngôn ngữ lập trình C#, chơng trình tìm giátrị của hàm cho trớc bàng phơng pháp Lagrange và phơng pháp Newton
Sau khi hoàn thành khóa luận tôi thấy có một số vấn đề đặt ra:
1 Chơng trình ứng dụng cần hoàn thiện hơn, thêm nhiều chức năng thongdụng khác
2 Nghiên cứu ứng dụng C# để giải các bài toán khác
Tài liệu tham khảo
[1] Phạm Kỳ Anh, Giải tích số, NXB Đại học quốc gia Hà Nội, 1996.
[2] Lê Văn Doanh và Trần Khắc Tuấn, 101 thuật toán và chơng trình, NXB
Khoa học và kỹ thuật, Hà Nội,1996
[3] Phan Văn Hạp và Lê Đình Thịnh, Phơng pháp tính và các thuật toán, NXB
Giáo dục, 2000
[4] Nguyến Hữu Khang, Kỹ thuật lập trình ứng dụng C#>net toàn tập, NXB
Lao động - Xã hội, 2002