Tải bản đầy đủ (.doc) (13 trang)

một số phương pháp tính đúng nghiệm của phương trình đa thức

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 (201.97 KB, 13 trang )

TRƯỜNG ĐẠI HỌC SƯ PHẠM
THÀNH PHỐ HỒ CHÍ MINH







































Tiểu luận
Môn: phương pháp tính
Chủ đề 19: một số phương pháp tính đúng nghiệm
của phương trình đa thức
GVHD: TS. Trịnh Công Diệu
SVTH:
1) Lê Văn Sang
1) Nguyễn Thị Ngà
2) Nguyễn Hương Thủy
3) Nguyễn Hiệp Thành
Lớp Toán -Văn bằng 2- khóa 2
I) Đặt vấn đề:
xét đa thức bặc n của x có dạng như sau:
P
n
(x) = a
n
x
n
+ a
n-1

x
n-1
+ …+ a
1
x+a
0
Với các hệ số a
i
(i=0…n) là các hệ số thực
a
n

0
nếu không cần nhấn mạnh biến x, đôi khi ta viết biểu thức (1) dưới dạng:
P
n
(x) = (a
n
, a
n-1
, …, a
0
)
Tập các hệ số a
n
, …,a
0
của đa thức P(x) sẽ được kí hiệu là
α
P(x) hay

α
P
n
II) Nghiệm của đa thức
1. Định nghĩa : số
α
được gọi là nghiệp của đa thức P
n
(x)
hay còn gọi là nghiệm của
phương trình P
n
(x) = 0 nếu ta có P(
α
) = 0
2. Định lí 1 : giả sử P
n
(x)
có bậc n

1 điều kiện cần và đủ để đa thức P
n
(x)
có nghiệm
α

là nó chia hết cho x-
α
P
n

(x) = (x-
α
)Q(x) (2) trong đó Q(x) là đa thức có bậc n-1
Chứng minh:
Điều kiện cần: nếu P
n
(x) có nghiệm là
α
ta chia P
n
(x) cho x-
α
P
n
(x) = (x-
α
)Q(x) + r (3)
Trong đó Q(x) là đa thức bậc n-1, còn r là đa thức bậc 0, tức r là hằng số
Thay x =
α
vào 2 vế của (3) ta được:
P
n
(
α
) = r = 0

P
n
(x) chia hết cho x-

α
Trường hợp P
n
(x) có bậc là 0,(P
n
(x) = a
n
= const) thì nó bằng 0 với mọi x nếu a
n
= 0 và
khác 0 với mọi x nếu a
n


0
Đều kiện đủ:
Nếu P
n
(x) có dạng như biểu thức (2) thì rõ ràng P
n
(
α
) = 0 do đó nó có nghiệm là
α
3. định lí 2 : mọi đa thức P
n
(x) mà bậc n

1 đều có ít nhất một nghiệm thực hoặc phức
đây là định lí cơ bản của đại số học ta thừa nhận nó mà không chứng minh.

III. Nghiệm hữu tỉ của đa thức:
Để tìm nghiệm hữu tỉ của đa thức:
P
n
(x) = a
n
x
n
+ a
n-1
x
n-1
+ …+ a
1
x+a
0
( a
n

0)
Ta dựa vào nội dung của định lí sau:
Định lí 3: nếu a
n
, a
n-1
,…, a
1
, a
0
là các hệ số nguyên của P

n
(x) thì nghiệm hữu tỉ của P
n
(x)
nếu có sẽ là x =
p
q
trong đó:
P và q là nguyên tố cùng nhau (p, q = 1)
P là ước của a
0
, còn q là ước của a
n
B. XÂY DỰNG CHƯƠNG TRÌNH TÌM NGHIỆM CỦA ÐA THỨC BẬC N
I. Ý tưởng giải thuật của chương trình
- Để tìm nghiệm hữu tỉ của đa thức bậc n:
• P
n
(x) = a
n
x
n
+ a
n-1
x
n-1
+ …+ a
1
x+a
0

=0
• Ta dựa vào nội dung của định lý số 3 ta đưa ra thuật giải như sau:
1. Diễn đạt bằng ngôn ngữ tự nhiên:
- Bước 1: Cung cấp số liệu cho bài toán:
+ Nhập bậc của đa thức n với n

0
+Nhập các hệ số
i
a
(i=0,1, ,n) của đa thức với
n
a

0
- Bước 2: tìm các ước số
0
a
,
n
a
:
+ Tìm number1 các ước số của
0
a
, lưu các giá trị ước số này vào mảng t ( có kiểu phân
tử số là số nguyên)
+ Tìm number1 các ước số của
n
a

