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

Giáo trình phương pháp tính Đại học bách khoa đà nẵng

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 (3.46 MB, 345 trang )

ĐẠI HỌC ĐÀ NẴNG

TRƯỜNG ĐẠI HỌC BÁCH KHOA

NGUYỄN THẾ HÙNG, TRẦN VĂN CHÍNH

PHƯƠNG PHÁPTÍNH

ĐÀ NẴNG 2013

1


2


LỜI NĨI ĐẦU
Giáo trình Phương pháp tính được biên soạn trên cơ sở các bài giảng của các tác giả
cho các lớp Cao học và Đại học ngành Điện, Xây dựng, thuộc Đại học Đà Nẵng và một số
Đại học khác mà các Tác giả có dịp tham gia giảng dạy.
Nội dung của Giáo trình bao quát những vấn đề cơ bản nhất và mở rộng của phương
pháp tính hiện đại, làm cơ sở để tính tốn, giải quyết những vấn đề khoa học, kỹ thuật thường
gặp thuộc các ngành kỹ thuật, đặc biệt là ngành Điện và Xây dựng.
Để giúp độc giả dể dàng nắm bắt bài giảng và vận dụng lý thuyết, thuận lợi trong việc
tính tốn, ở mổi mục khó của cuốn sách thường có kèm theo ví dụ tính tốn đặc trưng,
chương trình tính và cuối mổi chương thường có một số bài tập.
Ngồi các ngành Điện và Xây dựng cơ bản, Giáo trình này cịn làm tài liệu tham khảo
cho các ngành khoa học kỹ thuật khác liên quan đến các vấn đề tính tốn gần đúng.
Các Tác giả cảm ơn các Trợ giảng và Trợ lý đã bổ sung các bài tập, đánh máy bản
thảo làm cho nội dung Giáo trình được phong phú, đẹp đẽ thêm.
Các Tác giả rất mong được bạn đọc góp ý, bổ khuyết để lần tái bản tới Giáo trình


Phương pháp tính này được hồn hảo hơn.
Đà Nẵng, ngày 12 tháng 12 năm 2012
Các tác giả
GS. Nguyễn Thế Hùng – PGS. Trần Văn Chính
Trường Đại học Bách khoa, Đại học Đà Nẵng

3


SAI SỐ

Chương 1

Error analysis
1.1 . Tổng quan về phương pháp tính
1.1.1. Khái niệm về phương pháp tính
Phương pháp số (numerical method) là một lĩnh vực của toán học chuyên
nghiên cứu những lý luận cơ bản và các phương pháp giải gần đúng các bài toán
thường gặp trong toán học và kỹ thuật, kết quả tính tốn được cho dưới dạng số. Đơi
khi nó cịn được gọi là Phương pháp tính (Computational method), Tốn học tính tốn
(Computational mathematics).
Giải tích số (Numerical analysis) nhấn mạnh cả phương pháp xấp xỉ và phân
tích toán học.
Phương pháp số quan tâm nhiều hơn đến sự lựa chọn và ứng dụng các kỷ thuật
để giải quyết vấn đề khoa học kỹ thuật hơn là phân tích tốn học như Gải tích số.
Chúng ta thấy rằng hầu hết các bài toán trong toán học như giải các phương
trình đại số hay siêu việt, các hệ phương trình tuyến tính hay phi tuyến, các phương
trình vi phân thường hay đạo hàm riêng, tính các tích phân,... thường khó giải đúng
được, nghĩa là khó tìm kết quả dưới dạng giải tích.
Một số bài tốn có thể giải đúng được nhưng biểu thức kết quả lại cồng kềnh,

phức tạp khối lượng tính tốn rất lớn. Vì những lí do trên, việc giải gần đúng các bài
tốn là vơ cùng cần thiết.
Các bài toán trong kĩ thuật thường dựa trên số liệu thực đo và các giả thiết gần
đúng; do vậy việc tìm ra kết quả gần đúng với sai số cho phép là hồn tồn có ý nghĩa
thực tế.
Từ lâu các nhà khoa học đã nghiên cứu phương pháp tính và đã đạt nhiều kết
quả quan trọng; tuy nhiên để lời giải đạt được độ chính xác cao, khối lượng tính tốn
thường rất lớn. Khi các phương tiện tính tốn thơ sơ, nhiều phương pháp tính đã được
đề xuất, nhưng khơng thể thực hiện được vì khối lượng tính tốn q lớn; khó khăn
trên đã làm phương pháp tính khơng phát triển được.
Ngày nay nhờ máy tính điện tử người ta đã giải rất nhanh các bài toán khổng lồ,
phức tạp, đã kiểm nghiệm được các phương pháp tính cũ và đề ra các phương pháp

4


