Tải bản đầy đủ (.docx) (16 trang)

Bairstows method python Có file Code

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 (406.18 KB, 16 trang )

TRƯỜNG ĐẠI HỌC CÔNG NGHIỆP VIỆT - HUNG
KHOA CÔNG NGHỆ THÔNG TIN
…..o0o…..

BÁO CÁO KẾT THÚC HỌC PHẦN
LINUX VÀ PHẦN MỀM MÃ NGUỒN
MỞ

Giảng viên hướng dẫn

: Ths.Hà Đăng Tồn

Nhóm sinh viên thực hiện

: Quách Tấn Sang
: Đặng Quang Trung

Lớp

: K43CNT2

*

Hà Nội - Năm 2023


MỤC LỤC
Phần A: HỆ ĐIỀU HÀNH UBUNTU...................................................................1
1.1. Sơ lược về Ubuntu...............................................................................................1
1.2. Tính năng chính của Ubuntu................................................................................1


Phần B: NGƠN NGỮ PYTHON...........................................................................5
2.1. Python.................................................................................................................5
2.2. Những ưu điểm của python.................................................................................5
2.3. Cú pháp của python.............................................................................................6
2.3.1. Định danh (identifier) trong Python....................................................................................6
2.3.2. Các từ khóa trong Python...................................................................................................7

Phần C: GIẢI THUẬT BAIRSTOW’S.................................................................8
3.1. Phương thức Bairstow’s là gì..............................................................................8
3.2. Mã giả..................................................................................................................8
3.3. Tài liệu Bairstow’s............................................................................................10
3.4. Kết quả đạt được................................................................................................14
3.4.1. Mã nguồn chương trình....................................................................................................14
3.4.2. Chương trình chạy kiểm thử.............................................................................................15

DANH MỤC TÀI LIỆU THAM KHẢO..............................................................1
NHẬN XÉT...........................................................................................................2


KÍ HIỆU CÁC CỤM TỪ VIẾT TẮT
OS

Operating System


Phần A: NGƠN NGỮ PYTHON
A.1. Python
Python là một ngơn ngữ lập trình bậc cao cho các mục đích lập trình đa năng,
được thiết kế với ưu điểm mạnh là dễ đọc, dễ học và dễ nhớ. Python là ngôn ngữ có
hình thức rất sáng sủa, cấu trúc rõ ràng, thuận tiện cho người mới học lập trình và là

ngơn ngữ lập trình dễ học. được dùng rộng rãi trong phát triển trí tuệ nhân tạo hoặc AI.
Python do Guido van Rossum tạo ra và lần đầu ra mắt vào năm 1991. Ban đầu,
Python được phát triển để chạy trên nền Unix. hưng rồi theo thời gian, Python dần mở
rộng sang mọi hệ điều hành từ MS-DOS đến Mac OS, OS/2, Windows, Linux và các
hệ điều hành khác thuộc họ Unix. Mặc dù sự phát triển của Python có sự đóng góp của
rất nhiều cá nhân, nhưng Guido van Rossum hiện nay vẫn là tác giả chủ yếu của
Python. Ông giữ vai trò chủ chốt trong việc quyết định hướng phát triển của Python.

A.2. Những ưu điểm của python
Python là một trong những ngơn ngữ lập trình phổ biến nhất hiện nay với nhiều ưu
điểm đáng kể như sau:
1. Dễ học và sử dụng: Python có cú pháp đơn giản, dễ đọc và dễ hiểu, phù hợp
cho người mới bắt đầu học lập trình. Bên cạnh đó, Python cịn có nhiều thư
viện mạnh mẽ, cung cấp nhiều chức năng tiện ích giúp cho việc lập trình dễ
dàng và nhanh chóng hơn.


