Bộ mơn Khoa học Dữ liệu THỰC HÀNH TỐN CAO CẤP TÀI LIỆU PHỤC VỤ SINH VIÊN NGÀNH KHOA HỌC DỮ LIỆU Nhóm biên soạn: TS Hồng Lê Minh – Khưu Minh Cảnh – Hoàng Thị Kiều Anh – Lê Thị Ngọc Huyên – … TP.HCM – Năm 2019 Thực hành Tốn cao cấp - 2019 Trang Bộ mơn Khoa học Dữ liệu MỤC LỤC CHƯƠNG 3: ĐẠO HÀM VÀ ỨNG DỤNG Bổ túc kiến thức Python 1.1 Viết hàm/phương thức Python 1.2 Cơ chế bắt lỗi Python Vẽ đồ thị 2.1 Vẽ đồ thị chuyển động vật ném lên Đạo hàm: Xây dựng chương trình tính đạo hàm 14 Đạo hàm ứng dụng: Tìm hiểu ứng dụng phương pháp Gradient Ascent 18 BÀI TẬP CHƯƠNG 23 Thực hành Toán cao cấp - 2019 Trang Bộ môn Khoa học Dữ liệu CHƯƠNG 3: ĐẠO HÀM VÀ ỨNG DỤNG Mục tiêu: - Bổ túc lập trình Python: viết phương thức, chế bắt lỗi Python (30 phút) - Vẽ đồ thị tiếp theo: vẽ đồ thị theo công thức (30 phút) - Đạo hàm ứng dụng đạo hàm (90 phút) Nội dung chính: Bổ túc kiến thức Python 1.1 Viết hàm/phương thức Python Trong Python, hàm hay phương thức xử lý đơn giản khai báo thông qua từ khóa def với tên hàm kết trả từ khóa return Nếu trả nhiều giá trị giá trị cách dấu phẩy (,) Ví dụ: return masv, tensv trả biến mssv tensv Để bắt đầu, từ IDLE Anaconda, viết hàm việc mở tập tin Ví dụ: Hàm tính lũy thừa số nguyên 𝑥 sau dấu nhắc lệnh >>> IDLE Thực hành 1: Viết hàm từ dấu nhắc lệnh >>> trình IDLE >>> def luythua(x, n): ketqua= for i in range(n): ketqua = ketqua *x return ketqua >>> luythua(2,1) ……………………………………………………………… sinh viên điền kết >>> luythua(2,0) ……………………………………………………………… sinh viên điền kết Thực hành Toán cao cấp - 2019 Trang Bộ môn Khoa học Dữ liệu Lưu ý: Một số đặc điểm bật Python hàm: Hàm “main” tập tin py: Là đoạn chương trình nằm khối lệnh, thường vị trí cuối tập tin py Khi khối lệnh tồn tại, “thực thi” tập tin Python từ dịng lệnh hệ điều hành, như: C:\> python abc.py Khối lệnh việc so sánh từ khóa riêng name main Python sau: if name == " main ": # thực đó… Chúng ta làm việc rõ hàm main phần sau chương 1.2 Cơ chế bắt lỗi Python Trong viết chương trình, khơng tính đến lỗi thuật tốn, hai loại lỗi xảy là: Thực hành 2: Lỗi chế bắt lỗi Python - Lỗi cú pháp (syntax errors) Ví dụ: viết dịng lệnh while thiếu dấu : điều kiện dòng lệnh while phải dấu “==” thay dấu “=” Ví dụ: >>> while = 2: …………………………………………… Sinh viên điền lỗi vào - Ngoại lệ (exceptions): Ví dụ: mở tập tin khơng tồn tại, thực phép chia 0, thực phép cộng (operand type for +) theo thứ tự số + chuỗi phép nối (concatenate) theo thứ tự chuỗi + số Ví dụ: >>> 10 * (1/0) ………………………………………… Sinh viên ghi nhận lỗi >>> * bien_chua_khai_bao / ………………………………………… Sinh viên ghi nhận lỗi Thực hành Toán cao cấp - 2019 Trang Bộ môn Khoa học Dữ liệu >>> ‘ba’ + ………………………………………… Sinh viên ghi nhận lỗi >>> 10 * (1/0) ………………………………………… Sinh viên ghi nhận lỗi Tóm lại, ngoại lệ bên báo là: ZeroDivisionError, NameError TypeError Một ví dụ khác cho thấy việc tính tốn Python từ trái sang phải có ưu tiên phép tốn Thực hành: >>> 'ba' + (1/0) ………………………………………… Sinh viên ghi nhận lỗi >>> 'ba'+7+(1/0) ………………………………………… Sinh viên ghi nhận lỗi Phương pháp xử lý: Đối với lỗi cú pháp (syntax error), phải kiểm tra lại câu lệnh sửa Đối với lỗi ngoại lệ (exception) phải xử lý hạn chế chế thơng báo để tránh trường hợp chương trình bị kết thúc bất ngờ Thực hành 3: Xử lý ngoại lệ với chế try… except Sử dụng chế try… except… để xử lý lỗi: >>> x = int(input(“Vui long nhap so: ”)) Vui long nhap so: a Sinh viên điền tên ngoại lệ:……………………………………… >>> while True: try: x = int(input(“Vui long nhap so: ”)) break except ……………… : Thực hành Toán cao cấp - 2019 Trang Bộ môn Khoa học Dữ liệu print (‘Vui long nhap so Khong nhap chu!’) Cơ chế try… except có cấu trúc else: Thực hành 4: Xử lý ngoại lệ với chế try… except… else… finally Cơ chế else try except để thực tiếp lệnh try khơng có lỗi/ngoại lệ xảy Lưu ý 1: Nếu except mà không lỗi/ngoại lệ xem bắt tất lỗi ngoại lệ Lưu ý 2: Nếu có thêm finally để xử lý tiếp câu lệnh lại Thường thông báo để người sử dụng biết kết thúc chương trình Ví dụ: >>> while True: try: x = int(input('Vui long nhap so: ')) except: print ('So vua nhap sai') else: print ('so vua nhap la ' + str(x)) break finally: print ('Da hoan chuong trinh') Sinh viên thử nghiệm nhập chữ a Rồi Enter nhập số Thực hành Toán cao cấp - 2019 Trang Bộ môn Khoa học Dữ liệu Vẽ đồ thị 2.1 Vẽ đồ thị chuyển động vật ném lên Trong mục này, làm quen với tốn ném bóng theo dõi quỹ đạo (như hình mơ tả bên dưới) Trong hình trên, bóng ném từ điểm A rơi xuống điểm B Đây dạng quỹ đạo đạn đại bác vật thể ném lên Mục tiêu sử dụng phương trình đạn đạo để vẽ đồ thị vật thể bay cho thấy vị trí bóng từ lúc ném đến chạm vào điểm B Khi ném bóng, xác định vận tốc hướng ban đầu bóng Hướng bay góc tạo mặt đất vector hướng bóng Ta gọi đại lượng vận tốc 𝑢 góc 𝜃 (đọc theta) (như hình) Quả bóng gồm thành phần vận tốc: dọc theo trục 𝑥 tính theo cơng thức 𝑢 = 𝑢𝑐𝑜𝑠𝜃 dọc theo trục y 𝑢 = 𝑢𝑠𝑖𝑛𝜃 Khi bóng bay, vận tốc thay đổi thể thay đổi vận tốc giá trị 𝑣, với hai thành phần ngang 𝑣 chiều dọc 𝑣 Để đơn giản, giả định thành phần 𝑣 khơng thay đổi suốt q trình bay vật thể Trong đó, thành phần 𝑣 bị tác động trọng trường theo phương trình 𝑣 = 𝑢 − 𝑔𝑡 Trong phương trình này, 𝑔 gia tốc trọng trường 𝑡 thời gian mà vận tốc đo Vì 𝑢 = 𝑢𝑠𝑖𝑛𝜃 nên ta thay thế: 𝑣 = 𝑢𝑠𝑖𝑛𝜃 − 𝑔𝑡 Vì thành phần ngang vận tốc xem không đổi, đó, thành phần ngang khoảng 𝑆 = 𝑢(𝑐𝑜𝑠𝜃)𝑡 Thành phần theo chiều đứng có vận tốc thay đổi đó, khoảng cách di chuyển cho công thức: 𝑆 = 𝑢(𝑠𝑖𝑛𝜃)𝑡 − 𝑔𝑡 Thực hành Toán cao cấp - 2019 Trang Bộ mơn Khoa học Dữ liệu Nói cách khác, 𝑆 𝑆 cho tọa độ bóng thời điểm bay Chúng ta sử dụng phương trình để vẽ quỹ đạo Theo đó, sử dụng phương trình với đại lượng tính sau: thời gian 𝑡 tính giây, vận tốc tính 𝑚⁄ , góc chiếu ban đầu 𝜃 theo đơn vị độ gia tốc trọng trường thể 𝑚 𝑠 𝑠 Tuy nhiên, trước viết chương trình, cần tìm khoảng thời gian bóng bay trước tiếp đất để vẽ quỹ đạo bóng Để làm việc này, đầu tiên, tìm tính điểm cao bóng, đó, vận tốc bóng theo chiều y (𝑣 ) Nghĩa ta có phương trình tốn 𝑣 = 𝑢𝑠𝑖𝑛𝜃 − 𝑔𝑡 = Từ đó, tìm nghiệm 𝑡 sau: 𝑡= 𝑢𝑠𝑖𝑛𝜃 𝑔 Ta gọi thời điểm thời điểm đỉnh 𝑡_peak Sau đến vị trí cao nhất, bóng cần số thời gian lúc bóng rơi xuống nơi Khi đó, ta có tổng thời gian bay là: 𝑡 = 2𝑡 =2× 𝑢𝑠𝑖𝑛(𝜃) 𝑔 Với giả định vận tốc ban đầu 5m/giây góc bay 90 độ Khi đó, việc tính thời gian cách thay giá trị 𝑢 = 5, 𝜃 = 45𝜃 Và thay số vào phương trình trên, ta được: 𝑡 = 2𝑡 =2× 5𝑠𝑖𝑛(45 ) 9.8 Trong trường hợp này, thời gian bay khơng bóng 0.7251 giây (làm trịn đến trường số số thập phân) Quả bóng khơng trung thời gian Do đó, để vẽ quỹ đạo, tính tọa độ x y theo khoảng thời gian Câu hỏi đặt tính tọa độ nào? Một cách lý tưởng, tính tọa độ Trong phần này, tính tọa độ cho 0.001 giây 2.1.1 Phát sinh dãy số số thực Hàm range() để phát sinh dãy số nguyên Nghĩa ta muốn liệt kê số nguyên 10, số đơn vị sử dụng lệnh range(1, 10, 2) Tuy nhiên, với số thực, giả định: muốn phát sinh số từ đến 0.32 với khoảng cách 0.02 Nghĩa phải tạo số: 0.00, 0.02, 0.04, 0.06, 0.08,…, 0.28, 0.30, 0.32 Khi đó, phải thực lệnh lặp để tạo dãy, sau: Thực hành 5: Tạo hàm phát sinh dãy số thực >>> def frange(batdau, ketthuc, buocnhay): Thực hành Tốn cao cấp - 2019 Trang Bộ mơn Khoa học Dữ liệu day_ketqua = [] while batdau < ketthuc: day_ketqua.append(batdau) batdau = batdau + buocnhay return day_ketqua Sau xây dựng hàm frange, sử dụng Ví dụ: để tạo dãy số từ đến với bước nhảy 0.2: 2.1.2 Vẽ quỹ đạo bay vật ném lên Chương trình vẽ bóng bay với vận tốc gốc ban đầu cho Lưu ý: hai tham số nhập chương trình Thực hành 6: Vẽ quỹ đạo bay vật ném lên Chúng ta thực tạo tập tin đưa vào đoạn mã sau: Phân đoạn 1: Nhập thư viện xử lý: >>> from matplotlib import pyplot as plt >>> import math Phân đoạn 2: Xây dựng hàm xử lý: + Hàm 1: Hàm vẽ đồ thị def draw_graph(x, y): plt.plot(x, y) plt.xlabel('Truc X') plt.ylabel('Truc Y') plt.title('Do thi bai toan nem qua bong') Thực hành Toán cao cấp - 2019 Trang Bộ môn Khoa học Dữ liệu + Hàm 2: Hàm xử lý tạo khoảng số thực def frange(start, final, interval): numbers = [] while start < final: numbers.append(start) start = start + interval return numbers + Hàm 3: Hàm tính tốn dãy X Y để vẽ đồ thị tương ứng với hàm đạn đạo: def draw_trajectory(u, theta): # Gia toc truong g = 9.8 # Goc bay: theta = math.radians(theta) # Thoi gian bay: t_flight = 2*u*math.sin(theta)/g # Tinh toan khoang cach thoi gian intervals = frange(0, t_flight, 0.001) # Danh sach toa x va y x = [] y = [] for t in intervals: x.append(u*math.cos(theta)*t) y.append(u*math.sin(theta)*t - 0.5*g*t*t) draw_graph(x, y) Thực hành Toán cao cấp - 2019 Trang 10 ... Đạo hàm: Xây dựng chương trình tính đạo hàm 14 Đạo hàm ứng dụng: Tìm hiểu ứng dụng phương pháp Gradient Ascent 18 BÀI TẬP CHƯƠNG 23 Thực hành Tốn cao cấp -... liệu CHƯƠNG 3: ĐẠO HÀM VÀ ỨNG DỤNG Mục tiêu: - Bổ túc lập trình Python: viết phương thức, chế bắt lỗi Python (30 phút) - Vẽ đồ thị tiếp theo: vẽ đồ thị theo công thức (30 phút) - Đạo hàm ứng dụng. .. 0.28, 0 .30 , 0 .32 Khi đó, phải thực lệnh lặp để tạo dãy, sau: Thực hành 5: Tạo hàm phát sinh dãy số thực >>> def frange(batdau, ketthuc, buocnhay): Thực hành Toán cao cấp - 2019 Trang Bộ môn Khoa