tính mới. Phương pháp tính nhờ đó phát triển rất mạnh mẽ; nó là cầu nối giữa tốn học
và thực tiễn; là môn học không thể thiếu đối với các kỹ sư.
Ngồi nhiệm vụ chính của phương pháp tính là tìm các phương pháp giải gần
đúng các bài tốn khơng tìm được lời giải giải tích hoặc lời giải giải tích q phức tạp,
nó cịn có nhiệm vụ khác như nghiên cứu tính chất nghiệm, nghiên cứu bài tốn cực
trị, xấp xỉ hàm v.v...
1.1.2. Các đặc điểm của phương pháp tính
Đặc điểm về phương pháp của mơn học này là hữu hạn hố và rời rạc hố.
Phương pháp tính thường biến cái vô hạn thành cái hữu hạn, cái liên tục thành
cái rời rạc và sau cùng lại trở về với cái vô hạn, cái liên tục. Nhưng cần chú ý rằng q
trình trở lại cái vơ hạn, cái liên tục phải trả giá đắt vì khối lượng tính tốn tăng lên rất
nhiều. Cho nên trong thực tế người ta phải dừng lại khi nghiệm gần đúng sát với
nghiệm đúng ở một mức độ nào đó.
Đặc điểm thứ hai của môn học là sự tiến đến kết quả bằng quá trình liên tiếp.

Đó là q trình chia ngày càng nhỏ hơn, càng dày đặc hơn hoặc q trình tính tốn
bước sau dựa vào các kết quả của các bước trước. Cơng việc tính tốn lặp đi lặp lại
này rất thích hợp với máy điện tốn.
Khi nghiên cứu phương pháp tính người ta thường triệt để lợi dụng các kết quả
đã đạt được trong tốn học. Cùng một bài tốn có thể có nhiều phương pháp tính khác
nhau.
Trong phương pháp tính, người ta thường quan tâm đến hai vấn đề chính:
 Phương pháp để giải bài toán.
 Sai số của lời giải.
Một phương pháp tính được coi là tốt nếu nó đạt các yêu cầu sau:
- Phương pháp tính được biểu diễn bằng một dãy hữu hạn các bước tính cụ
thể. Các bước tính tốn cụ thể này của phương pháp tính được gọi là thuật tốn. Thuật
tốn càng đơn giản càng tốt.
- Đánh giá được sai số và sai số càng nhỏ càng tốt.
- Thuật toán thực hiện được trên máy điện tốn và thời gian chạy máy ít
nhất.
Giải gần đúng nghĩa là lời giải của bài toán so với lời giải đúng có một sai số
nào đó. Sai số thường do rất nhiều nguồn tạo nên và nhiều khi rất khó ước lượng được.
5


Ví dụ khi cần tìm lời giải của phương trình phi tuyến, ta sẽ có nhiều phương pháp giải
khác nhau; mổi phương pháp giải cần thời gian tính tốn và độ chính xác khác nhau.
Một người kỹ sư xây dựng khi tính tốn để thiết kế một cơng trình, thực hiện rất nhiều
phép tính, và nhiều khi rất khó xác định sai số tích lũy trong q trình tính tốn;
nhưng kết quả vẫn được cơ quan có thẩm quyền duyệt chấp nhận. Tuy nhiên đối với
các bài toán phức tạp, số lượng phép tính lớn, cần độ chính xác cao, nhất thiết phải
được khảo sát nghiên cứu đầy đủ về sai số của lời giải.
Máy tính số có thể biểu diễn với độ chính xác bình thường (single), độ chính
xác gấp đơi (double) hay độ chính xác mở rộng (extended). Nếu ta biết được mối liên

hệ giữa lời giải số với lời giải đúng, sẽ biết nên chọn độ chính xác nào để kết quả đáp
ứng được yêu cầu thực tế.
1.1.3. Những dạng sai số thường gặp
Trong thực tế, khi bài tốn tìm xấp xỉ một mơ hình tốn học đã biết, ví dụ tìm
nghiệm của một phương trình đã biết, tính tích phân xác định của một hàm số nào đó
trên miền cho trước hoặc có những bài tốn thực tế mà ngay cả mơ hình tốn học cũng
chưa biết; ví dụ, dự báo về lượng mưa thay đổi do biến đổi khí hậu tồn cầu, nhu cầu
th bao internet, … Trong những trường hợp này, ta phải bắt đầu từ việc thu thập số
liệu, xây dựng mơ hình tốn rồi tìm phương pháp giải số thích hợp … Nói chung khi
thực hiện một bài tốn bằng phương pháp số ta thường gặp những loại sai số sau đây:
Sai số do mơ hình hố bài tốn, do ta khơng thể tính được hết những yếu tố
quan trọng ảnh hưởng đến bài toán, hoặc do ta biết được những yếu tố ảnh hưởng
nhưng phải đơn giản hóa mơ hình để có thể tính tốn được.
Sai số do phương pháp: Phương pháp thay bài toán phức tạp bằng bài toán đơn
giản (mổi phương pháp gần đúng đều có sai số và thường các sai số này là khác nhau)
sẽ tạo ra sai số phương pháp.
Sai số do số liệu: Khi đo đạc ta phải sử dụng dụng cụ đo, mổi dụng đo đều có
sai số.
Sai số tính tốn và chặt cụt: Sai số tính tốn là sai số do ta làm trịn bởi tất cả
các lần qui trịn trong q trình tính tốn; sai số chặt cụt là sai số gây ra khi phải chặt
cụt dãy số khai triển.
Những sai số trên đây, tùy theo bài tốn, tích lũy lại nhiều khi dẫn đến những
lời giải không thể chấp nhận được. Chính vì vậy việc tìm ra những phương pháp tốt,
6