2. Đa nền tảng: Python có thể chạy trên nhiều hệ điều hành khác nhau như
Windows, Linux, MacOS, và nhiều nền tảng khác.
3. Mã nguồn mở: Python là một ngôn ngữ mã nguồn mở, tức là bất kỳ ai đều
có thể truy cập và sử dụng mã nguồn của Python miễn phí. Điều này giúp
cho cộng đồng lập trình viên phát triển và cải tiến Python liên tục.
4. Hỗ trợ đa dạng các ứng dụng: Python có thể sử dụng cho nhiều mục đích
khác nhau như lập trình web, khoa học dữ liệu, trí tuệ nhân tạo, máy học,
lập trình đồ họa, và nhiều lĩnh vực khác.
5. Tính linh hoạt: Python có tính linh hoạt cao, cho phép kết hợp với các ngôn
ngữ khác như C++, Java, và C# để tạo ra các ứng dụng phức tạp hơn.
6. Hỗ trợ đa luồng: Python hỗ trợ đa luồng, cho phép thực hiện nhiều tác vụ
đồng thời và tăng tốc độ xử lý các tác vụ phức tạp.


A.3. Cú pháp của python
A.3.1. Định danh (identifier) trong Python
Một định danh trong Python là một chuỗi ký tự được sử dụng để định danh cho
biến, hàm, lớp, hoặc đối tượng trong chương trình. Định danh trong Python phải bắt
đầu bằng một chữ cái từ A tới Z hoặc từ a tới z, hoặc một dấu gạch dưới (_) và được
theo sau bởi bất kỳ ký tự, dấu gạch dưới hoặc số nào (từ 0 tới 9).
Tuy nhiên, Python không cho phép sử dụng các ký tự đặc biệt như @, $ và %
trong định danh. Ngồi ra, Python là một ngơn ngữ phân biệt chữ hoa-chữ thường, do
đó, các định danh như viettuts và Viettuts được coi là khác nhau.
Để đặt tên cho định danh trong Python, nên tuân theo các qui tắc sau đây:


 Sử dụng các từ hoặc cụm từ mô tả đối tượng được định danh.
 Sử dụng chữ thường và dấu gạch dưới để tách các từ trong tên định danh.
 Tránh sử dụng các từ viết tắt hoặc từ q ngắn để tránh gây nhầm lẫn hoặc
khó hiểu.
 Khơng sử dụng các từ khóa có sẵn trong Python (ví dụ: if, else, for,
while,...) làm tên định danh.
 Sử dụng chữ hoa cho các hằng số hoặc các lớp đối tượng.
A.3.2. Các từ khóa trong Python
Bảng dưới liệt kê các từ khóa trong Python. Đây là các từ dành riêng và bạn không
thể sử dụng chúng như là các hằng, biến hoặc cho bất kỳ tên định danh nào. Tất cả từ
khóa trong Python là chỉ ở dạng chữ thường.

and
assert
break
class
continue
def

del
elif
else
except

exec
finally
for
from
global
if
import
in
is
lambda

not
or
pass
print
raise
return
try
while
with
yield


Phần B: GIẢI THUẬT BAIRSTOW’S
B.1. Phương thức Bairstow’s là gì

Phương pháp Bairstow là một phương pháp dùng để tìm nghiệm của một hệ
phương trình đa thức bậc cao. Phương pháp này là một phương pháp giải đa thức số và
được sử dụng trong các thuật tốn tính tốn kỹ thuật số. Phương pháp Bairstow sử
dụng phương pháp giải đa thức bậc nhất và bậc hai để giải các phương trình đa thức
bậc cao. Nó cũng có thể được sử dụng để giải hệ phương trình đa thức bậc cao.
Phương pháp Bairstow có một số ưu điểm, bao gồm:
1. Tính ổn định: Phương pháp Bairstow rất ổn định trong việc giải các phương
trình đa thức bậc cao, kể cả trong trường hợp các hệ số của đa thức có thể
gây ra sự chênh lệch lớn.
2. Độ chính xác: Phương pháp Bairstow đạt được độ chính xác tương đối cao
khi giải phương trình đa thức bậc cao.
3. Khả năng giải hệ phương trình đa thức: Phương pháp Bairstow cũng có thể
được sử dụng để giải hệ phương trình đa thức bậc cao.
4. Tốc độ tính tốn: Phương pháp Bairstow có tốc độ tính tốn nhanh hơn so
với nhiều phương pháp giải đa thức khác, đặc biệt là với các đa thức có bậc
cao.

