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 PythonPython là một ngôn ngữ lập trình do Guido van Rossum tạo r
Trang 1TỔNG LIÊN ĐOÀN LAO ĐỘNG VIỆT NAMTRƯỜ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 KHOACÔ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 NAMTRƯỜ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ẬNBÁO CÁO GIỮA KỲ
GIẢI TÍCH ỨNG DỤNG CHO KHOACÔNG NGHỆ THÔNG TIN
Người hướng dẫnGiả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ẮNGTôi xin cam đoan đây là công trình nghiên cứu của riêng tôi và được sự
cứ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.
như 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áchnhiệm về nội dung tiểu luận của mình Trường Đại học Tôn Đức Thắngkhô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 12năm 2023
Tác giảĐã kíNguyễn Thị Minh Hương
Trang 5TÓM TẮTBài tiểu luận được trình bày gồm 2 chương:CHƯƠNG 1: CƠ SỞ LÝ THUYẾT
Giới thiệu tổng quan về Python
Giới thiệu các thư viện như Sympy, Numpy, Matplotlib,…Trình bày các bước thực hiện câu 1a, 1b, 1c
CHƯƠNG 2: THỰC NGHIỆMCung cấp mã nguồnHì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 9Dễ 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.
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.
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:
importnumpy asnp# 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([[45], [ , , 7 8 9]])# Tính tổ ng, trung bình, tổ-i thiề u, tổ-i đa cu a ma ngtong_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
print("Tổ ng:", tong_mang_1d)
Trang 11print("Trung bình:", trung_binh_mang_2d)print("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 đíchtrở 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
Ví dụ: importsympy assp#Tạo ra ký hiệu xx=sp.symbols( )'x'#Giai phương trình x^2+4x+4root =sp.solve(x**2+4*x )+
#In ra nghiệm cu a phương trình
print(root)b, Hàm diff
Trang 12importsympy assp# Tạo ra ký hiệu xx=sp.symbols( )'x'# Xác định biề u thứcf x=** +3 2* ** +x2 3x+1
#Tính đạo hàm dao_ham =sp.diff( , )f x# In ra kề-t qua cu a đạo hàm
print(dao_ham)c, Hàm Lambdify
Lambdify là một hàm chuyển đổi các biểu thức của nó thành các hàm Python.Ví dụ:importsympy assp
x=sp.symbols( )'x'b_thuc x=** +2 3x+2
# Sư dụng lambdify đề chuyề n biề u thức thành hàm Pythonf=sp.lambdify(xb_thuc)
# Sư dụng hàm Python đã tạo đề tính giá trị cu a biề u thức với một giátrị vd là 2
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 đồimportmatplotlib pyplot asplt
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 14Nó cung cấp nhiều tính năng như tự động hoàn thành và kiểm tra mã, xử lý lỗi và sửa lỗi nhanh chóng, hỗ trợ các framework web như Django và Flask.Colab:
Colab cho phép viết và thực thi mã Python trực tiếp trong trình duyệt với nhiều tính năng tiện ích.
Python 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, 1c2.2.1 Trình bày các bước thực hiện câu 1aBước 1: Import thư viện
importsympy asspimportmatplotlib pyplot aspltimportnumpy asnpimportmath
hiện các phép toán họcBước 2: Gán giá trị cho biến A A=60
Vì giá trị A nằm trong khoảng từ 10 đến 99 nên chọn số A thủ công: A lấy giá trị là60
Bước 3: Tạo mảng giá trị gán vào biến xx=np.linspace(1500 1500 40, , )
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 ứngdeff( ):x
\ \ returnx**2-2A*-A**2
defg( ):x
\ \ return- **x2 4* *Ax A**3
y1=f( )xy2=g( )x
-Định nghĩa 2 hàm số f(x) và g(x)
-Sau khi định nghĩa hai hàm f(x) và g(x), tính toán các giá trị của y1,y2 cho f(x) vàg(x) bằng cách sử dụng mảng giá trị x đã cho
Bước 5: Vẽ đồ thị f(x), g(x)
plt.plot(xy1, 'red', label='f(x)=x^2- 2Ax -A^2')plt.plot(xy2, 'blue', label='g(x)= -x^2 + 4Ax +A^3')
Hai dòng code này dùng để vẽ đồ thị của f(x) và g(x) trên cùng 1 đồ thị
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
x_m =sp.symbols('x')f_x x_m =** -2 2A*x_m -A**2
g_x = -x_m**2+4* *Ax_m+ **A3
x_roots =sp.solve((g_x) (f_x) x_m -, )
Dòng 1: Tạo một biến có kí hiệu là x_m
Dòng 2: Hàm f_x được định nghĩa : x_m**2 - 2*A*x_m - A**2 cũng chínhlà f(x)
Trang 16Bước 7: Vẽ các điểm giao nhau và in ra tọa độ của chúngdem =
forroot inx_roots:\ \ y_root=froot)
\ \ plt.plot(root y_root, , 'go', label='Giao điề m' ifdem==1else''
\ \ print("1a Giao điề m {dem} {: (float(root)} {, float(y_root)})")\ \ dem+=1
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)’
là 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')
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 17Bước 4: Viết phương trình tiếp tuyếnx_0 =
y_0 = -A**2
f_dhb1=sp.diff( , fxx)hsgoc f_dhb1=.subs(xx_0)ttuyen hsgoc=* ( x x_0-) +y_0
Dòng 1, 2: Gán giá trị cho x0, y0 Với x0=0, y0=-A^2Dòng 3: ‘f_dhb1 = sp.diff(fx, x)’ dùng để tính đạo hàm f’(x)
điểm x_0 cũng chính là hệ số góc của tiếp tuyến (y’(x0))
với dạng y=y’(x0)(x-x0)+y0Bướ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ếnf_gtri= [ subs( , fxx val) forvalinx_gtri]
Trang 18Dòng 1 plt.plot(x_gtri, f_gtri, 'blue', label='f(x)= x^2- 2Ax -A^2'): dùng để
Dòng 2 plt.plot(x_gtri, ttuyen_gtri, 'orange', label='Tiếp tuyến T'): dùng để
Dòng 3 plt.plot(x_0, y_0, 'go'): dùng để vẽ giao điểm của f(x) và tiếp tuyếnT Đ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 = -4A**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 trongmảng và vẽ đồ thị f(x) dịch chuyển
y_dich_chuyen= [dich_chuyen.subs(xval) forvalinx_gtri]plt.plot(x_gtri, y_dich_chuyen, 'red', label='f(x) dịch chuyề n')
Dòng 1: tính giá trị y cho hàm số đã dịch chuyển tại từng điểm x trong mảngx_gtri
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
đỏ ‘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=0x_root=sp.solve(dich_chuyen ttuyen -, )
y_root= [ttuyen.subs( , x root) forrootinx_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
Trang 19Bước 11: Vẽ điểm giao nhau của đồ thị f(x) dịch chuyển và tiếp tuyến T và in ra tọađộ của các giao điểm đó
for in irange(len(y_root)):
\ \ plt.plot(float(x_root[]), float(y_root i[]), 'yo')\ \ print("1b Giao điề m {i+1} {: (float(x_root i[ ])}, {float(y_root i[ ])})")
Dòng 1: Sử dụng vòng lặp để lặp qua từng điểm giao nhau trong danh sách ‘y_root’, là danh sách chứa giá trị y của các điểm giao nhau
Dòng 2: ‘ plt.plot(float(x_root[i]), float(y_root[i]), 'yo')’ dùng để đánh dấu các điểm giao nhau giữa đồ thị f(x) dịch chuyển và tiếp tuyến T Các giao điểm đó được đánh dấu bằng chấm màu vàng ‘yo’
Dòng 3: In ra tọa độ giao điểm thứ nhất và thứ hai, sử dụng float để đảm bảo in ra là kiểu số thực
Bước 12: Thêm tiêu đề, nhãn trục, chú thích và lưới cho đồ thịplt.title('Cấu 1b')
Dòng 1: Thêm tiêu đề cho đồ thị là ‘Câu 1b’
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ướiDòng 6: Hiển thị đồ thị
2.2.3 Trình bày các bước thực hiện câu 1cBước 1: Gán giá trị cho biến A