thuật toán hữu hiệu để giải các bài toán thực tế là điều rất cần thiết. Các phương pháp
số hiện nay có rất nhiều, và cịn nhiều vấn đề hiện nay vẫn cịn bỏ ngỏ. Trong cuốn
sách này chúng tơi chỉ giới thiệu một số phương pháp và thuật toán thông dụng để các
kỹ sư và độc giả quan tâm có thể sử dụng được.

1.2 . Sai số tuyệt đối
Gọi a là giá trị gần đúng của A, ta viết được A = a  a
a : gọi là sai số tuyệt đối giới hạn
1.3 . Sai số tương đối
a =

a
, dạng khác: A = a (1  a)
a

Sai số tuyệt đối khơng nói lên đầy đủ “chất lượng“ của 1 số xấp xỉ, chất lượng
ấy được phản ảnh qua sai số tương đối.
1.4. Cách viết số xấp xỉ
Chữ số có nghĩa: Đó là chữ số  0 đầu tiên tính từ trái sang phải
Ví dụ.

002,74



00,0207 

2,74
0,0207

Chữ số đáng tin: Một số a có thể được viết a = 

 10

s


s

65,807 = 6.101 + 5.100 + 8.10-1 + 0.10-2 + 7.10-3
Vậy 1 = 6 , 0 = 5 , -1 = 8 , -2 = 0 , -3 = 7
Nếu a  0,5.10S thì S là chữ số đáng tin.
Nếu a  0,5.10S thì S là chữ số đáng nghi.
Ví dụ. a = 65,8274 ; a = 0,0043  Chữ số 6, 5, 8, 2 đáng tin
a = 0,0067  Chữ số 6, 5,8 đáng tin
1.5. Sai số quy tròn
Quy tắc quy tròn
Chữ số bỏ đi đầu tiên  5: Thêm vào chữ số giữ lại cuối cùng 1 đơn vị
Chữ số bỏ đi đầu tiên  5: Để nguyên chữ số giữ lại cuối cùng
Ví dụ.

65,8274  65,827; 65,827  65,83

1.6. Sai số của số đã quy tròn
Giả sử quy tròn a thành a’ với sai số quy tròn tuyệt đối a’
7


a 'a  a’ thì a’ = a + a’ (tức tăng sai số tuyệt đối)
1.7. Ảnh hưởng của sai số quy trịn
Áp dụng nhị thức Newton, ta có:
Bây giờ thay






2  1 10  3363 2378 2

2 của biểu thức (1.1) bởi các số quy tròn khác nhau (Bảng 1.1):

Bảng 1.1: Giá trị của biểu thức (1.1) khi thay xấp xỉ

Vế trái biểu thức (1.1)

2

(1.1)

2 với các giá trị khác nhau

Vế phải biểu thức (1.1)

1,4

0,0001048576

33,8

1,41

0,00013422659

10,02

1,414


0,000147912

0,508

1,41421

0,00014866394

0,00862

1,414213563

0,00014867678

0,0001472

1.8. Các quy tắc tính sai số
Xét hàm số: u = f(x, y)
Ta ký hiệu

x , y, u : chỉ các số gia của x, y, u
dx , dy , du : chỉ các vi phân của x , y, u
X , Y, U : sai số tuyệt đối của x, y, u
x   X

Ta ln có:

y  y


Ta phải tìm U để có:

u   U

Sai số của tổng: u = x + y
u = x + y 

Ta có

u  x  y

 u   X   Y   X Y 
+ Nếu u = x – y với x, y cùng dấu:
U =

U X  Y

u
xy

nếu x  y là rất bé thì sai số rất lớn.

+ Nếu u = x.y  u  du = ydx + xdy = yx + xy
u  y  X  x  Y   U  y  X  x  Y

8


Do đó : U =
+ Nếu u =


U X Y


 X + Y
u
x
y

x
, với y  0,
y

U = X + Y

Công thức tổng quát: u = f(x1, x2, x3, ..., xn)
n



U =

Thì:

i 1

f
X
x i i


Ví dụ. Tìm sai số tuyệt đối giới hạn và sai số tương đối giới hạn của thể tích
hình cầu.
V=

1
 .d 3 .
6

Nếu đường kính d = 3,7cm  0,05 và  = 3,14. Biết d = 0,05,  = 0,0016.
Giải: Xem  và d là đối số của hàm V
Ta có:  v     3 d
Với:   =
d =

0,0016
 0,0005
3,14
0,05
 0,0135
3,7

  v = 0,0005+3.0,0135 = 0,04.