B.2. Tài liệu Bairstow’s
Phương pháp Bairstow là một phương pháp lặp liên quan một cách lỏng lẻo đến cả
phương pháp Müller và Newton-Raphson. Trước khi đi vào mơ tả tốn học của kỹ
thuật này, hãy nhớ lại dạng nhân của đa thức.
f 5  x   x  1  x  4   x  5   x  3  x  2 

Nếu chia cho một thừa số khơng phải là nghiệm (ví dụ, x + 6), phần nguyên sẽ là
đa thức bậc bốn. Tuy nhiên, trong trường hợp này, sẽ có một phần dư.
Dựa trên những điều trên, chúng ta có thể phát triển thuật toán để xác định một
nghiệm của đa thức: (1) đoán một giá trị cho nghiệm x = t, (2) chia đa thức cho thừa số
x - t, và (3) xác định xem có phần dư khơng. Nếu khơng có phần dư, giá trị đốn của ta
hồn hảo và nghiệm bằng với t. Nếu có phần dư, ta có thể điều chỉnh đốn một cách có
hệ thống và lặp lại quy trình cho đến khi khơng cịn phần dư và tìm được một nghiệm.

Sau khi làm được điều này, tồn bộ quy trình có thể được lặp lại cho phần nguyên để
tìm nghiệm khác.
Phương pháp Bairstow phụ thuộc vào q trình tốn học chia đa thức cho một thừa
số. Hãy nhớ lại từ cuộc trò chuyện của chúng ta về giảm bậc đa thức (Mục 7.2.2) rằng


phép chia tổng hợp liên quan đến chia đa thức cho một thừa số x - t. Ví dụ, đa thức
tổng quát [Công thức (7.1)]
f n  x  a0  a1 x  a2 x 2  ...  an x n

Có thể chia đa thức đó cho thừa số x - t để thu được đa thức thứ hai có bậc thấp
hơn một đơn vị.
f n 1  x  b1  b2 x  b3 x 2  ...  bn x n 1

với phần dư R = b0, trong đó các hệ số có thể được tính bằng mối quan hệ đệ quy.
bn an
bi ai  bi1t for i n 1 to 0

Lưu ý rằng nếu t là một nghiệm của đa thức gốc, phần dư b0 sẽ bằng khơng. Để
cho phép tính các nghiệm phức, phương pháp Bairstow chia đa thức cho một thừa số
bậc hai là x2 - rx - s. Nếu làm như vậy với Công thức (7.29), kết quả sẽ là một đa thức
mới.
f n 2 ( x) b2  b3 x  ...  bn 1x n 3  bn x n 2

với phần dư là
R  b1  x  r   b0

Tương tự như phương pháp chia đa thức thơng thường, ta có thể sử dụng một mối
quan hệ đệ quy đơn giản để thực hiện phép chia cho thừa số bậc hai:
bn  an

bn 1  an 1  rbn
bi  ai  rbi1  sbi2 for i =n  2 to 0 .

Nhân tử bậc hai được giới thiệu để cho phép xác định các nghiệm phức. Điều này
liên quan đến việc, nếu các hệ số của đa thức gốc là thực, thì các nghiệm phức xuất
hiện dưới dạng cặp liên hợp. Nếu x2- rx- s là một thừa số chính xác của đa thức, các
nghiệm phức có thể được xác định bằng cơng thức bậc hai. Do đó, phương pháp giảm
xuống để xác định các giá trị của r và s khiến cho hạng số bù trừ trở thành bằng khơng.
Nói cách khác, chúng ta tìm các giá trị làm cho hạng số dư bằng không.
Việc kiểm tra công thức (7.31) dẫn đến kết luận rằng để phần dư bằng không, b0
và b1 phải bằng khơng. Vì khó có khả năng các giả thuyết ban đầu về giá trị của r và s
sẽ dẫn đến kết quả này, chúng ta phải tìm một cách thức hệ thống để điều chỉnh các giả


