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ẮNGKHOA 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 NAMTRƯỜNG ĐẠI HỌC TÔN ĐỨC THẮNGKHOA 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ẫ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 ƠNLờ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úp
em 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ự
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ỆM
Cung cấp mã nguồn
Hình ảnh kết quả
Trang 6MỤC LỤC
CHƯƠNG 1 DANH MỤC HÌNH VẼ
CHƯƠNG 2 CƠ SỞ LÝ THUYẾT
1.1 Giới thiệu
1.1.1 Tổng quan về Python
1.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
CHƯƠNG 2 THỰC NGHIỆM
2.1 Câu 1a
2.1.1 Mã nguồn
2.1.2 Kết quả
2.2 Câu 1b
2.2.1 Mã nguồn
2.2.2 Kết quả
2.3 Câu 1c
2.3 Mã nguồn
2.3 Kết quả
TÀI LIỆU THAM KHẢO
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
CHƯƠNG 2 THỰC NGHIỆM
2.1 Câu 1a
2.1.2 Hình câu 1a
2.2 Câu 1b
2.2.2 Hình câu 1b
2.3 Câu 1c
2.3 Hình câu 1c
Trang 8CHƯƠNG 2 CƠ SỞ LÝ THUYẾT
2.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 PythonPython là một ngôn ngữ lập trình thông dịch (interpreted), hướng đối tượng (object-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ã
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 đây
là 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
application)
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
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ểm
và ứ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 NumPyNumPy (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ư C
và 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:
# 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
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ụ
Trang 12c, 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
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, 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 math
Trang 15Hàm np.linspace(-1500, 1500, 40) dùng để tạo một mảng các giá trị gồm 40 phần
tử, 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à
-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 ( x y1 , 'red' , label = 'f(x)=x^2- 2Ax -A^2' )
plt plot ( x y2 , '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 2 A * x_m - A ** 2
g_x = - x_m ** 2 + 4 * * A x_m + ** A 3
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ính
là f(x)
Trang 16Bước 7: Vẽ các điểm giao nhau và in ra tọa độ của chúng
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 giaoCuố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 17Dò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
Bước 4: Viết phương trình tiếp tuyến
x_0 =
y_0 = - A ** 2
f_dhb1 = sp diff ( , fx x )
hsgoc f_dhb1 = subs ( x x_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^2
Dò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)+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ần
tử, 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
f_gtri = [ subs( , fx x val ) for val in x_gtri ]
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 để
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ế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 trongmảng và vẽ đồ thị f(x) dịch chuyển
y_dich_chuyen = [ dich_chuyen subs( x val ) for val in x_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=0
x_root = sp solve ( dich_chuyen ttuyen - , )
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
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 i range ( 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
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ưới
Dòng 6: Hiển thị đồ thị
2.2.3 Trình bày các bước thực hiện câu 1c
Bước 1: Gán giá trị cho biến A
Trang 20Bước 4: Vẽ đồ thị f(x)
gia_tri_x = np linspace ( 1500 1500 40 , , ) \
gia_tri_y = [ f_x subs( x gia_tri ) for gia_tri in gia_tri_x ]
plt plot ( gia_tri_x , gia_tri_y , label = 'f(x)' )
Dòng 1: Hàm np.linspace(-1500, 1500, 40) dùng để tạo một mảng các giá trịgồm 40 phần tử, bắt đầu từ -1500 và kết thúc tại 1500
Dòng 2: Tính giá trị y tương ứng với mỗi giá trị x của f(x)
Dòng 3: ‘plt.plot(gia_tri_x, gia_tri_y, label='f(x)')’ dùng để vẽ đồ thị f(x) vàhiển thị nhãn là f(x)
Bước 4: Tính đạo hàm của f(x) và giải phương trình
dao_ham = sp diff ( f_x , )
gd = sp solve ( dao_ham ( * 0 - x ) + f_x + 4 A ** 3 , ) x
Dòng 2: Tìm điểm giao của tiếp tuyến với đồ thị f(x)
Bước 5: Vẽ tiếp tuyến và in ra phương trình tiếp tuyến
\ \ plt scatter ( diem f_x , subs( x , diem color ), = 'red' , marker = 'o' ) \
\ \ phuong_trinh_tiep_tuyen = dao_ham subs ( x , float (diem)) ( * x
-float (diem)) + f_x subs( , x float (diem))
\ \ print ( "Phương trình cu a tiề- p tuyề- n { dem } :