1
 .d 3 = 26,5cm3.
6

Mặt khác:

V=


Vậy có:

v = 26,5.0,04 = 1,06  1,1cm3.

V = 26,5  1,1 cm3
1.9. Sai số do chặt cụt
Trong những bài tốn gần đúng, các đại lượng tính tốn được biểu diển bởi các
chuổi khác nhau, khi tính tốn cần phải chặt cụt; nếu chúng ta khơng phân tích kỹ
cũng sẽ gây sai số rất lớn. Xét ví dụ sau.
^

Ví dụ. Giả sử rằng các chuỗi {an} và { an } được mô tả bởi:
9


an 

^
n 1
n3

a
n 
2
n
n3

^

^


Mặc dù cả hai giới hạn limn→∞ an = 0 và limn→∞ an = 0, nhưng dãy số { an } hội
tụ đến giới hạn này nhanh hơn nhiều so với {αn}.
n 1 n  n
1
 2  2.
2
n
n
n

Từ

an  0 



an  0 

ta có:

^
1
 1 
an  0  O   và an  0  O  2 
n
n 

^


n  3 n  3n
1

 4. 2
3
3
n
n
n

Kết quả này có nghĩa là sự hội tụ của chuỗi {an} tương tự như hội tụ của {1/n}
^

tới không. Dãy số { an } hội tụ một cách tương tự và nhanh hơn, như hội tụ dãy số
{1/n2}.
Chúng ta cũng sử dụng khái niệm " độ lớn - big oh" để mô tả tốc độ hội tụ của
các hàm, đặc biệt là khi các biến độc lập tiệm cận bằng không.
Giả sử F là một hàm số hội tụ đến một số L như là h tiến về không. Nếu các
hằng số dương p và K tồn tại với:
|F(h) − L| ≤ Khp , với h → 0
Thì F(h) hội tụ tới L với tốc độ, hoặc bậc, của hội tụ O (hp). Cái này viết như
F(h) = L + O (hp) và được ghi là "F (h) → L với tốc độ hội tụ hp."
Chúng ta thường quan tâm đến giá trị lớn nhất của p để cho F(h) = L + O (hp).
Định nghĩa "độ lớn - oh" cho các hàm số cũng có thể được mở rộng để kết hợp tổng
quát hơn các hàm hội tụ về 0 trong chổ của hp.
1.10 Sự ổn định của q trình tính
Một trong những tiêu chuẩn mà vấn đề tính tốn gần đúng rất quan tâm đó là sự
ổn định của q trình tính.
Một phương pháp được gọi là ổn định, nếu một sự thay đổi nhỏ trong số liệu
ban đầu, sẽ tạo ra một thay đổi nhỏ trong tính tốn cuối cùng. Ngược lại, với một sự

thay đổi nhỏ trong số liệu ban đầu, tạo ra một sự thay đổi lớn trong tính tốn cuối
cùng, phương pháp được gọi là không ổn định. Một số phương pháp chỉ ổn định đối

10


với sự lựa chọn một số điều kiện ban đầu; những phương pháp nầy được gọi là ổn định
có điều kiện (ví dụ, chúng ta hay gặp vấn đề này đối với các lược đồ sai phân).
Câu hỏi:
1) Định nghĩa sai số tuyệt đối, sai số tương đối ? Trong thực tế tính tốn, người ta
sử dụng sai số tuyệt đối hay sai số tương đối ? Vì sao ?
2) Trình bày các quy tắc tính sai số?
3) Nêu sự khác nhau giữa sai số tính tốn và sai số phương pháp? Hãy nêu ra một
q trình tính có số liệu cụ thể minh họa và chỉ ra sai số tính tốn và sai số
phương pháp ?
4) Đưa ra vài ví dụ tính tốn, chỉ ra sự cần thiết phải chú ý đến sai số qui tròn ?
Bài tập:
1) Hãy xác định chữ số tin tưởng trong các số sau:
a) x = 0,3941 với  x = 0,25.10-2
y = 0,1132 với  y = 0,1.10-3
b) z = 38,2543 với  z = 0,27.10-2
2) Hãy xác định sai số tuyệt đối, biết sai số tương đối của các số xấp xỉ sau:
a) x = 13267 nếu  x = 0,1%
b) x = 0,896 nếu  y =10%
3) Hãy qui tròn các số dưới đây để có được 3 chữ số tin tưởng và xác định sai số
tuyệt đối  và sai số tương đối  của chúng:
a) x=2,1514
b) y=0,16152
c) z=1,1225
d) v=0,01204

4) Hãy tính thương u = x1/x2 của hai số xấp xỉ: x1 = 5,735; x2 = 1,23 và xác định
sai số tương đối giới hạn  u , và sai số tuyệt đối giới hạn  u
5) Hãy xác định sai số tương đối giới hạn  a , sai số tuyệt đối giới hạn  a và số
chữ số đáng tin của cạnh a của hình vng, biết diện tích hình vng
s = 16,45 cm2 với  s = 0,01
11


