định lí 2 : mọi đa thức Pnx 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.. XÂY DỰNG CHƯƠNG TRÌNH TÌM NGH
Trang 1TRƯỜ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
Trang 2xét đa thức bặc n của x có dạng như sau:
Pn(x) = anxn + an-1xn-1 + …+ a1x+a0
Với các hệ số ai(i=0…n) là các hệ số thực
an 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:
Pn(x) = (an, an-1, …, a0)
Tập các hệ số an, …,a0 của đa thức P(x) sẽ được kí hiệu là P(x) hay Pn
1 Định nghĩa : số được gọi là nghiệp của đa thức Pn(x) hay còn gọi là nghiệm của phương trình Pn(x) = 0 nếu ta có P( ) = 0
2 Định lí 1 : giả sử Pn(x) có bậc n 1 điều kiện cần và đủ để đa thức Pn(x) có nghiệm
là nó chia hết cho x-
Pn(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 Pn(x) có nghiệm là ta chia Pn(x) cho x-
Pn(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:
Pn( ) = r = 0 Pn(x) chia hết cho x-
Trường hợp Pn(x) có bậc là 0,(Pn(x) = an = const) thì nó bằng 0 với mọi x nếu an= 0 và khác 0 với mọi x nếu an 0
Đều kiện đủ:
Nếu Pn(x) có dạng như biểu thức (2) thì rõ ràng Pn( ) = 0 do đó nó có nghiệm là
3 định lí 2 : mọi đa thức Pn(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:
Pn(x) = anxn + an-1xn-1 + …+ a1x+a0 ( an 0)
Ta dựa vào nội dung của định lí sau:
Định lí 3: nếu an, an-1,…, a1, a0 là các hệ số nguyên của Pn(x) thì nghiệm hữu tỉ của Pn(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 a0, còn q là ước của an
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
Trang 3- Để tìm nghiệm hữu tỉ của đa thức bậc n:
Pn(x) = anxn + an-1xn-1 + …+ a1x+a0 =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 n0
+Nhập các hệ số a i(i=0,1, ,n) của đa thức với a n 0
- Bước 2: tìm các ước số a0, a n:
+ Tìm number1 các ước số của a0, 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 a n, 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 Pn(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 Pn(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 đồ:
Trang 4II 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ố a i(i=0,1, ,n)
- tìm các ước số a0lưu vào mảng t
- tìm các ước số a nlưu vào mảng m
t i
m j vào đa thức Pn(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
Trang 5Ðị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 ao và an 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 ao và an n là bậc của đa thức P x n
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
Kq : array 1 30 of HuuTy;
Trang 63 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 ToiGian r 1 : 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 Bang 1, 2 : 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 Cong r r 1, 2 : 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 Tru r r 1, 2 : 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 Nhan r r 1, 2 : 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 Chia r r 1, 2 : 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 LuyThua : n integer r, 1 : HuuTy Var r; : HuuTy ;
Trang 7Chứ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 Doi r 1 : 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
Trang 8r.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
Trang 9Else
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;
Trang 10End;
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;
Trang 11Var 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]);
Trang 12Writeln;
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';
Trang 13I Ý 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:
Pn(x) = anxn + an-1xn-1 + …+ a1x+a0 =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 n0
+Nhập các hệ số a i(i=0,1, ,n) của đa thức với a n 0
- Bước 2: tìm các ước số a0, a n:
+ Tìm number1 các ước số của a0, 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 a n, 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ị