1
TRƯỜNG ĐẠI HỌC SƯ PHẠM TP.HCM
KHOA TOÁN – TIN
Lớp: Toán-VB2 khóa 2
Môn:
PHƯƠNG PHÁP TÍNH
Đề tài:
BIỂU DIỄN CĂN BẬC N CỦA MỘT SỐ THỰC
KHÔNG ÂM BẰNG PHƯƠNG PHÁP
CHIA ĐÔI ĐOẠN NGHIỆM
Giảng viên hướng dẫn: TS Trịnh Công Diệu
Người thực hiện:
1. Lưu Thị Hảo
2. Đặng Lê Xuân Ánh Nguyệt
3. Nguyễn Thị Hồng Tiên
2
BIỂU DIỄN CĂN BẬC N CỦA MỘT SỐ THỰC KHÔNG ÂM BẰNG
PHƢƠNG PHÁP CHIA ĐÔI ĐOẠN NGHIỆM
A. Đặt vấn đề:
Phương pháp tính là một trong những môn học bắt buộc của ngành toán học và công nghệ
thông tin. Trong môn học này, tính gần đúng nghiệm thực của một phương trình là một trong
những nội dung chính và bài toán xác định biểu diễn thập phân của căn bậc n của một số thực ta có
thể đưa về dạng bài toán tìm nghiệm thực gần đúng của phương trình. Bài viết sau đây sẽ trình bày
thuật toán xác định biểu diễn thập phân của căn bậc n của một số thực hay đúng hơn là thuật toán
giải tìm nghiệm thực gần đúng của phương trình bằng phương pháp phân đôi đoạn nghiệm.
B. Cơ sở lý luận:
1. Nghiệm thực của phương trình một ẩn:
Xét phương trình một ẩn:
f(x) = 0 (*)
trong đó f(x) là một hàm số cho trước của đối số x.
Giá trị x
0
được gọi là nghiệm của (*) nếu f(x
0
) = 0.
2. Sự tồn tại nghiệm của phương trình:
Định lý: Nếu có 2 số thực a và b (a<b) sao cho f(a) và f(b) trái dấu, tức là f(a)f(b) < 0,
đồng thời f(x) liên tục trên đoạn [a, b] thì ở trong đoạn [a,b], phương trình (*) có ít nhất một
nghiệm.
Chứng minh:
Có thể minh họa trên đồ thị hình 2.1. Đồ thị của hàm số y = f(x) tại a< x<b là một đường
liền nối 2 điểm A và B, A ở dưới, B ở trên trục hoành, nên phải cắt trục hoành tại ít nhất 1 điểm
ở trong khoảng từ a đến b. Vậy phương trình (*) có ít nhất một nghiệm ở trong khoảng (a,b).
Hình 2.1
3. Khoảng phân ly nghiệm:
Định nghĩa: Khoảng [a, b] được gọi là khoảng phân ly nghiệm của phương trình (*) nếu
nó chứa một và chỉ một nghiệm của phương trình đó.
3
Định lý: Nếu [a,b] là một khoảng trong đó hàm số f(x) liên tục, đơn điệu trên đoạn [a, b]
và đồng thời f(a) và f(b) trái dấu, tức là f(a)f(b) < 0 thì đoạn [a,b] là một khoảng phân ly nghiệm
của phương trình (*).
Chứng minh:
f(x) = x
n
-a
0
là hàm đơn điệu trên [a,b]. Vì:
x
1
,x
2
[a,b]; x
1
≠x
2
, x
1
> x
2
thì
12
12
f(x ) f(x )
0
xx
f(x) liên tục trên [a,b] vì:
0
00
xx
lim f(x) f(x ), x [a,b]
f(x) có nghiệm duy nhất có thể minh họa bằng đồ thị hình 3.1.
Đồ thị hàm số y=f(x) cắt trục hoành tại một và chỉ một điểm ở trong [a,b]. Vậy [a,b] chứa
một và chỉ một nghiệm của phương trình (*)
Hình 3.1
Ví dụ: Xét phương trình:
f(x)= x
2
– 2 = 0
Ta thấy hàm số f(x) liên tục với mọi xR
Ta xét đoạn [1, 2]. Ta có f(1) = -1; f(2) = 2. Hàm số f(x) liên tục và đơn điệu vì
'
f (x) 2x 0
trên đoạn [1, 2]. Vậy đoạn [1, 2] là khoảng phân ly nghiệm của phương
trình trên.
Tuy nhiên ví dụ sau đây chứng tỏ rằng điều kiện liên tục, đơn điệu chỉ là điều kiện đủ.
Hàm số không đơn điệu trong một khoảng nào đó vẫn có thể chỉ có một nghiệm duy nhất.
Ví dụ: Xét phương trình
f(x) = x
3
– x -1 = 0 (3.1)
Ta sẽ chứng tỏ rằng phương trình này có nghiệm thực và xác định khoảng phân ly nghiệm.
Ta thấy hàm số f(x) liên tục, và f‟(x) = 3x
2
– 1 = 0 tại
1
x
3
.
Ta có bảng biến thiên sau:
4
X
1
3
1
3
f‟(x)
+ 0 - 0 +
f(x)
M
m
Trong đó
1 1 1 2
f(M) f( ) 1 1 0
3 3 3 3 3 3
Vậy đồ thị chỉ cắt trục hoành tại một điểm duy nhất và do đó phương trình (3.1) chỉ có một
nghiệm duy nhất (mặc dù trên đoạn
1
,2
3
hàm số không đơn điệu).
Ngoài ra theo bảng biến thiên ta có: hàm số f(x) liên tục, đơn điệu trên đoạn
1,2
và
3
f(1) 1 1 1 1 0
3
f(1) 2 2 1 5 0
Tức là
f(1)*f(2) 0
Vậy khoảng
1,2
chính là khoảng phân ly nghiệm.
C. Thuật toán biểu diễn thập phân của:
*
n
00
a (a 0,n N ,n 2)
1. Phân tích:
Gọi x là giá trị của
n
0
a
, ta có
nn
n
0 0 0
x a x a x a 0 (4.1)
Đặt
n
0
f(x) x a
thì phương trình (4.1) tương đương vơi phương trình f(x)=0
Ta cần tìm biểu diễn giá trị gần đúng của
n
0
a
, tức là tìm giá trị gần đúng của nghiệm phương
trình (4.1).
Nếu
0
a1
:
Cho i chạy từ 1 cho tới khi
n
0
i a 0
thì b= i và a = i-1
Do đó phương trình f(x)=0 có nghiệm
x [i-1,i]
Nếu
0
a1
:
n
0
f(1) 1 a 0
n
0 0 0
f(a ) a a 0
Do đó pt f(x)=0 có nghiệm
0
x [a ,1]
Nếu
0
a1
thì
n
0
a1
2. Thuật toán sử dụng phương pháp chia đôi:
Dùng bảng: Biểu diễn
n
0
a
5
Xét phương trình
n
o
f(x) x a
Nếu
0
a1
thì gán b=1,
0
aa
Nếu
0
a1
thì cho i chạy từ 1 cho tới khi
n
0
i a 0
thì b = i và a = i - 1
Nếu
0
a1
thì gán
x1
và dừng
i
x
i
f(x
i
)
Đoạn chứa nghiệm
Độ dài đoạn chứa
nghiệm
0
a
b
<0
>0
[a,b]
b-a >10
-k
1
x
1
=(a+b)/2
<0
>0
[a
1
,b
1
]
(a
1
=x
1
nếu f(x
1
)<0 ngược lại b
1
=x
1
)
b
1
-a
1
>10
-k
2
x
2
=(a
1
+b
1
)/2
<0
>0
[a
2
,b
2
]
(a
2
=x
2
nếu f(x
2
)<0 ngược lại b
2
=x
2
)
b
2
-a
2
>10
-k
…
…
…
…
…
n
x
n
=(a
n-1
+b
n-1
)/2
<0
>0
[a
n
,b
n
]
(a
n
=x
n
nếu f(x
n
)<0 ngược lại b
n
=x
n
)
b
n
-a
n
<10
-k
Kết luận: vậy
n
0
ax
với
x
là làm tròn của x
n
đến hàng thứ k. (x
n
là dạng biểu diễn thập phân)
Dùng mã giả
Input: a
0
, n, k {cần tính giá trị gần đúng của
n
0
a
với sai số không quá
k
10
, kết quả ghi
ở dạng biểu diễn thập phân, có k chữ số lẻ sau dấu phẩy}
Output:
x
{
x
là giá trị gần đúng của
n
0
a
thỏa điều kiện trên}
Giải thuật:
B1:
Nếu
0
a1
thì gán b=1,
0
aa
Nếu
0
a1
thì cho i chạy từ 1 cho đến khi
n
0
i a 0
thì b=i và a = i - 1
Nếu
0
a1
thì gán
x1
và dừng
B2: Nếu
n
0
a a 0
thì
xa
và dừng
Nếu
n
0
b a 0
thì
xb
và dừng
B3: Đặt
ab
x
2
.
Nếu
n
0
c a 0
thì gán
xc
, qua B6
B4: Tính e = b - a
Nếu
k
e 10
thì gán
xc
và sang B6
B5: Nếu
nn
00
(c a )(a a ) 0
thì gán
bc
, ngược lại gán
ac
và trở lại B2
B6: Đặt
x
là làm tròn của
x
đến chữ số hàng thứ (k). Dừng
6
D. Ví dụ: Tính
3
2
sai số không quá 10
-3
.
0
a2
, n=3, k=3
Dùng bảng:
Xét hàm số f(x)= x
3
-2 có khoảng phân li nghiệm [1,2]
Dùng mã giả:
B1:
0
a 1, b 2,a 1
Đặt:
13
(1 2)
22
c
B2: f(a) < 0, f(b) > 0
B3:
f(c) 0
B4:
3
e 2 1 1 10
B5:
f(c).f(1) 0
Gán
3
bc
2
Xét khoảng phân ly
3
1;
2
Lặp lần 1
1
1 3 5
1
2 2 4
c
B2: f(a) < 0, f(b) > 0
B3:
1
f(c ) 0
B4:
3
1
3
e 1 0,5 10
2
B5:
1
f(c ).f(1) 0
Gán
1
5
ac
4
Xét khoảng phân ly
53
;
42
Lặp lần 2
2
1 5 3 11
2 4 2 8
c
B2: f(a) < 0, f(b) > 0
B3:
2
f(c ) 0
B4:
3
2
3 5 1
e 10
2 4 4
B5:
2
f(c ).f(a) 0
Gán
2
11
bc
8
Xét khoảng phân ly
5 11
;
48
Lặp lần 3
3
1 5 11 21
2 4 8 16
c
B2: f(a) = < 0, f(b) > 0
B3:
3
f(c ) 0
B4:
3
3
11 5 1
e 10
8 4 8
B5:
3
f(c ).f(a) 0
Gán
3
21
bc
16
Xét khoảng phân ly
5 21
;
4 16
Lặp lần 4
4
1 5 21 41
2 4 16 32
c
B2: f(a) < 0, f(b) > 0
B3:
4
f(c ) 0
B4:
3
4
21 5 1
e 10
16 4 16
B5:
4
f(c ).f(a) 0
Lặp lần 5
5
1 5 41 81
2 4 32 64
c
B2: f(a) < 0, f(b) > 0
B3
:
5
f(c ) 0
B4:
3
5
41 5 1
e 10
32 4 4
B5:
5
f(c ).f(a) 0
1
2
3
4
5
0
7
Gán
4
41
bc
32
Xét khoảng phân ly
5 41
;
4 32
Gán
5
81
bc
64
Xét khoảng phân ly
5 81
;
4 64
Lặp lần 6
6
1 5 81 161
2 4 64 128
c
B2: f(a) < 0, f(b) > 0
B3
:
6
f(c ) 0
B4:
3
6
81 5 1
e 10
64 4 64
B5:
6
f(c ).f(a) 0
Gán
6
161
ac
128
Xét khoảng phân ly
161 81
;
128 64
Lặp lần 7
7
1 161 81 323
2 128 64 256
c
B2: f(a) < 0, f(b) > 0
B3
:
7
f(c ) 0
B4:
3
7
81 161 1
e 10
64 128 128
B5:
7
f(c ).f(a) 0
Gán
7
323
bc
256
Xét khoảng phân ly
161 323
;
128 256
Lặp lần 8
8
1 161 323 645
2 128 256 512
c
B2: f(a) < 0, f(b) > 0
B3:
8
f(c ) 0
B4:
3
8
323 161 1
e 10
256 128 256
B5:
8
f(c ).f(a) 0
Gán
8
645
ac
512
Xét khoảng phân ly
645 323
;
512 256
Lặp lần 9
9
1 645 323 1291
2 512 256 1024
c
B2: f(a) < 0, f(b) > 0
B3:
9
f(c ) 0
B4:
3
9
323 645 1
e 10
256 512 512
B5:
9
f(c ).f(a) 0
Gán
9
1291
bc
1024
Xét khoảng phân ly
645 1291
;
512 1024
Lặp lần 10
10
1 645 1291 2581
2 512 1024 2048
c
B2:
B3:
10
f(c ) 0
B4:
3
10
1291 645 1
e 0,0009766 10
1024 512 1024
6
7
8
9
10
8
B6:
*
10
2581
1,260253906
2048
xc
Vậy biểu diễn
3
2
là:
3
1,260 10
x
E. Cài đặt chƣơng trình cho thuật toán trên:
program bieu_dien_can_bac_n_so_khong_am;
uses crt;
var a,b,c,x1,y,fc,e: real; i,n,k:longint;
begin
clrscr;
writeln(„bieu dien can bac n cua so thuc khong am y voi sai so cho phep khong qua
10^-k‟);
writeln(„nhap vao gia tri y can tinh can‟); readln(y); {nhap y}
writeln(„nhap vao bac n can can tinh‟); readln(n); {nhap n}
if y = 1 then writeln(„ can bac „, n,‟ cua 1 la 1‟)
else
begin
writeln(„nhap vao he so cua sai so k‟); readln(k) { nhap k}
if y > 1 then
begin
i:=1;
while exp(n*ln(i))-y <=0 do i:= 1+i;
a:= i - 1;
b:= i;
end
else
begin
a:=y;
b:=1 ;
end;
writeln(„Khoang phan ly ban dau la: [„,a:4:k,‟,‟,b:4:k,‟,]‟);
if (exp(n*ln(a))-y = 0) then writeln(„Can bac „,n,‟ cua‟,y,‟ la: „, a:5:k)
else if exp(n*ln(b))-y = 0) then writeln(„Can bac „,n,‟ cua‟,y,‟ la: „, b:5:k)
else
begin
e:=b-a;
c:=(a+b)/2;
fc:= exp(n*ln(c)) – y;
if fc = 0 then x1:=c
else
begin
9
while e>exp(-k*ln(10)) do
begin
if fc*(exp(n*ln(a))-y) < 0 then b:=c
else a:=c
e:=b-a;
c:=(a+b)/2;
fc:=exp(n*ln(c))-y;
end;
x1:=c
end;
end;
writeln(„bieu dien can bac „, n,‟ cua „, y, „ la: „, x1:8:k);
writeln(„voi sai so cho phep la 10^-„,k);
end;
readln
end.
F. Nhận xét về thuật toán chia đôi:
Ưu điểm: đơn giản
Nhược điểm: tốc độ hội tụ chậm, không tận dụng được tính chất của hàm số f(x). dù hàm
số có dạng gì thì chúng ta cũng chỉ chia đôi, xét giá trị của hàm tại các điểm rồi chia rồi
quyết định chọn đoạn nào để chia tiếp. Nếu khoảng [a,b] ban đầu lớn thì phải mất khá
nhiều bước mới đạt được độ chính xác cần thiết.
G. Tài liệu tham khảo:
“Phương pháp tính” của Tạ Văn Đĩnh
Tài liệu tham khảo trên Internet
10
Mục lục
A. Đặt vấn đề: 2
B. Cơ sở lý luận: 2
C. Thuật toán 4
D. Ví dụ 6
E. Cài đặt chương trình cho thuật toán trên: 8
F. Nhận xét về thuật toán chia đôi: 9
G. Tài liệu tham khảo: 9