Đáp số:
1) a) 2; b) 3; c)4
2) a)  x = 0,13.102
b)  y = 0,9.10-1
3) a) 2,15;  x = 0,14.10-2;  x = 0,65.10-3
b) 0,162;  y = 0,48.10-3;  y = 0,3.10-2
c) 1,23;  z = 0,5.10-2;  z = 0,41.10-2
d) 0,0120;  v = 0,4.10-4;  v = 0,33.10-2
4)

u = 4,66;  u  0,0042;  u  0,02

5) a =

x = 4,056cm;  a  0,0003 ;  a  0,0012; a có ba chữ số đáng tin

12


NỘI SUY

Chương 2


(INTERPOLATION)
Trong nhiều bài toán kỹ thuật, ta phải tìm các trị yi tại các điểm xi bên trong
đoạn [a, b] đã biết trước, hoặc khi quan hệ giải tích y = f(x) đã có sẵn nhưng phức tạp,
rất khó để tìm đạo hàm, tích phân… Khi đó ta dùng phép nội suy để dễ dàng tính tốn
mà vẫn đảm bảo độ chính xác theo yêu cầu của thực tế.
2.1. Nội suy đa thức
2.1.1. Sự duy nhất của đa thức nội suy
Xét mẫu đo đạt gồm (n+1) cặp các giá trị đã biết của hai trạm x và y: (x0,y0),
(x1, y1),. . . ,(xn, yn). Hãy xây dựng một đa thức có bậc m ≤ n có dạng:
Pm(x) = a0 + a1x1+ . . . am-1xm-1 + amxm

(2.1)

sao cho Pm(xi) = yi , với i = 0, 1,..., n

(2.2)

Đây là bài toán nội suy đa thức, và đa thức Pm(x) được gọi là đa thức nội suy.
Ta có định lý:
Định lý: Tồn tại duy nhất một đa thức có bậc không quá n và đi qua (n + 1)
điểm cho trước (x0, y0), (x1, y1), . . . ,(xn, yn).
Chứng minh: Xét đa thức có dạng (2.1) ở trên và thỏa mãn (2.2). Kết hợp (2.1)
và (2.2), ta có:
 y0   1
  
 y1    1
  
  
 yn   1


x0
x1

x02
x12

xn

xn2

x0n   a0 
 
x1n   a1 
 
 
xnn   an 

(2.3)

x0n 

x1n 

n
xn 

(2.4)

Hay có thể biểu diễn dưới dạng ma trận :

Y = V. a
Trong đó
1

1
V 


 1

x0
x1

x02
x12

xn

xn2

Đây chính là ma trận Vandermon, ta có :
det V 

 x

0i  j  n

13

j


 xi 

(2.5)


Do ta đã giả thiết các điểm xi ≠ xj , do đó ma trận này khác 0 nên hệ phương
trình (2.3) có nghiệm duy nhất cho các ai, nên đa thức Pn(x) được xác định duy nhất.
2.1.2. Tính giá trị đa thức bằng phương pháp Horner
Với bài toán nội suy đa thức, thường phải tính giá trị của đa thức Pm(x)= a0 +
a1x1 + . . . am-1xm-1 + amxm tại điểm x. Khi tính trực tiếp, phải thực hiện khá nhiều
phép tính, và khi tính các giá trị mũ của x, có thể gặp các giá trị lớn, mặc dù trong
thực tế thường các thành phần của đa thức triệt tiêu lẫn nhau và giá trị của đa thức
không lớn. Để loại trừ các nhược điểm nêu trên, Horner đã đưa ra cách tính như sau:
Viết lại đa thức Pm(x) dưới dạng:
Pm(x) = amxm + am-1xm-1 + . . . + a1x1 + a0 = (...((amx + am-1)x + am-2)x+...+a1)x+a0
Thuật tốn thiết lập cho máy tính, để tính Pm(x) như sau:
Đặt Pm = am
Pm-1 = Pmx + am-1
...
Pi = Pi-1x + ai
Chỉ cần lưu trữ Pi trong một ơ nhớ của máy tính. Thuật tốn trên trở thành:
Đặt P = am
Thiết lập vòng lặp i = m -1 → 0, tức là gán i = m -1, m -2,..., 0
Tính P = P.x + ai
Giá trị P cuối cùng (ứng với i = 0), cho ta giá trị của đa thức tại x.
Sau đây là chương trình thực hiện thuật tốn trên:
Chương trình 1-1
#include <conio.h>
#include <stdio.h>

#define m 10
void main(void)
{
int k,n;
float p,x;
float a[m];
clrscr();
printf("\nCho bac cua da thuc n = ");
14


scanf("\%d",&n);
printf("Vao cac he so a:\n");
for (k=1;k<=n+1;k++)
{
printf("a[%d] = ",k-1);
scanf("%f",&a[k]);
};
printf("Cho gia tri x = ");
scanf("%f",&x);
p=0.0;
for (k=1;k<=n+1;k++)
p=p*x+a[k];
printf("Tri so cua da thuc P tai x =%.2f la :%.5f",x,p);
getch();
}
Sơ đồ Horner tổng quát: Giả sử chúng ta có đa thức:
Pn(x) = a0xn + a1xn - 1 + a2xn - 2 +....+ an

