Dễ dàng để sử dụng: Python là một ngôn ngữ bậc cao rất dễ dàng để sử dụng với số lượng từ khóa ít hơn và cú pháp đơn giản, phần code của Python được định nghĩa rõ ràng và rành mạch, gi
Trang 1TỔNG LIÊN ĐOÀN LAO ĐỘNG VIỆT NAM
TRƯỜNG ĐẠI HỌC TÔN ĐỨC THẮNG KHOA CÔNG NGHỆ THÔNG TIN
NGUYỄN THỊ MINH HƯƠNG - 52300201
BÀI TIỂU LUẬN BÁO CÁO GIỮA KỲ GIẢI TÍCH ỨNG DỤNG CHO KHOA
CÔNG NGHỆ THÔNG TIN
THÀNH PHỐ HỒ CHÍ MINH, NĂM 2023
Trang 2TỔNG LIÊN ĐOÀN LAO ĐỘNG VIỆT NAM
TRƯỜNG ĐẠI HỌC TÔN ĐỨC THẮNG KHOA CÔNG NGHỆ THÔNG TIN
NGUYỄN THỊ MINH HƯƠNG - 52300201
BÀI TIỂU LUẬN BÁO CÁO GIỮA KỲ GIẢI TÍCH ỨNG DỤNG CHO KHOA
CÔNG NGHỆ THÔNG TIN
Người hướng dẫn
Giảng viên Nguyễn Thị Diễm Hằng
THÀNH PHỐ HỒ CHÍ MINH, NĂM 2023
Trang 3LỜI CẢM ƠN
Lời đầu tiên, em xin được gửi lời cảm ơn chân thành nhất đến cô Nguyễn ThịDiễm Hằng Trong suốt quá trình học tập và tìm hiểu môn học, em đã nhận được rấtnhiều sự quan tâm, giúp đỡ, hướng dẫn tâm huyết và tận tình của cô Cô đã giúp emtích lũy thêm nhiều kiến thức về môn học này cũng như đưa ra những góp ý đã giúpem có thể hoàn thành bài tiểu luận này cách tốt nhất Em rất biết ơn và cảm kích vìsự hỗ trợ vô cùng to lớn của cô Mặc dù đã cố gắng hoàn thành đề tài, nhưng emnhận thấy rằng bài làm vẫn còn nhiều điểm cần cải thiện Em rất mong nhận đượcthêm sự góp ý thầy/cô để bài tiểu luận trở nên hoàn thiện hơn Em xin chân thànhcảm ơn!
TP Hồ Chí Minh, ngày 22 tháng 12 năm 2023
Tác giả Đã kí Nguyễn Thị Minh Hương
Trang 4BÀI TIỂU LUẬN ĐƯỢC HOÀN THÀNH TẠI TRƯỜNG ĐẠI HỌC TÔN ĐỨC THẮNG
Tôi xin cam đoan đây là công trình nghiên cứu của riêng tôi và được sựhướng dẫn khoa học của Gv Nguyễn Thị Diễm Hằng Các nội dung nghiêncứu, kết quả trong đề tài này là trung thực và chưa công bố dưới bất kỳ hìnhthức nào trước đây Những số liệu trong các bảng biểu phục vụ cho việc phântích, nhận xét, đánh giá được chính tác giả thu thập từ các nguồn khác nhau cóghi rõ trong phần tài liệu tham khảo
Ngoài ra, trong tiểu luận còn sử dụng một số nhận xét, đánh giá cũngnhư số liệu của các tác giả khác, cơ quan tổ chức khác đều có trích dẫn và chúthích nguồn gốc
Nếu phát hiện có bất kỳ sự gian lận nào tôi xin hoàn toàn chịu trách nhiệm về nội dung tiểu luận của mình Trường Đại học Tôn Đức Thắng
không liên quan đến những vi phạm tác quyền, bản quyền do tôi gây ra trongquá trình thực hiện (nếu có)
TP Hồ Chí Minh, ngày 22 tháng 12 năm 2023
Tác giả Đã kí Nguyễn Thị Minh Hương
Trang 5CHƯƠNG 2: THỰC NGHIỆM
Cung cấp mã nguồn Hình ảnh kết quả
Trang 61.1.2 Các thư viện Numpy, Sympy, Matplotlib,
1.1.3 Môi trường làm việc
1.2 Trình bày các bước thực hiện câu 1a, 1b,1c
1.2.1 Trình bày các bước thực hiện câu 1a
1.2.2 Trình bày các bước thực hiện câu 1b
1.2.3 Trình bày các bước thực hiện câu 1c
Trang 7CHƯƠNG 1 DANH MỤC HÌNH VẼ
CHƯƠNG 1 CƠ SỞ LÝ THUYẾT
1.1 Giới thiệu
1.1.1 Hình 1 Hình ảnh minh họa Python
1.1.2 Hình 2 Thư viện Numpy
1.1.2 Hình 3 Thư viện SymPy
1.1.2 Hình 3 Thư viện Matplotlib
Trang 8CHƯƠNG 2 CƠ SỞ LÝ THUYẾT2.1 Giới thiệu
2.1.1 Giới thiệu ngôn ngữ Python
Hình 1 Hình ảnh minh họa Python
Python là một ngôn ngữ lập trình thông dịch (interpreted), hướng đối tượng oriented), và là một ngôn ngữ bậc cao (high-level) ngữ nghĩa động (dynamicsemantics) Python hỗ trợ các module và gói (packages), khuyến khích chương trìnhmodule hóa và tái sử dụng mã
(object- Lịch sử hình thành Python
Python là một ngôn ngữ lập trình do Guido van Rossum tạo ra và lần đầu ra mắt vàonăm 1991 Từ đó, Python đã trải qua nhiều phiên bản phát triển đáng kể Dưới đâylà một số phiên bản quan trọng của Python:
Python 1.0: Phát hành vào năm 1994 với các tính năng như lambda, map, filter và reduce
Python 2.0: Ra mắt vào ngày 16 tháng 10 năm 2000, với nhiều tính năng mớinhư hỗ trợ Unicode và xử lý danh sách nhanh hơn
Python 3.0: Phát hành vào ngày 3 tháng 12 năm 2008, Python 3.0 mang lại nhiều cải tiến như in hàm và hỗ trợ tốt hơn cho việc xử lý chuỗi
Python đã trải qua nhiều phiên bản khác nhau và ngày càng được cải tiến và hoàn thiện hơn Điều này cho thấy sự phát triển liên tục và cam kết của cộng đồng lập trình đối với ngôn ngữ này
Các đặc điểm của ngôn ngữ Python:
Trang 9 Dễ dàng để sử dụng: Python là một ngôn ngữ bậc cao rất dễ dàng để sử
dụng với số lượng từ khóa ít hơn và cú pháp đơn giản, phần code của Python được định nghĩa rõ ràng và rành mạch, giúp người đọc dễ dàng hiểu
Thư Viện Rộng Lớn: Python có một thư viện chuẩn khá rộng lớn và dễ
dàng tích hợp với UNIX, Windows và Macintosh
Là ngôn ngữ thông dịch: Trình thông dịch thực thi code theo từng dòng (và
bạn không cần phải biên dịch ra file chạy), điều này giúp cho quá trình debugtrở nên dễ dàng hơn
Là ngôn ngữ lập trình hướng đối tượng và hỗ trợ các phương thức lập
trình theo hàm và theo cấu trúc
Hỗ Trợ Đa Dạng: Python hỗ trợ lập trình GUI, mã nguồn mở và có thể tích
hợp với các ngôn ngữ lập trình khác
Nhờ vậy mà Python đang dần trở thành xu hướng lập trình trên thế giới: Python khi sử dụng trên máy chủ có thể tạo ra các ứng dụng nền web (web
application). Python có thể chạy song song cùng các phần mềm khác để dễ phân luồng
công việc. Python có thể kết nối dễ dàng đến cơ sở dữ liệu, hay cả việc đọc và ghi file. Với Python, việc xử lý Big Data và các phép toán phức tạp trở nên dễ
dàng. Dễ dàng sử dụng Python để tạo ra các sản phẩm demo một cách nhanh
chóng
Như vậy, Python không chỉ có lịch sử phát triển đáng kể mà còn có những đặc điểmvà ứng dụng đa dạng, giúp nó trở thành một trong những ngôn ngữ lập trình phổbiến và mạnh mẽ nhất hiện nay
2.1.2 Các thư viện Numpy, Sympy, Matplotlib,…
Trang 10a, Thư viện Numpy:
Hình 2 Hình ảnh minh họa thư viện NumPy
NumPy (Numeric Python): là một thư viện phổ biến và mạnh mẽ trong Python,
được sử dụng để tạo và quản lý mảng, thực hiện các phép toán logic và thực hiệncác phép toán số học tuyến tính NumPy hỗ trợ tích hợp với nhiều ngôn ngữ như Cvà C++
Các hàm quan trọng trong NumPy:
np.array(): Chuyển đổi một đối tượng thành mảng NumPy.np.zeros() và np.ones(): Tạo mảng chứa toàn số 0 hoặc 1.np.arange(): Tạo mảng theo dãy số
np.linspace(): Tạo mảng với số lượng phần tử cố định trong khoảng giữa hai giátrị
np.shape() và np.reshape(): Lấy hình dạng hoặc thay đổi hình dạng của mảng.np.sum(), np.mean(), np.min(), np.max(): Các hàm thống kê trên mảng
Ví dụ: Từ thư viện Numpy ta có thể tạo và sử dụng mảng NumPy cũng như một số
hàm thống kê cơ bản như sau:
import numpy as np # Tạo ma ng 1 chiề u
mang_1d = np array ([ 1 , , , , , , , , , 2 3 4 5 6 7 8 9 10 ]) # Tạo ma ng 2 chiề u
mang_2d = np array ([[ 4 , 5 , 6 ], [ , , 7 8 9 ]]) # Tính tổ ng, trung bình, tổ- i thiề u, tổ- i đa cu a ma ng
tong_mang_1d = np sum ( mang_1d )
trung_binh_mang_2d np mean ( mang_2d )
min_mang_1d = np min mang_1d ( )
max_mang_2d = np max mang_2d ( ) #In ra kề- t qua
Trang 11print ( "Giá trị nho nhấ- t:" , min_mang_1d )
print ( "Giá trị lớn nhấ- t:" , max_mang_2d )
b, Thư viện Sympy:
Hình 3 Hình ảnh minh họa thư viện SymPy
SymPy là một thư viện Python dành cho toán học biểu tượng Nó nhằm mục đích
trở thành một hệ thống đại số máy tính (CAS) đầy đủ tính năng trong khi vẫn giữmã đơn giản nhất có thể để dễ hiểu và dễ mở rộng SymPy được viết hoàn toàn bằngPython
Một số hàm quan trọng trong SymPy và ví dụ
a, Hàm solve
Trong SymPy hàm solve được sử dụng để giải phương trình hoặc hệ phương trình
Ví dụ:
import sympy as sp #Tạo ra ký hiệu x
x = sp symbols ( 'x' ) #Giai phương trình x^2+4x+4
Trang 12import sympy as sp # Tạo ra ký hiệu x
x = sp symbols ( 'x' ) # Xác định biề u thức
k_qua ( f 2
print ( k_qua )
Ngoài ra, còn rất nhiều hàm khác có trong thư viện SymPy để tạo các biến và hàm,
cũng như mở rộng và đơn giản hóa các câu lệnh toán học một cách tượng trưng và giải các phương trình, bất phương trình và thậm chí cả hệ phương trình / bất phươngtrình Vì thế, với khả năng mạnh mẽ và linh hoạt, SymPy là một công cụ hữu ích cho những người làm việc trong lĩnh vực toán học và khoa học máy tính sử dụng Python
c, Thư viện Matplotlib:
Hình 4.Hình ảnh minh họa thư viện Matplotlib
Trang 13Matplolib là một thư viện phổ biến trong Python được sử dụng để hiển thị dữ liệu
dưới dạng biểu đồ hai chiều và ba chiều Thư viện này thường được sử dụng trong các ứng dụng khoa học và có khả năng hiển thị dữ liệu dưới nhiều dạng biểu đồ khác nhau
Các hàm quan trọng trong Matplotlib bao gồm:
1 plot(): Dùng để vẽ biểu đồ đường 2 scatter(): Dùng để vẽ biểu đồ phân tán 3 bar(): Dùng để vẽ biểu đồ cột 4 hist(): Dùng để vẽ biểu đồ histogram 5 xlabel() và ylabel(): Dùng để đặt nhãn cho trục x và trục y 6 title(): Dùng để đặt tiêu đề cho biểu đồ.
Ví dụ về cách sử dụng các hàm từ thư viện Matplotlib để vẽ biểu đồ
import matplotlib pyplot as plt
import numpy as np #Tạo một ma ng các giá trị từ 0 đề- n 10 với 100 điề m cách đề u nhau
x = np linspace ( 0 , 10 , 100 ) #Tính giá trị sin cu a mổO i phấ n tư trong ma ng x và lưu vào ma ng y
y np sin ( ) #Vẽ biề u đổ đường dựa trền dữ liệu x và y plt plot ( , y )
#Đặt tền cho trục x plt xlabel ( 'Trục x' ) #Đặt tền cho trục y plt ylabel ( 'Trục y' ) #Đặt tền biề u đổ plt title ( 'Biề u đổ hàm sin' ) #Hiề n thị biề u đổ đã vẽ plt show ()
Tóm lại, Matplotlib là một công cụ linh hoạt, dễ sử dụng để tạo và tùy chỉnh đồ thị
và biểu đồ, là lựa chọn hàng đầu trong cộng đồng Python cho công việc trực quan hóa dữ liệu
2.1.3 Môi trường làm việc
Môi trường làm việc trong Python rất đa dạng và linh hoạt Dưới đây là một số môi trường phổ biến:
PyCharm IDE:
PyCharm là một môi trường phát triển tích hợp (IDE) phổ biến nhất cho Python
Trang 14Python Virtual Environment:
Python Virtual Environment (môi trường ảo Python) cho phép tạo ra các môitrường làm việc cô lập để quản lý các gói và framework cho các dự án Python khác nhau
Visual Studio Code:
VS Code cung cấp nhiều tính năng hiệu quả như hỗ trợ biên tập, debug, tíchhợp Git, và tùy chỉnh cao
Nó hỗ trợ nhiều ngôn ngữ lập trình và cung cấp các extension mạnh mẽ nhưHTML Snippets, CSS Peek, và Live Server cho phát triển web
2.2 Trình bày các bước thực hiện câu 1a, 1b, 1c
2.2.1 Trình bày các bước thực hiện câu 1a
Bước 1: Import thư viện
import sympy as sp
import matplotlib pyplot as plt
import numpy as np
import mathImport các thư viện cần thiết: ‘sympy’ để thực hiện các phép toán biểu diễn ký hiệuvà giải phương trình, ‘matplotlib’ dùng để vẽ đồ thị và ‘math’, ‘numpy’ để thựchiện các phép toán học
Bước 2: Gán giá trị cho biến A
Trang 15Hàm np.linspace(-1500, 1500, 40) dùng để tạo một mảng các giá trị gồm 40 phầntử, bắt đầu từ -1500 và kết thúc tại 1500 Nhằm tạo ra một dãy giá trị để tính toán vàvẽ đồ thị của hàm số.
Bước 4: Định nghĩa 2 hàm f(x), g(x); tính toán giá trị y tương ứng
def ( ): x
\ \ return ** 2 - 2 A x - A** 2 def ( ): x
\ \ return - ** x 2 + 4 * * A x + A** 3
y1 ( ) x y2 ( ) x
Dòng 1: plt.plot(x, y1, 'red', label='f(x)=x^2- 2Ax -A^2') dùng để vẽ đồ thị
f(x) bằng màu đỏ và hiển thị nhãn là f(x)=x^2- 2Ax -A^2
Dòng 2: plt.plot(x, y2, 'blue', label='g(x)= -x^2 + 4Ax +A^3') dùng để vẽ đồ
thị g(x) bằng màu xanh và hiện thị nhãn là 'g(x)= -x^2 + 4Ax +A^3'
Bước 6: Tìm điểm giao của hai hàm
Trang 16 Dòng 3: Hàm g_x được định nghĩa : = -x_m**2 + 4*A*x_m + A**3 cũng
chính là g(x)
Dòng 4: sp.solve((g_x) - (f_x), x_m) dùng để giải phương trình (g_x) – (f_x)
chính là giải phương trình g_x=f_x là tìm hoành độ giao điểm để tìm ra đượcđiểm giao nhau của f(x) và g(x)
Bước 7: Vẽ các điểm giao nhau và in ra tọa độ của chúng
dem = 1
for root in x_roots : \ \ y_root ( root ) \ \ plt plot ( root , y_root , 'go' , label = 'Giao điề m' if dem == else '' )
\ \ print ( "1a Giao điề m { dem } : ( { float( root ) , { float( y_root ) )" ) \ \ dem += 1
Đầu tiên, biến dem được sử dụng để đếm số lần lặp qua các điểm giao nhau.Mỗi lần lặp, chúng ta lấy một giá trị root từ danh sách x_roots, sau đó tínhgiá trị y tương ứng với điểm giao nhau bằng cách đưa giá trị root vào hàm sốf(x) ‘y_root = f(root)’
Sau khi tính được giá trị y, chúng ta sử dụng plt.plot để vẽ điểm giao nhautrên đồ thị Điểm này sẽ được đánh dấu bằng màu xanh lá cây ‘go’ Nếu đâylà lần lặp đầu tiên (với dem == 1), chúng ta sẽ thêm chú thích "Giao điểm"vào điểm đó Điều này giúp tránh chú thích nhiều lần khi có nhiều điểm giao Cuối cùng, chúng ta in ra tọa độ cụ thể của điểm giao nhau thứ 1 và thứ 2 :
print(f"1a Giao điểm {dem}: ({float(root)}, {float(y_root)})") Sử dụng float
để in ra số thực
Biến dem được tăng lên sau mỗi lần lặp để đếm số lần lặp và quản lý chú
thích trên đồ thị
Bước 8: Thêm tiêu đề, nhãn trục, chú thích và lưới cho đồ thị
plt title ( 'Cấu 1a' ) plt xlabel ( "x" ) plt ylabel ( "y" ) plt legend () plt grid ( linestyle = ' ' ) plt show ()
Dòng 1: Thêm tiêu đề cho đồ thị là ‘Câu 1a’ Dòng 2,3 : Đặt tên cho trục x là ‘x’, đặt tên cho trục y là ‘y’ Dòng 4: Dùng để thêm chú thích vào đồ thị
Dòng 5: Dùng để vẽ lưới
Trang 17 Dòng 6: Hiển thị đồ thị
2.2.2 Trình bày các bước thực hiện câu 1b
Bước 1: Khai báo biến x
x = sp symbols ( 'x' )Khai báo biến ký hiệu x bằng cách sử dụng sp.symbols('x')
Bước 2: Gán giá trị cho biến A
Hàm f(x) được định nghĩa: x**2 – 2*A*x – A**2
Bước 4: Viết phương trình tiếp tuyến
x_0 = 0
y_0 A** 2
f_dhb1 sp diff ( fx , x hsgoc f_dhb1 subs ( , x_0 )
ttuyen hsgoc ( - x x_0 ) + y_0
Vì phương trình tiếp tiếp có dạng y=y’(x0)(x-x0)+y0 nên Dòng 1, 2: Gán giá trị cho x0, y0 Với x0=0, y0=-A^2 Dòng 3: ‘f_dhb1 = sp.diff(fx, x)’ dùng để tính đạo hàm f’(x) Dòng 4: ‘hsgoc = f_dhb1.subs(x, x_0)’ dùng để tính giá trị của đạo hàm tại
điểm x_0 cũng chính là hệ số góc của tiếp tuyến (y’(x0))
Dòng 5: ‘ttuyen = hsgoc * (x - x_0) + y_0’ chính là phương trình tiếp tuyếnvới dạng y=y’(x0)(x-x0)+y0
Bước 5: Tạo mảng giá trị x cho đồ thị
x_gtri np linspace ( 1500 , 1500 , 40 )Hàm np.linspace(-1500, 1500, 40) dùng để tạo một mảng các giá trị gồm 40 phầntử, bắt đầu từ -1500 và kết thúc tại 1500 Nhằm tạo ra một dãy giá trị để tính toán vàvẽ đồ thị của hàm số
Bước 6: Tính giá trị y tương ứng với mỗi giá trị x của f(x) và tiếp tuyến
Trang 18ttuyen_gtri [ = ttuyen subs( x , val ) for val in x_gtri ]
Bước 7: Vẽ đồ thị của f(x) và tiếp tuyến
plt plot ( x_gtri , f_gtri , 'blue' , label = f(x)=x^2- 2Ax -A^2' ) plt plot ( x_gtri , ttuyen_gtri , 'orange' , label = 'Tiề- p tuyề- n T' ) plt plot ( x_0 , y_0 , 'go' ) \
Dòng 1 plt.plot(x_gtri, f_gtri, 'blue', label='f(x)= x^2- 2Ax -A^2'): dùng đểvẽ đồ thị f(x) bằng màu xanh ‘blue’ và hiển thị nhãn là f(x)=x^2- 2Ax -A^2
Dòng 2 plt.plot(x_gtri, ttuyen_gtri, 'orange', label='Tiếp tuyến T'): dùng đểvẽ tiếp tuyến T bằng màu cam ‘orange’và hiển thị nhãn là ‘Tiếp tuyến T’
Dòng 3 plt.plot(x_0, y_0, 'go'): dùng để vẽ giao điểm của f(x) và tiếp tuyến
T Điểm này được đánh dấu bằng màu xanh lá cây ‘go’
Bước 8: Dịch chuyển đồ thị f(x) ban đầu xuống 4A^3 đơn vị
dich_chuyen = fx - 4 * A** 3
Đồ thị mới chính là lấy đồ thị f(x) ban đầu trừ cho 4A^3 : ‘fx - 4 * A**3’
Bước 9: Tính giá trị giá trị y cho hàm số đã dịch chuyển tại mỗi giá trị x trong
Dòng 2: Vẽ đồ thị của hàm số đã dịch chuyển bằng cách sử dụng giá trị x, y
từ mảng x_gtri và y_dich_chuyen Đồ thị hàm dịch chuyển này được vẽ màuđỏ ‘red’ và được chú thích là 'f(x) dịch chuyển'
Bước 10: Giải phương trình f(x) dịch chuyển −T=0
x_root sp solve ( dich_chuyen - ttuyen , x y_root [ ttuyen subs( , x root ) for root in x_root ]
Dòng 1: x_root = sp.solve(dich_chuyen - ttuyen, x) sử dụng hàm
sp.solve để giải phương trình ‘dich_chuyen - ttuyen = 0’ chính là phương trình f(x) dịch chuyển −T=0 Nhằm tìm tọa độ x của các điểm giao nhau giữa f(x) dịch chuyển và đường tiếp tuyến T
Dòng 2: tính toán tọa độ y tương ứng của các điểm giao nhau bằng
cách thay thế từng tọa độ x (gốc) vào phương trình của đường tiếp tuyến