, lưu các giá trị ước số này vào mảng m ( có kiểu phân
tử số là số nguyên)
- Bước 3: thực hiện phép thử để tìm nghiệm:
+ Ta lần lượt thay các giá trị
[ ]
[ ]
t i
m j
vào đa thức P
n
(x) = (i=1…number1, j=1…number
2)
+ Nếu thỏa mản đa thức tức là:
( )
[ ]
[ ]
n
P x
t i
m j
 
 ÷
 ÷
 
=0 thì ta kết luận là nghiệm của đa thức
[ ]
[ ]
t i
m j
và lưu giá trị này vào mảng kết quả có kiểu phần tử là số hữu tỉ.

+ Ngược lại thì
[ ]
[ ]
t i
m j
không là nghiệm của đa thức và không lưu giá trị này vào mảng kết
quả (kq).
- Bước 4: giả sử đa thức P
n
(x) có k nghiệm hữu tỉ k>0 thì ta lần lượt xét các phần tử
kq[i], với i= 1 k để loại bỏ các phần tử bằng nhau (do kq[i] chưa phải là tối giản)
- Bước 5: Thông báo kết quả:
+ Nếu k>0 thì đa thức đã cho có nghiệm hữu tỉ. ta đưa thông báo các kết quả lên màn
hình
+ Nếu k=0 thì thì thông báo đa thức không có nghiệm hữu tỉ.
2. Diễn đạt bằng lưu đồ:

II. Xây dựng chương trình
1. Khai báo kiểu: Dựa vào các bước của giải thuật ta thấy cần các khai báo như sau:
Begin
- Nhập bậc của đa thức n
- Nhập các hệ số
i
a
(i=0,1, ,n)
- tìm các ước số
0
a
lưu vào mảng t
- tìm các ước số

n
a
lưu vào mảng m
- Thay
[ ]
[ ]
t i
m j
vào đa thức P
n
(x)
=0
- Lưu
[ ]
[ ]
t i
m j
vào mảng kết quả
- Lưu các nghiệm trùng nhau
- Xuất kết quả
End.
Ðịnh nghĩa kiểu số hữu tỷ:
Do trong ngôn ngữ Pascal không định nghĩa kiểu số hữu tỷ. Do đó ta phải
định nghĩa kiểu số hữu tỷ:

: ;
: ;
;
Type HuuTy Record
Ts Integer

Ms Integer
End
=
Ta định nghĩa số hữu tỷ là một Record gồm có 2 trường có kiểu số nguyên (
Integer ) là Ts (Tử số) và Ms (Mẫu số).
Ðịnh nghĩa một kiểu Mang là một array gồm các phần tử có kiểu số nguyên để sử
dụng trong chương trình.
[ ]
: 1 50 ; Type Mang Array of Integer
2. Khai báo biến:
 Biến r có kiểu là số hữu tỷ, lưu giữ giá trị số hữu tỷ trong quá trình tính
toán
 Các biến a, t, m có kiểu là mang lưu trữ các hệ số của đa thức, các ước số
của a
o
và a
n
 Biến kq là 1 mảng có kiểu phần tử là số hữu tỷ để luu7 giữ nghiệm hữu tỷ
của đa thức
 Biến Number1, Number2 cho biết số các ước số của a
o
và a
n
 n là bậc của đa thức
( )

n
P x
 ngoài ra còn có các biến được sử dụng trong các vòng lặp và xác định
điều kiện trong quá trình tính toán

Tóm lại, ta có phần khai báo đầu chương trình như sau:
Uses Crt; { Sử dụng Unit màn hình }

: ;
: ;
;
:
Type HuuTy Record
Ts Integer
Ms Integer
End
Mang Array
=
[ ]
1 50 ;
: ;
, , , , 1, 2 : ;
, , : ;
1, 2 : ;

of Integer
Var r HuuTy
n i j k Number Number Integer
a t m Mang
Bien Bien Boolean
[ ]
: 1 30 ;Kq array of HuuTy
3. Các thủ tục và hàm sử dụng trong chương trình:
• Procedure
( )

: ; Nhap Var r HuuTy

Chức năng: Thủ tục này cho phép nhập vào 1 số dạng hữu tỷ
• Procedure
( )
: ;Viet r HuuTy
Chức năng: Thủ tục này cho phép trình bày ( viết ) ra màn hình 1 số dạng hữu tỷ
• Procedure
( )
: ; : ; : ;Us n integer Var b mang Var so integer
Chức năng: Thủ tục này sẽ tìm các ước số của số nguyên n, lưu các giá trị này
vào mảng b, và số các ước số vào biến so.
• Function
( )
, : : ;Usln n m integer integer
Chức năng: Hàm này sẽ tìm ước số chung lớn nhất của 2 số nguyên n và
m.
• Procedure
( )
1 : ; : ;ToiGian r HuuTy Var r HuuTy