(2.6)


Khai triển Taylor của đa thức tại x = xo có dạng:
Pn ( x)  Pn ( x0 ) 

P( x0 )
P( x0 )
P ( n ) ( x0 )
( x  x0 ) 
( x  x0 ) 2     
( x  x0 ) n
1!
2!
2!

(2.7)

Mặt khác chúng ta có thể biến đổi đa thức về dạng:
Pn(x) = (x - xo)Pn-1(x) + Pn(xo)

(2.8)

Trong đó Pn-1(x) là đa thức bậc n - 1 và có dạng:
Pn-1(x) = boxn-1 + bo-1xn - 2 + b2xn - 3 +....+ bn-1

(2.9)

Thuật tốn để tìm các hệ số nhận được bằng cách so sánh (2.6) và (2.8):
bo = a o
bi = ai + bi-1xo
bn = Pn(xo)

So sánh (2.7) và (2.8) ta có:
P( x0 )
P( x0 )
( x  x0 ) 
( x  x0 ) 2
1!
2!
P ( n ) ( x0 )
  
( x  x0 )n
2!

( x  x0 ) Pn 1 ( x )  Pn ( x0 )  Pn ( x0 ) 

15

(2.10)


Hay:
P( x0 )
P( x0 )
P ( n ) ( x0 )
2
( x  x0 ) Pn 1 ( x) 
( x  x0 ) 
( x  x0 )     
( x  x0 ) n
1!
2!

2!

(2.11)

Và khi chia hai vế cho (x - x0) ta nhận được :
Pn 1 ( x) 

P( x0 ) P( x0 )
P ( n ) ( x0 )

( x  x0 )     
( x  x0 ) n 1
1!
2!
2!

(2.12)

So sánh (2.9) và (2.12) ta nhận được kết quả :
Pn 1 ( x0 ) 

P( x0 )
1!

(2.13)

Trong đó Pn-1(x) lại có thể phân tích giống như Pn(x) dạng (2.3) để tìm ra
Pn-1(xo). Quá trình này được tiếp tục cho đến khi ta tìm hết các hệ số của chuỗi Taylor
của Pn(x).
Tổng quát thuật toán thể hiện ở Bảng 2.1 như sau:

Bảng 2.1: Bảng tính các giá trị Pn-1(x)

Pn(x)

ao

a1

a2

a3

...

an-1

an

x = xo

0

boxo

b1xo

b2xo




bn-2xo

bn-1xo

Pn-1(x)

bo

b1

b2

b3

...

bn-1

bn = Pn(xo)

Bảng 2.2: Tính các giá trị P(2)/0!; P'(2)/1!; P"(2)/2!; …P"(n)/n!

2

2

2

2


2

2

1

-2

1

0

-5

4

0

2

0

2

4

2

1


0

1

2

-1

0

2

4

10

24

1

2

5

12

0

2


8

26

1

4

13

38 = P"(2)/2!

0

2

12

1

6

25 = P"'(2)/3!

0

2

1


8 = P""(2)/4!

2 = P(2)/0!

23 = P'(2)/1!

0
1 = P""'(2)/5!
16


Để hiểu rõ hơn chúng ta lấy một ví dụ cụ thể sau: Khai triển đa thức sau tại xo= 2
P(x) = x5 - 2x4 + x3 -5x + 4
Ta lập Bảng 2.2 tính các giá trị P(2)/0!; P'(2)/1!; P"(2)/2!; …P"(n)/n! như sau:
Như vậy:
Pn(x) = (x - 2)5 + 8(x - 2)4 + 25(x - 2)3 + 38(x - 2)2 + 23(x - 2) + 2
Chương trình sau được thiết lập dùng để xác định các hệ số của chuỗi Taylor
của đa thức P(x) tại xo.
Chương trình 1-2
#include <conio.h>
#include <stdio.h>
#define m 10

void main(void)
{
float a[m],b[m],c[m];
int n,i,j,k;
float x;

clrscr();

printf(“Cho bac cua da thuc n = “);
scanf(“%d”,&n);
printf(“Cho gia tri x = “);
scanf(“%f”,&x);
printf(“Vao cac he so a\n”);
for (k=n;k>=0;k--)
{
printf(“a[%d] = “,n-k);
scanf(“%f”,&a[k]);
}
printf(“\n”);
b[n] = a[n];
c[n] = a[n];
17


for (k=0;k<=n-1;k++)
{
for (i=n-1;i>=k;i--)
b[i] = b[i+1]*x + a[i];
c[k] = b[k];
for (j=n;j>=k+1;j--)
a[j] = b[j];
}
printf(“\nSo do Horner tong quat”);
printf(« \nKhai trien tai x = %.4f\n »,x) ;
for (k=n;k>=0;k--)
printf(“%10.4f\t”,c[k]);
getch();
}