thuyết của chúng ta để b0 và b1 tiến dần đến không. Để làm điều này, phương pháp
Bairstow sử dụng một chiến lược tương tự như phương pháp Newton-Raphson. Bởi vì
cả b0 và b1 đều là các hàm của cả r và s, chúng ta có thể mở rộng chúng bằng cách sử
dụng chuỗi Taylor, như trong [từ nhớ lại công thức (4.26)].
b1
b
r  1 s
r
s
b
b
b0  r  r , s  s  b0  0 r  0 s
r
s
b1  r  r , s  s  b1 


Ở đây, các giá trị ở phía bên phải đều được đánh giá tại r và s. Lưu ý rằng các
giá trị bậc hai và cao hơn đã bị bỏ qua. Điều này đại diện cho một giả định ngầm
rằng 2r và 2s đủ nhỏ để các thành phần bậc cao hơn có thể bị bỏ qua. Một cách khác
để diễn đạt giả định này là nói rằng các giả định ban đầu đủ gần với các giá trị của r và
s tại các nghiệm.
Các thay đổi, Dr và Ds, cần thiết để cải thiện các đoán đầu của chúng ta có thể
được ước tính bằng cách đặt (7.33) bằng không để cho ra:
b1
b
r  1 s  b1
r
s
b0
b
r  0 s  b0
r
s

Nếu các đạo hàm riêng của các b có thể được xác định, chúng ta có một hệ phương
trình gồm hai phương trình có thể được giải đồng thời cho hai ẩn số Dr và Ds.
Bairstow đã chỉ ra rằng các đạo hàm riêng có thể được tính bằng phép chia tổng hợp
của các b tương tự như cách các b đã được tạo ra:
cn bn
cn 1 bn 1  rcn
ci bi  rci1 +sci2 for i  n - 2 to 1

Trong đó, b0 / r c1, b0 / s b1 / r c2 và b1 / s c3 . Do đó, đạo hàm riêng có
thể được tính bằng phép chia đa thức giả tạo của b's. Sau đó, đạo hàm riêng có thể
được thay thế vào Công thức (7.34) và (7.35) cùng với b's để tính ra.
c2r  c3s   b1

c1r  c2s   b0

Các phương trình này có thể giải được để tìm ra Dr và Ds, và sau đó có thể sử
dụng chúng để cải thiện các đốn đầu về r và s. Tại mỗi bước, một sai số xấp xỉ trong r
và s có thể được ước tính như sau:


 a ,r 

r
100%
r


 a ,s 

s
100%
s

Khi cả hai ước lượng sai số này đều nhỏ hơn một tiêu chuẩn dừng được xác định
trước là es, giá trị của các nghiệm có thể được xác định bởi cơng thức:
x 

r  r 2  4s
2

Ở điểm này, có ba khả năng tồn tại:
1. Thương là đa thức bậc ba hoặc cao hơn. Trong trường hợp này, phương
pháp của Bairstow sẽ được áp dụng để tính tốn giá trị mới cho r và s. Các

giá trị của r và s từ trước đó có thể được sử dụng như các ước đoán khởi
đầu cho ứng dụng này.
2. Thương là đa thức bậc hai. Trong trường hợp này, hai gốc còn lại có thể
được tính tốn trực tiếp bằng cơng thức (7.39).
3. Thương là đa thức bậc một. Trong trường hợp này, gốc duy nhất cịn lại có
thể được tính đơn giản bằng công thức.
x=-

s
r

B.3. Ứng dụng của Bairstow’s
Bairstow's là một phương pháp giải hệ phương trình đa thức phi tuyến bằng cách
sử dụng phép lặp. Phương pháp này được đặt theo tên của nhà tốn học người Anh
Herbert Bairstow.
Bairstow's có ứng dụng trong nhiều lĩnh vực, bao gồm cả toán học, kỹ thuật và
khoa học tự nhiên. Dưới đây là một số ứng dụng phổ biến của Bairstow's:
1. Tìm nghiệm của đa thức: Bairstow's được sử dụng để tìm các giá trị xấp xỉ
của nghiệm của một đa thức phi tuyến. Điều này có thể áp dụng trong các
bài tốn liên quan đến phương trình đa thức, như tìm các nghiệm của một
đa thức bậc cao.
2. Phân tích đa thức: Phương pháp Bairstow's có thể được sử dụng để phân
tích cấu trúc và tính chất của một đa thức. Nó có thể giúp xác định các hệ
số và bậc của đa thức, cũng như tìm ra các thừa số và nghiệm của đa thức.