Chức năng: Thủ tục này cho phép tối giản hóa 1 số hửu tỷ bằng cách chia tử và
mẫu số cho ước số chung lớn nhất của chúng.
• Function
( )
1, 2 : : ;Bang r r HuuTy Boolean
Chức năng: Hàm này so sánh 2 số hữu tỷ r1 và r2. Trả về giá trị true nếu r1 = r2
và false nếu ngược lại.
• Procedure
( )

1, 2 : ; : ;Cong r r HuuTy Var r HuuTy
Chức năng: Thủ tục này thực hiện phép cộng 2 số hữu tỷ r1, r2 và lưu kết quả
vào số hữu tỷ r.
• Procedure
( )
1, 2 : ; : ;Tru r r HuuTy Var r HuuTy
Chức năng: Thủ tục này thực hiện phép trừ 2 số hữu tỷ r1, r2 và lưu kết quả vào
số hữu tỷ r
• Procedure
( )
1, 2 : ; : ;Nhan r r HuuTy Var r HuuTy

Chức năng: Thủ tục này thực hiện phép nhân 2 số hữu tỷ r1, r2 và lưu kết
quả vào số hữu tỷ r
• Procedure
( )
1, 2 : ; : ;Chia r r HuuTy Var r HuuTy
Chức năng: Thủ tục này thực hiện phép chia 2 số hữu tỷ r1, r2 và lưu kết
quả vào số hữu tỷ r.
• Procedure
( )
: , 1 : ; : ;LuyThua n integer r HuuTy Var r HuuTy
Chức năng: Thủ tục này thực hiện phép lũy thừa bậc n của số hữu tỷ r1 và
lưu kết quả vào số hữu tỷ r.
• Procedure
( )
1 : ; : ;Doi r HuuTy Var r HuuTy

Chức năng: Thủ tục này cho phép lấy số hữu tỷ đối với số hữu tỷ đã cho.
• Procedure

( )
_ _ : ; : ;Doi So Nguyen n integer Var r HuuTy
Chức năng: Thủ tục này cho phép đổi 1 số nguyên n thành một số hửu tỷ r.
• Function
( )
: ; : ; : : ;Thu r HuuTy n integer a Mang Boolean

Chức năng: Hàm này có chức năng kiểm tra xem số hữu tỷ r có phải là
nghiệm hữu tỷ của đa thức không ? Nếu đúng thì trả về true cho kết quả hàm và false nếu
ngược lại.
III. Chương trình cụ thể
Uses Crt;
Type HuuTy=Record
ts:Integer;
ms:Integer;
End;
Mang=array[0 50] of Integer;
Var r:HuuTy;
n,i,j,k,number1,number2:Integer;
a,t,m:mang;
bien1,bien2:boolean;
Kq:Array[1 30] of HuuTy;
Ch:Char;
Procedure Nhap(var r:HuuTy);
Begin
Write('Nhap tu so :');readln(r.ts);
Write('Nhap mau so :');readln(r.ms);
Writeln;
End;
Procedure Viet(r:HuuTy);

Begin
If (r.ms<0) Then
Begin
r.ts:=-r.ts;
r.ms:=-r.ms;
End;
If (r.ms=1) Then
Write(r.ts)
Else
Write('(',r.ts,'/',r.ms,')'); End;
Procedure Usc(n:Integer;Var b:Mang;Var so:Integer);
Var i,j:Integer;
Begin
n:=abs(n);
j:=0;
For i:=1 to n Do
If (n mod i)=0 Then
Begin
j:=j+1;
b[j]:=i;
j:=j+1;
b[j]:=-i;
End;
so:=j;
End;
Function Usln(n,m:Integer):Integer;
Begin
n:=abs(n);
m:=abs(m);
If (n=0) or (m=0) Then

Exit;
Repeat
If n>m Then
Begin
n:=n Mod m;
Usln:=m;
End
Else
Begin
m:=m Mod n;
Usln:=n;
End;
Until (n=0) or (m=0);
End;
Procedure ToiGian(r1:HuuTy;Var r:HuuTy);
Var Tam:Integer;
Begin
Tam:=Usln(r1.ts,r1.ms);
r.ts:=Round(r1.ts/Tam);
r.ms:=Round(r1.ms/Tam);
End;
Function Bang(r1,r2:HuuTy):boolean;
Var Tam1,Tam2:HuuTy;
Begin
ToiGian(r1,Tam1);
ToiGian(r2,Tam2);
If ((Tam1.ms=Tam2.ms) And (Tam1.ts=Tam2.ts)) Or
((Tam1.ms=-Tam2.ms) And (Tam1.ts=-Tam2.ts)) Then
Bang:=True
Else