2.1.3. Các phép tính trên đa thức
a. Phép cộng hai đa thức: Giả sử chúng ta có hai đa thức A(x) bậc n và B(x) bậc
m với n > m. Khi cộng hai đa thức này, chúng ta cộng lần lượt các hệ số cùng bậc của
chúng với nhau. Ta có chương trình sau:
Chương trình 1-3
#include <conio.h>
#include <stdio.h>
#define t 10

void main(void)
{
int k,n,m;
float a[t],b[t],c[t];

clrscr();
printf("Cho bac cua da thuc A n = ");
scanf("%d",&n);
printf("Vao cac he so a\n");
18


for (k=1;k<=n+1;k++)
{
printf("a[%d] = ",k-1);
scanf("%f",&a[k]);
}
printf("Cho bac cua da thuc B m = ");
scanf("%d",&m);
printf("Vao cac he so b\n");
for (k=1;k<=m+1;k++)

{
printf("b[%d] = ",k-1);
scanf("%f",&b[k]);
}
printf("\n");
for (k=1;k<=n+1;k++)
if (k<=n-m)
c[k] = a[k];
else
c[k] = a[k] + b[k-n+m];
printf("Cac he so cua da thuc tong C la :\n");
for (k=1;k<=n+1;k++)
printf("%.4f\t",c[k]);
getch();
}
b. Phép nhân hai đa thức: Để thấy rõ thuật toán xác định các hệ số của đa
thức C(x) là kết quả của phép nhân hai đa thức A(x) và B(x) ta cho một ví dụ cụ thể:
A(x) = aox5 + a1x4 + a2x3 + a3x2+ a4x + a5
B(x) = box3 + b1x2 + b2x + b3
C(x) = A(x).B(x)

(2.14)

= aobox8 + (aob1 + a1bo)x7 +( aob2 + a1b1 + a2bo)x6 +
+ (aob3 + a1b2 + a2b1+ a3bo )x5 + (a1b3 + a2b2 + a3b1 + a4bo)x4 +
+ (a2b3 + a3b2 + a4b1 + a5b+)x3 + ( a3b3 + a4b2 + a5b1)x2 + a5b2x + a5b3
19


Các hệ số của đa thức kết quả là:

Co = aobo
C1 = aob1 + a1bo
C2 = aob2 + a1b1 + a2bo
C3 = aob3 + a1b2 + a2b1+ a3bo
C4 = a1b3 + a2b2 + a3b1 + a4bo
C5 = a2b3 + a3b2 + a4b1 + a5bo
C6 = a3b3 + a4b2 + a5b1
C7 = a5b2
C8 = a5b3
Ta nhận thấy là hệ số Ck của C(x) là tổng các tích các hệ số của đơn thức bậc i
của A(x) và bậc (k - i) của B(x). Chỉ số i = 0 khi k ≤ m + 1 và i = k + m khi k > m+1.
Chỉ số j = k khi k ≤ n + 1 và j = n +1 khi k > n + 1.
Sau đây là chương trình tính tích hai đa thức:
Chương trình 1-4
#include <conio.h>
#include <stdio.h>
#define t 10
void main()
{
int k,n,m,l,i,j,p;
float a[t],b[t],c[2*t];
clrscr();
printf("Cho bac cua da thuc A n = ");
scanf("%d",&n);
printf("Vao cac he so a\n");
for (k=1;k<=n+1;k++)
{
printf("a[%d] = ",k-1);
scanf("%f",&a[k]);
}

printf("Cho bac cua da thuc B m = ");
20


scanf("%d",&m);
printf("Vao cac he so b\n");
for (k=1;k<=m+1;k++)
{
printf("b[%d] = ",k-1);
scanf("%f",&b[k]);
}
printf("\n");
l=n+m;
for (k=1;k<=l+1;k++)
{
if (k<=(n+1))
j=k;
else
j=n+1;
if (k<=(m+1))
p=1;
else
p= k-m;
c[k]=0;
for (i=p;i<=j;i++)
c[k] = c[k] + a[i]*b[k-i+1];
}
printf("Cac he so cua da thuc tich C voi bac %d la :\n",l);
for (k=1;k<=l+1;k++)
printf("%.4f\t",c[k]);

getch();
}
c. Chia hai đa thức: Giả sử ta có hai đa thức là An(x) và Bm(x) với n  m.
Thương hai đa thức này là:
An ( x)
R ( x)
 Qn m ( x)  m1
Bm ( x)
Bm ( x)

21

(2.15)


