LỜI CẢM ƠN Để hoàn thành khóa luận với đề tài “Sử dụng ngôn ngữ lập trình Wolfram Mathematica xấp xỉ hàm số bằng đa thức nội suy”, bên cạnh sự nỗ lực của bản thân đã vận dụng những kiến
Trang 1LỜI CẢM ƠN
Để hoàn thành khóa luận với đề tài “Sử dụng ngôn ngữ lập trình Wolfram Mathematica xấp xỉ hàm số bằng đa thức nội suy”, bên cạnh sự nỗ lực của bản thân đã vận dụng những kiến thức tiếp thu được ở trường, tìm tòi học hỏi, em luôn nhận được sự giúp đỡ, hướng dẫn tận tình của cô giáo Phạm Hồng Minh
Em xin tỏ lòng biết ơn sâu sắc nhất đến cô – người đã trực tiếp hướng dẫn, chỉ bảo để em hoàn thành khóa luận của mình
Em xin chân thành cảm ơn Ban giám hiệu trường Đại học Quảng Bình, toàn thể các thầy cô, đặc biệt là thầy cô giáo khoa Khoa học tự nhiên đã tận tình giảng dạy và giúp đỡ em trong suốt thời gian qua Cũng như những sự động viên, giúp đỡ từ gia đình và bạn bè đã tạo điều kiện thuận lợi cho em trong suốt quá trình thực hiện khóa luận
Mặc dù đã có nhiều cố gắng để thực hiện khóa luận một cách hoàn chỉnh nhất, song với thời gian và khả năng còn hạn chế, khóa luận không thể tránh khỏi những thiếu sót Em rất mong nhận được sự góp ý chân tình từ các thầy, cô
Trang 2MỤC LỤC
LỜI CẢM ƠN i
MỤC LỤC ii
PHẦN MỞ ĐẦU 1
1 Lý do chọn đề tài 1
2 Mục đính nghiên cứu 2
3 Nhiệm vụ nghiên cứu 2
4 Đối tượng và phạm vi nghiên cứu 2
5 Phương pháp nghiên cứu 2
PHẦN NỘI DUNG 3
CHƯƠNG I 3
KIẾN THỨC CHUẨN BỊ 3
I ĐẶT VẤN ĐỀ 3
II ĐA THỨC NỘI SUY LAGRANGE 3
1 Đa thức nội suy Lagrange với mốc bất kỳ 3
2 Đa thức nội suy Lagrange với mốc cách đều 7
3 Sai số của đa thức nội suy 9
III ĐA THỨC NỘI SUY NEWTON 11
1 Tỷ sai phân và một vài tính chất 11
2 Đa thức nội suy Newton với mốc bất kỳ 13
3 Sai phân và một vài tính chất 15
4 Đa thức nội suy Newton với mốc cách đều 17
CHƯƠNG II 25
ỨNG DỤNG CỦA MATHEMATICA 25
ĐỂ GIẢI BÀI TOÁN NỘI SUY 25
I Tổng quan về ngôn ngữ lập trình Mathematica 25
1 Giới thiệu sơ bộ về ngôn ngữ lập trình mathematica: 25
1.1.Giới thiệu 25
1.2.Giao diện tương tác của Mathematica 26
Trang 32 Các quy tắc cơ bản về ngữ pháp của Mathematica: 26
3 Tính toán cơ bản trong Mathematica 27
3.1 Các phép tính đại số 27
4 Danh sách trong Mathematica 30
4.1 Xây dựng danh sách 30
4.2 Đếm các phần tử trong danh sách 31
4.3 Chuyển đổi dạng một danh sách 31
4.4 Tính toán với danh sách: 31
5 Đồ họa với Mathematica 32
5.1.Vẽ đồ thị trong mặt phẳng 32
II Lập trình Mathematica trong giải bài toán nội suy 35
1 Phép nội suy Lagrange trong Mathematica 35
2 Phép nội suy Newton trong Mathematica 36
KẾT LUẬN 44
TÀI LIỆU THAM KHẢO 46
Trang 4PHẦN MỞ ĐẦU
1 Lý do chọn đề tài
Lý thuyết nội suy – một lý thuyết toán học có lịch sử phát triển lâu dài gắn liền với tên tuổi của nhiều nhà toán học nổi tiếng trên thế giới như Lagrange, Newton, Chebyshev,…
Lý thuyết nội suy còn là cơ sở cho nhiều lý thuyết toán học khác nhau, chẳng hạn trong việc giải gần đúng phương trình vi phân thường, phương trình đạo hàm riêng nhờ sai phân…
Bài toán cơ bản của lý thuyết nội suy là dựng một hàm đơn giản xấp xỉ một hàm cho trước được cho bằng bảng hoặc là có công thức giải tích phức tạp Từ
đó ta có thể tính gần đúng đạo hàm, gần đúng tích phân hay giải gần đúng một
số bài toán về phương trình đã nêu
Về cơ bản bài toán nội suy đã được sử dụng sớm bởi Newton vào năm
1686, được Lagrange sử dụng, đề xuất lại năm 1795 và ước lượng sai số cổ điển được Cauchy thiết lập năm 1840
Các vấn đề về lý thuyết nội suy rất đa dạng, nhưng trong đề tài này sẽ trình bày chủ yếu về cách sử dụng đa thức nội suy Lagrange và đa thức nội suy Newton để tính giá trị của hàm số f(x) cho dưới dạng bảng tại một số giá trị trong bảng
Song song với đó là tìm hiểu về ngôn ngữ lập trình Mathematica nổi lên với ưu điểm vượt trội về giao diện thân thiện, về khả năng đồ thị siêu việt và khả năng xử lý số liệu nhanh đã trở thành một công cụ đắc lực cho các nhà khoa học Với phiên bản mới nhất là 7.0 Ngoài ra, Mathematica còn được ứng dụng để giải các bài toán nội suy bằng cách sử dụng các thao tác đơn giản mà không cần lập trình nặng nề như trước Nên việc tìm hiểu về Mathematica là rất cần thiết Chính vì các lý do đó em đã chọn nghiên cứu đề tài “Sử dụng ngôn ngữ lập trình Wolfram Mathematica xấp xỉ hàm số bằng đa thức nội suy” nhằm cung cấp một tài liệu cơ bản về các vấn đề liên quan đến nội suy và ứng dụng của phần mềm Mathematica trong giải toán nội suy
Trang 53 Nhiệm vụ nghiên cứu
- Tập trung tư liệu, nghiên cứu lý thuyết
- Nghiên cứu về cấu trúc của các đa thức nội suy
- Nghiên cứu về một số bài toán nội suy, một số công thức cơ bản của nội suy
- Nghiên cứu một số ứng dụng của lý thuyết nội suy
4 Đối tượng và phạm vi nghiên cứu
- Đa thức nội suy Lagrange, đa thức nội suy Newton và các vấn đề liên quan
- Ngôn ngữ lập trình Mathematica và ứng dụng của nó trong vẽ đồ thị và giải bài toán nội suy
5 Phương pháp nghiên cứu
- Phương pháp nghiên cứu lý thuyết: Đọc và tìm hiểu các đa thức nội suy, phân tích, làm rõ các bước hình thành nên đa thức
- Bằng những ví dụ cụ thể để áp dụng đa thức nội suy
- Thực hiện các lập trình cơ bản để xây dựng đa thức nội suy và vẽ đồ thị
Trang 6PHẦN NỘI DUNG CHƯƠNG I KIẾN THỨC CHUẨN BỊ
I ĐẶT VẤN ĐỀ
Trong thực tế tính toán, ta thường phải tính giá trị của hàm số y f x( )với
x bất kì trên đoạn [ , ]a b , trong khi chỉ biết các giá trị:
( )
y f x ,x i [ , ],a b i 0,1, , n
Ở một số trường hợp khác, biểu thức giải tích của ( )f x đã biết, nhưng quá
phức tạp Với những trường hợp như vậy, người ta thường xây dựng một hàm
số ( )P x đơn giản và thỏa mãn điều kiện ( )P x i f x( )i , i 0,1, ,n và
Mục đích của phép nội suy khá nhiều, nhưng chủ yếu là tìm thuật toán đơn giản tính giá trị f x( )cho những xkhông nằm trong bảng , ,x y ( i i i 0,1, , ).n
Một bộ số liệux yi, i (i 0,1, , )n và một chương trình ngắn gọn có thể thay một bảng rất dài các giá trịx f xi, ( )i Ngoài ra sử dụng kết quả của phép
nội suy, có thể tìm đạo hàm f '( )x hoặc tích phân của f x( )trên đoạn [a,b]
II ĐA THỨC NỘI SUY LAGRANGE
1 Đa thức nội suy Lagrange với mốc bất kỳ
Trang 7i j
j i i
i j
x x x
Trang 10( )( )
( ) ' ( )
n j
x x
Trang 11( 1) ( )( )
n
h t t t n x
j i
n
n j
j i
n j n
j i
Trong công thức (2), các hệ số ( 1) n j C n j là không phụ thuộc vào hàm
số ( )f x , mốc nội suy, bước h Nên có thể tính sẵn và lập bảng để sử dụng trong
quá trình tính toán
Nhận xét:
Trang 12 Đa thức nội suy Lagrange có ưu điểm là đơn giản, dễ tính và nhược điểm là nếu thêm mốc nội suy thì phải tính lại từ đầu
Nếu f x( )là đa thức, deg ( )f x n thìL x n( ) f x( )
Ví dụ 3: Cho hàm số y f x( )cho bởi bảng sau:
Trang 13Định lý Rolle phát biểu: Cho f x( ) là hàm số thực liên tục trên [a,b], và khả
vi trên (a, b) và ( ) f a f b( ) Khi đó tồn tại điểm ( , )a b sao cho f '( ) 0
Khi thay ( )f x bởiL x n( )thì yêu cầu đánh giá L x n( ) f x( ) là cần thiết tất yếu (với x x i, i 0,1, ,n)
Giả sử f x( )có đạo hàm liên tục đến cấp(n1)trên đoạn [a, b]
XétF x( ) f x( )L x n( )Cn1( )x , trong đó C là hằng số, được chọn từ điều kiện ( )F x 0, với xlà điểm cần đánh giá sai số, từ đó:
1
( ) ( )
( )
n n
f x L x C
x
Dễ thấyF x( )có ít nhất (n2)nghiệm x x0, 1, , xn, vàx ở trên đoạn [ , ]a b ,
theo định lý Rolle thì F x'( )có ít nhất (n1)nghiệm phân biệt trên ( , )a b , và ( 1)
Trang 14Ví dụ 4: Tìm đa thức nội suy Lagrange của hàm số ysinx với
III ĐA THỨC NỘI SUY NEWTON
1 Tỷ sai phân và một vài tính chất
Trang 15a) Khái niệm tỷ sai phân
Giả sử hàm số thựcy f x( )xác định trên [a, b]
' ( )
k
i k
ii) Tỷ sai phân là hàm đối xứng đối với các x i
iii) Tỷ sai phân cấp(m 1)của đa thức bậc mlà đồng nhất 0
Trang 16P x x x( ; 0; 1; ;x k) là đa thức có bậc [m (k 1)]
Vậy P x x x( ; 0; 1; ;x m1) là đa thức bậc 0, từ đó:
P x x x( ; 0; ; ;1 x m1;x m)0
2 Đa thức nội suy Newton với mốc bất kỳ
Với nội suy Newton, khi sử dụng các mốc không cách đều thì công thức nội suy phức tạp hơn
Trong thực tế, các điểmx0,x1, ,x ncó thể không cách đều Lúc này khoảng cáchx i1 x ikhông phải là hằng số
Giả sử hàm số thực y f x( ) xác định trên đoạn [ , ]a b và x i [ , ]a b , 0,1, ,
i n và x i x j , i j Gọi L x n( ) là đa thức nội suy Lagrange của
hàm sốy f x( ), kí hiệuL x x n( ; o), L n( ;x x0;x1)v.v là các tỉ sai phân của
Trang 17+) Đa thức nội suy Newton cũng chính là đa thức nội suy Lagrange ở dạng khác
3 2
2 3
5 6
3 10
Trang 18Vậy đa thức nội suy cần tìm là: 3 3 2
32
3 2
3 Sai phân và một vài tính chất
a) Khái niệm về sai phân
Trang 19Giả sử y f x( )là hàm số thực, liên tục trên đoạn [a,b], hconst 0
Khi đó hiệu số:f x( ) f x( h) f x( )là sai phân cấp 1 của hàm
Trang 204 Đa thức nội suy Newton với mốc cách đều
a) Đa thức nội suy ở đầu bảng:
Trang 21Nếu ta đổi biến x x0 th,x j x0 jh, j 0,1, , (n1) Thì ta có:
Công thức (4) cho ta đa thức nội suy Newton ở đầu bảng
Ví dụ 7: Cho hàm số y f x( )cho bởi bảng sau:
Trang 22Giả sử rằng x0 x1 x nvà x i1 x i h, i 0,1, (n1) Ta tìm được đa thức nội suy Lagrange ở dạng:
n h
Từ đó có:
Trang 231 2
Ví dụ 8: Cho hàm số y f x( )cho bởi bảng sau:
Trang 24Vậy đa thức nội suy cần tìm là:
c) Đa thức nội suy Newton ở giữa bảng:
Nhận xét rằng, đa thức nội suy Newton ở đầu bảng hay cuối bảng mang đặc trưng là một phía Trong nhiều trường hợp, việc áp dụng công thức nội suy chứa những giá trị trước và sau giá trị ban đầu sẽ có lợi, trong những công thức nội suy như vậy người ta thường dùng công thức sai phân trung tâm Trong mục này
sẽ trình bày một công thức dạng “một tiến, một lùi”
Giả sử x i x0 ih, i0,1, ,n Ta sẽ tìm đa thức nội suy ở dạng:
Trang 25y a
y a
Trang 26Đa thức (6) được gọi là đa thức nội suy Newton dạng “ một tiến, một lùi”
Ví dụ 9: Cho hàm số y f x( )cho bởi bảng sau:
Trang 27+) Đa thức nội suy Newton dạng này hay dạng khác cũng chỉ là cách viết khác nhau của đa thức nội suy Lagrange
+) Nếu cần tính giá trị ( )f x tại x gần x0thì nên dùng đa thức nội suy Newton ở đầu bảng , ý nghĩa tương tự cho những đa thức nội suy Newton ở cuối bảng và giữa bảng
+) Như vậy, qua những ví dụ trên ta khẳng định được một điều: Các đa thức nội suy mặc dù khác nhau về cấu trúc nhưng giá trị của hàm thì như nhau
Trang 28CHƯƠNG II ỨNG DỤNG CỦA MATHEMATICA
ĐỂ GIẢI BÀI TOÁN NỘI SUY
I Tổng quan về ngôn ngữ lập trình Mathematica
1 Giới thiệu sơ bộ về ngôn ngữ lập trình mathematica
1.1 Giới thiệu
Mathematica lần đầu tiên được hãng Wolfram Research phát hành vào năm
1988, là một hệ thống nhằm thực hiện các tính toán toán học trên máy tính điện
tử Nó là một tổ hợp các tính toán bằng kí hiệu, tính toán bằng số và vẽ đồ thị
Công trình này được xem là thành tựu chính trong lĩnh vực khoa học tính toán
Mathematica là ngôn ngữ tích hợp đầy đủ nhất các tính toán kỹ thuật, là dạng ngôn ngữ dựa trên nguyên lý xử lý các dữ liệu tượng trưng
Thế hệ ngôn ngữ giải tích đầu tiên đó là macsyma, Reduce… ra đời từ những năm 60 của thế kỷ XX Các ngôn ngữ này chủ yếu dùng cho các bài toán vật lí năng lượng cao Nhược điểm của chúng là chủ yếu được định hướng chạy trên các máy tính lớn
Thế hệ tiếp theo là các ngôn ngữ Maple, Mathlab, Mathematica … Các ngôn ngữ này có ưu điểm là chạy nhanh hơn và chấp nhận bộ nhớ nhỏ hơn, chạy hoàn hảo trên máy tính cá nhân Trong các ngôn ngữ tính toán loại này, nổi bật lên ngôn ngữ Mathematica với ưu điểm vượt trội về giao diện thân thiện, về khả năng đồ thị siêu việt và xử lý dữ liệu không thua kém các ngôn ngữ tính toán khác
Nhờ khả năng mô hình hóa và mô phỏng các hệ lớn, kể cả các hệ động mà Mathematica không chỉ được ứng dụng trong lĩnh vực vật lý, kỹ thuật và toán học mà còn được mở rộng ứng dụng trong các lĩnh vực như sinh học, các khoa học xã hội, kể cả trong lĩnh vực tài chính phức tạp
Phiên bản đầu tiên của Mathematica được phát hành vào năm 1988 Phiên bản 7.0 là phiên bản mới nhất hiện nay
Trang 291.2 Giao diện tương tác của Mathematica
Mathematica đưa ra một giao diện rất thân thiện với người sử dụng được đặt tên là bản ghi (notebook- thường được gọi tắt là nb) Các bản ghi là dạng cửa
sổ biểu diễn một lượt sử dụng Mathematica bao gồm đầy đủ các ghi chép cả về chương trình nguồn, cả về kết quả thực hiện trên cùng một bản ghi và được ghi lại dưới dạng file riêng của Mathematica có đuôi là *.nb
Các bản ghi được tổ chức thành các ô (cells) một cách có trật tự và thứ bậc
Ta có thể nhóm một nhóm ô lại sao cho chỉ thấy ô đầu của nhóm ô đó (với số nhóm lồng tùy ý)
Mathematica còn đưa ra một giao diện phụ là các bảng lệnh (Palettes) và các nút lệnh (Button) Người sử dụng chỉ cần nhấp chuột rất đơn giản và có thể tùy biến theo ý mình
Dưới đây là giao diện tương tác của Mathematica:
2 Các quy tắc cơ bản về ngữ pháp của Mathematica
Các biến đi theo hàm đều được đặt trong ngoặc vuông, và được dùng để nhóm các toán tử, các vectơ, ma trận
Cú pháp hình thức như sau: Hàm[expr]
Ví dụ:
Sin[x]
Danh mục được liệt kê trong dấu móc nhọn {…}
Ví dụ:
Trang 30Ví dụ:
Plot3D, Show, ListPlot…
Phép nhân được hiển thị bởi một khoảng trắng hoặc bởi kí tự “ * “
Khi kết thúc một lệnh của Mathematica bằng dấu chấm phẩy “ ; “ thì kết quả sẽ không được hiển thị lên màn hình
Sau khi viết lệnh nhấn Shift_Enter để thực hiện lệnh
3 Tính toán cơ bản trong Mathematica
3.1 Các phép tính đại số
a) Các kiểu số trong Mathematica
Có 4 kiểu số thông dụng được xây dựng trong Mathematica
Random[ ]: Cho một số thực biến thiên trong đoạn [0,1]
Random[Integer]: Cho giá trị ngẫu nhiên là 0 hoặc 1
Trang 31Random[Kiểu số, Khoảng biến thiên]: Cho giá trị ngẫu nhiên có kiểu là
“kiểu số” và giá trị nằm trong “ khoảng biến thiên ”
Khi làm việc với số nguyên, Mathematica luôn hiển thị kết quả chính xác
và đầy đủ trên màn hình, ngay cả khi tính toán với những số lớn
Đối với Mathematica, khi nói về số hữu tỷ là nói về phân số Do đó, kết quả sau các phép tính trong Mathematica vẫn là số hữu tỷ
Trang 32Một số hàm thường dùng để làm việc với số phức
Re: Lấy phần thực của số phức
Im: Lấy phần ảo của số phức
Conjugate: Tìm liên hợp của số phức
Abs: Cho modul của số phức
Round: Làm tròn số cả phần thực và phần ảo của số phức
Trang 33N[Sqrt[17]]
Out[1] = 4.1231
Nếu gõ lệnh 5^(1/9) thì cho kết quả là 1/9
5 Nếu dùng N[5^(1/9)] thì cho kết quả xấp xỉ là 1.19581
4 Danh sách trong Mathematica
4.1 Xây dựng danh sách
* Hàm Table
Table[Biểu thức, {n}]: Cho danh sách bằng cách copy lại biểu thức n lần Table[Biểu thức, {i, imax}]: Cho danh sách biểu thức chạy từ 1 đến imax Table[Biểu thức, {i, imin, imax}]: Cho danh sách biểu thức chạy từ imin đến imax
Table[Biểu thức, {i, imin, imax, d i}]: Cho danh sách biểu thức chạy từ imin đến imax và khoảng cách giữa các phần tử trong danh sách là d i.
Out[1] = {i!, i!, i!, i!, i!}
In[1]:= Table[2*i!, {i, 3, 5}]