3. Mơ hình hóa dữ liệu: Bairstow's cũng có thể được áp dụng trong việc xây
dựng các mơ hình dự đốn dựa trên dữ liệu thực tế. Với việc tìm ra các
nghiệm gần đúng của một đa thức, phương pháp này có thể giúp xây dựng
các mơ hình phù hợp với dữ liệu đã cho.

4. Tính tốn khoa học và kỹ thuật: Bairstow's có thể được sử dụng trong nhiều
lĩnh vực khoa học và kỹ thuật, bao gồm cả điện tử, điện lực, và cơ học.
Phương pháp này có thể giúp giải quyết các bài toán liên quan đến các hệ
thống phi tuyến và đa thức.

B.4. Mã giả
SUB Bairstow (a,nn,es,rr,ss,maxit,re,im,ier)
DIMENSION b(nn), c(nn)
r 5 rr; s 5 ss; n 5 nn
ier 5 0; ea1 5 1; ea2 5 1
DO
IF n , 3 OR iter $ maxit EXIT
iter 5 0
DO
iter 5 iter 1 1
b(n) 5 a(n)
b(n 2 1) 5 a(n 2 1) 1 r * b(n)
c(n) 5 b(n)
c(n 2 1) 5 b(n 2 1) 1 r * c(n)
DO i 5 n 2 2, 0, 21
b(i) 5 a(i) 1 r * b(i 1 1) 1 s * b(i 1 2)
c(i) 5 b(i) 1 r * c(i 1 1) 1 s * c(i 1 2)
END DO
det 5 c(2) * c(2) 2 c(3) * c(1)
IF det fi 0 THEN
dr 5 (2b(1) * c(2) 1 b(0) * c(3))ydet
ds 5 (2b(0) * c(2) 1 b(1) * c(1))ydet
r 5 r 1 dr
s 5 s 1 ds
IF rfi0 THEN ea1 5 ABS(dryr) * 100

IF sfi0 THEN ea2 5 ABS(dsys) * 100
ELSE
r5r11


s5s11
iter 5 0
END IF
IF ea1 # es AND ea2 # es OR iter $ maxit EXIT
END DO
CALL Quadroot(r,s,r1,i1,r2,i2)
re(n) 5 r1
im(n) 5 i1
re(n 2 1) 5 r2
im(n 2 1) 5 i2
n5n22
DO i 5 0, n
a(i) 5 b(i 1 2)
END DO
END DO
IF iter , maxit THEN
IF n 5 2 THEN
r 5 2a(1)ya(2)
s 5 2a(0)ya(2)
CALL Quadroot(r,s,r1,i1,r2,i2)
re(n) 5 r1
im(n) 5 i1
re(n 2 1) 5 r2
im(n 2 1) 5 i2
ELSE

re(n) 5 2a(0)ya(1)
im(n) 5 0
END IF
ELSE
ier 5 1
END IF
END Bairstow
(b) Roots of Quadratic Algorithm
SUB Quadroot(r,s,r1,i1,r2,i2)
disc 5 r ^ 2 1 4 * s
IF disc . 0 THEN


r1 5 (r 1 SQRT(disc))y2
r2 5 (r 2 SQRT(disc))y2
i1 5 0
i2 5 0
ELSE
r1 5 ry2
r2 5 r1
i1 5 SQRT(ABS(disc))y2
i2 5 2i1
END IF
END QuadRoo0074

B.5. Kết quả đạt được
B.5.1. Mã nguồn chương trình


B.5.2. Chương trình chạy kiểm thử



DANH MỤC TÀI LIỆU THAM KHẢO
1. />2. />3. Giáo trình Numerical Methods for Engineers


NHẬN XÉT
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………



×