Chương trình sau thực hiện việc chia 2 đa thức:
Chương trình 1-5
#include <stdio.h>
#include <conio.h>
#include <math.h>
#define t 10
void main()
{
int k,n,m,l,i,j,jp;
float a[t],b[t],q[t],r[t],epsi;
clrscr();
printf("Cho bac cua da thuc A n = ");
scanf("%d",&n);
printf("Vao cac he so a\n");
for (k=1;k<=n+1;k++)

{
printf("a[%d] = ",k-1);
scanf("%f",&a[k]);
}
printf("\n");
printf("Cho bac cua da thuc B m = ");
scanf("%d",&m);
printf("Vao cac he so b\n");
for (k=1;k<=m+1;k++)
{
printf("b[%d] = ",k-1);
scanf("%f",&b[k]);
}
printf("\n");
printf("Cho gia tri sai so epsilon epsi = ");
scanf("%f",&epsi);
22


if ((m+1)>1)
{
l=n-m+1;
for (i=0;i<=t;i++)
r[i]=a[i];
j=n;
for (k=1;k<=l;k++)
{
q[k]=r[1]/b[1];
for (i=1;i<=j;i++)
if ((i

r[i]=r[i+1]-q[k]*b[i+1];
else
r[i]=r[i+1];
j=j-1;
}
while ((abs(r[i])<epsi)&&(j>0))
{
for (i=1;i<=j;i++)
r[i]=r[i+1];
j=j-1;
}
if (abs(r[1])r[1]=0.0;
jp=j+1;
}
else
{
l=n+1;
for (k=1;k<=l;k++)
q[k]=a[k]/b[1];
jp=1;
23


r[1]=0.0;
}
printf("\n");
printf("Cac he so cua thuong Q(x) bac %d la : ",l);
for (k=1;k<=l;k++)
printf("%.3f\t",q[k]);

printf("\n");
printf("Cac he so cua phan du R(x) bac %d la : ",jp-1);
for (k=1;k<=jp;k++)
printf("%.3f",r[k]);
getch();
}
2.1.4. Sai số của đa thức nội suy
Định lý Rolle phát biểu:
Định lý Rolle: Cho f(x) là hàm số thực liên tục trên khoảng kín [a, b] và khả vi
trên khoảng hở (a, b) và f(a) = f(b). Khi đó tồn tại điểm ξ∈ (a, b) sao cho f '(ξ) = 0.
Định lý: Giả sử hàm f(x) có đạo hàm liên tục đến cấp (n + 1) trên khoảng kín
[a, b] và Pm(x) là đa thức nội suy, tức là: Pm(xi) = f(xi) = yi , với i = 0, 1,..., n. Với
các mốc nội suy là a = x0 < x1 < ... < xn = b.
Đặt n1  x  

n

  x  x  và
i 0

i

r(x) = f(x) - Pm(x)

Khi đó với ∀ x ∈ [a, b] tồn tại η ∈ [a, b] (phụ thuộc vào x) sao cho:
r ( x) 

f ( n1) ( )
n1 ( x)
(n  1)!


(2.16)

Hệ quả:
Gọi M  sup f ( n1) ( x) khi đó ta có:
a  x b

r ( x)  f ( x)  pm ( x) 

M
n 1 ( x)
(n  1)!

(2.17)

đây là công thức đánh giá sai số của đa thức nội suy.
2.2. Đa thức nội suy Lagrange
Giả sử ta có các cặp điểm quan sát được cho ở Bảng 2.3 sau:

24


Bảng 2.3: Bảng giá trị của các cặp điểm quan sát tương ứng (xi , yi)

x

x1

x2


x3 ....

... xn

y

y1

y2

y3 ...

...yn

Cần lập đa thức: Pn(x) có bậc m  n - 1, nhận các giá trị yi cho trước ứng với
các xi:
yi = f(xi), với i = 1, 2, 3,…. ...,n
Ký hiệu: (x) = (x - x1)(x - x2)... ... (x - xn)
Ta có được đẳng thức:
Pn (x) 

y1 (x)
y2 (x)

 ...
(x - x1 )( x1  x2 )( x1  x3 )...( x1  xn ) ( x  x2 )( x2  x1 )( x2  x3 )....( x2  xn )

yn ( x)

( x  xn )( xn  x1 )( xn  x2 ).......( xn  xn1 )


n

Hay:

Pn(x) =


k 1

yk ( x )
 ( xk ).( x  xk )

(2.18)

(2.19)

'

Đây là đa thức nội suy Lagrange
Nếu hàm f(x) liên tục trên [a, b] và có đạo hàm liên tục đến cấp (n + 1) trong
(a, b), thì sai số nội suy rn(x) = f(x) - Pn(x), được cho bởi biểu thức:
rn ( x)  f ( n 1) (c)

 ( x)

 n  1!

, c [a, b]


(2.20)

Trong đó: a ≤ x1 ≤ x2 ≤ x3 ≤ … ≤ xn ≤ b
Nếu gọi M = max f ( n1) ( x) ; x   a, b thì sai số nội suy:
rn ( x) 

M
 ( x)
 n  1!

(2.21)

Ví dụ. Cho bảng giá trị:
x

0

1

2

3

y

3

4

7


8

Tìm đa thức nội suy Lagrange và tìm y khi biết x = 1,5.
Ta có:  (x) = (x-x1)(x-x2)(x-x3)(x-x4)
= x(x-1)(x-2)(x-3)

25


×