Bang:=False;
End;
Procedure Cong(r1,r2:HuuTy;Var r:HuuTy);
Begin
r.ts:=r1.ms*r2.ts+r2.ms*r1.ts;
r.ms:=r1.ms*r2.ms;
End;
Procedure Tru(r1,r2:HuuTy;Var r:HuuTy);
Begin
r.ts:=r1.ts*r2.ms-r2.ts*r1.ms;
r.ms:=r1.ms*r2.ms;
End;
Procedure Nhan(r1,r2:HuuTy;Var r:HuuTy);
Begin
r.ts:=r1.ts*r2.ts;
r.ms:=r1.ms*r2.ms;
End;
Procedure Doi(r1:HuuTy;Var r:HuuTy);
Begin
r.ts:=-r1.ts;
r.ms:=r1.ms;
End;
Procedure Doi_So_Nguyen(n:Integer;Var r:HuuTy);
Begin
r.ts:=n;
r.ms:=1;
End;
Procedure Chia(r1,r2:HuuTy;Var r:HuuTy);
Begin
r.ts:=r1.ts*r2.ms;

r.ms:=r1.ms*r2.ts;
End;
Procedure LuyThua(n:Integer;r1:HuuTy;Var r:HuuTy);
Var i:Integer;
Begin
r.ts:=1;
r.ms:=1;
If n>0 Then
For i:=1 to n Do
Begin
r.ts:=r.ts*r1.ts;
r.ms:=r.ms*r1.ms;
End;
End;
Function Thu(r:HuuTy;n:Integer;a:Mang):Boolean;
Var r1,r2,r3,Tam1,Tam2:HuuTy;
i,j:Integer;
Begin
Tam1.ts:=0; Tam1.ms:=1;
For i:=n Downto 0 Do
Begin
LuyThua(i,r,r1);
Doi_So_Nguyen(a[i],r2);
Nhan(r1,r2,r3);
Cong(r3,Tam1,Tam2);
Tam1:=Tam2;
End;
If Tam2.ts=0 Then
Thu:=True
Else

Thu:=False;
End;
BEGIN {Chương trình chính}
Repeat
Clrscr;
Writeln('CHUONG TRINH TIM NGHIEM HUU TY CUA DA THUC BAC n');
Writeln(' *************** ');
Writeln;
Write('Nhap bac cua da thuc n=');Readln(n);
Writeln('Nhap cac he so da thuc:');
For i:=n DownTo 0 Do
Begin
Write(' Nhap he so a[',i,']=');
Readln(a[i]);
end;
Writeln('Ta co da thuc :');write('P(x)=');
For i:=n DownTo 1 Do
Write(a[i],'*x^',i,' + ');
Writeln(a[0]);
Writeln;
Usc(a[0],t,Number1);
Usc(a[n],m,Number2);
k:=0;
For i:=1 to Number1 Do
For j:=1 to Number2 Do
Begin
r.ts:=t[i];
r.ms:=m[j];
If Thu(r,n,a) Then
Begin

k:=k+1;
Kq[k]:=r;
End;
End;
Bien2:=False;
For i:=1 to k Do
Begin
Bien1:=True;
For j:=1 to i-1 Do
If Bang(Kq[i],Kq[j]) Then
Bien1:=False;
If Bien1 Then
Begin
ToiGian(Kq[i],Kq[i]);
Viet(Kq[i]);
Writeln(' La nghiem cua da thuc da cho');
End;
Bien2:=True;
End;
If Not(Bien2) Then
Writeln('Phuong trinh khong tim duoc nghiem huu ty !');
Write(' Tiep tuc hay khong (C/K)');Readln(ch);
Until Upcase(ch)='K';
END.
I. Ý tưởng giải thuật của chương trình
- Để tìm nghiệm hữu tỉ của đa thức bậc n:
• P
n
(x) = a
n

x
n
+ a
n-1
x
n-1
+ …+ a
1
x+a
0
=0
• Ta dựa vào nội dung của định lý số 3 ta đưa ra thuật giải như sau:
1. Diễn đạt bằng ngôn ngữ tự nhiên:
- Bước 1: Cung cấp số liệu cho bài toán:
+ Nhập bậc của đa thức n với n

0
+Nhập các hệ số
i
a
(i=0,1, ,n) của đa thức với
n
a

0
- Bước 2: tìm các ước số
0
a
,
n

a
:
+ Tìm number1 các ước số của
0
a
, lưu các giá trị ước số này vào mảng t ( có kiểu phân
tử số là số nguyên)
+ Tìm number1 các ước số của
n
a
, lưu các giá trị ước số này vào mảng m ( có kiểu phân
tử số là số nguyên)
- Bước 3: thực hiện phép thử để tìm nghiệm:
+ Ta lần lượt thay các giá trị

×