Thực hành Toán cao cấp - Chương 6: Hàm số, dãy và một số ứng dụng

21 14 0
Thực hành Toán cao cấp - Chương 6: Hàm số, dãy và một số ứng dụng

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Thực hành Toán cao cấp - Chương 6: Hàm số, dãy và một số ứng dụng. Chương này cung cấp cho học viên những nội dung về: giới thiệu lập trình đệ quy trong Python; dãy số (sequence) đệ quy; revisit: phương pháp Gradient Ascent/Descent;... Mời các bạn cùng tham khảo!

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 6: HÀM SỐ, DÃY VÀ MỘT SỐ ỨNG DỤNG Giới thiệu lập trình đệ quy Python Dãy số (sequence) đệ quy Revisit: Phương pháp Gradient Ascent/Descent 11 3.1 Chương trình tổng quát Gradient Ascent 11 3.2 Các lưu ý giá trị khởi tạo ban đầu (initial value) 14 3.3 Vai trị kích thước bước nhảy (step_size) Epsilon 16 3.4 Lời bàn 20 BÀI TẬP CHƯƠNG 21 Thực hành Toán cao cấp - 2019 Trang Bộ môn Khoa học Dữ liệu CHƯƠNG 6: HÀM SỐ, DÃY VÀ MỘT SỐ ỨNG DỤNG Mục tiêu: - Lập trình đệ quy Python; - Dãy số/chuỗi số; - Revisit phương pháp gradient ascent/descent Nội dung chính: Giới thiệu lập trình đệ quy Python Trong tốn học, nhiều cơng thức thể phần Ví dụ: ! = × × .× , góc độ khác, điều có nghĩa ! = ta phải tính × − ! Do đó, để tính ! chúng − !,… cuối người ta định nghĩa 0! = Từ đó, đệ quy kỹ thuật lập trình để viết hàm mà hàm lại có lệnh gọi lại để đáp ứng định nghĩa toán học Thực hành 1: Viết hàm đệ quy tính n! >>> import math >>> def giaithua(n): if (n==0): return else: return n*giaithua(n-1) >>> giaithua(3) …………………………………………………………  sinh viên điền kết >>> giaithua(4) …………………………………………………………  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 Thực hành 2: Viết hàm đệ quy tính dãy số Fibonacci Dãy số Fibonacci dãy số có phần tử ban đầu 1, sau đó, phần tử tổng hai phần tử gần Cụ thể: = −1 + −2 , ≥ 2, Khi đó, viết chương trình đệ quy sau: = 0, =1 >>> def fibo(n): if n == 0: return if n == 1: return return fibo(n-1) + fibo(n-2) Sinh viên thử nghiệm giá trị: >>> fibo(4) ………………………………………………… >>> fibo(5) ………………………………………………… >>> fibo(6) ………………………………………………… Dãy số (sequence) đệ quy Tổng quát, dãy số đệ quy dãy cho dạng toán học sau: = = ộ , = , , , , …( !ị #$% !ướ# Giá trị )* + tính theo giá trị )* Do đó, dãy số hội tụ hiệu )* + − )* dần → ∞ Điều suy ra, phương trình / = / (hàm tương ứng với dãy )* ) có nghiệm Ta gọi nghiệm điểm bất động (fixed points) Thực hành Tốn cao cấp - 2019 Trang Bộ mơn Khoa học Dữ liệu Quy trình tìm giới hạn dãy dạng đệ quy sau: = Bước 1: Giải phương trình tìm nghiệm điểm bất động Bước 2: Nếu dãy số dãy xác định khoảng , thỏa điểm bất động vùng có điểm cuối (end point) (có thể ±∞) thỏa khơng tồn điểm bất động , giá trị ban đầu dãy nằm khoảng , Bước 3: Kiểm tra hàm ánh xạ vào khoảng Bước 4: Nếu bước kiểm tra nằm Nếu dãy { } đơn điệu 567 →8 , thì: = 567 Nếu khơng nằm , kiểm tra nằm kiểm tra nằm , , < < : →8 , , bước = , > def an_exp_an(n): if n == 1: return 1.0/2 else: return an_exp_an(n-1)**an_exp_an(n-1) Sinh viên thực số thử nghiệm: >>> an_exp_an(1) Thực hành Toán cao cấp - 2019 Trang Bộ môn Khoa học Dữ liệu ………………………………  sinh viên ghi kết >>> an_exp_an(2) ………………………………  sinh viên ghi kết >>> an_exp_an(3) ………………………………  sinh viên ghi kết >>> an_exp_an(4) ………………………………  sinh viên ghi kết >>> an_exp_an(5) ………………………………  sinh viên ghi kết >>> an_exp_an(10) ………………………………  sinh viên ghi kết Do việc tính tốn cần nhiều thời gian nên khơng thể tính tốn đến giá trị lớn n=50, Tuy vậy, tận dụng kết để nhận định dãy tăng hay giảm? ……………………………  sinh viên trả lời Xét hàm / = / > , / > tương ứng với dãy )* + = )* Bước 1: Tìm điểm bất động với phương trình / = /: / > = / ⟺ /A / = ln / ⟺ ln / /−1 =0⟺/ =1 Bước 2: Nhận định vị trí liên quan đến điểm bất động vùng biến thiên hàm là: 0,1 Bước 3: Xét hàm khoảng 0,1 , ta có: < / = / > = D >E*> < D F = GớH < / < Lưu ý: ln / < < / < nên /A / < < / < Bước 4: Từ kết trên, kết luận dãy {)* } dãy tăng nằm khoảng 0,1 Do đó, ta kết luận giới hạn dãy là: 567 →8 = Thực hành 4: Chứng minh dãy có giới hạn tìm giới hạn dãy Thực hành Tốn cao cấp - 2019 Trang Bộ mơn Khoa học Dữ liệu I )* + , − )* )+ = = )* = Giải: = 1,2,3, …( Xây dựng chương trình đệ quy xét số giá trị: >>> def bai4(n): if n==1: return else: return 5.0/(6-bai4(n-1)) >>> bai4(5) ………………………………  sinh viên ghi kết >>> bai4(6) ………………………………  sinh viên ghi kết >>> bai4(7) ………………………………  sinh viên ghi kết >>> bai4(10) ………………………………  sinh viên ghi kết >>> bai4(100) ………………………………  sinh viên ghi kết Các kết để nhận định dãy tăng hay giảm? ………………  sinh viên trả lời Xét hàm / = OP> tương ứng với dãy )* N + = )* Bước 1: Tìm điểm bất động với phương trình / = /: = / ⟺ 6/ − / Q = ⟺ x Q − 6x + = ⟺ / = ∨ / = 6−/ Thực hành Toán cao cấp - 2019 Trang Bộ môn Khoa học Dữ liệu Bước 2: Nhận định vị trí liên quan đến điểm bất động vùng biến thiên hàm là: 1, Bước 3: Xét hàm khoảng 1,5 , ta có: T / = Nên dễ dàng thấy hàm tăng 6−/ Q >0 Bước 4: Từ kết trên, kết luận dãy {)* } dãy đơn điệu nằm khoảng 1,5 Do đó, ta kết luận giới hạn dãy là: 567 →8 = = Thực hành 5: Xét giới hạn dãy U V U biết dãy Fibonacci định nghĩa sau: = * + *P+ ( = 0, + = * + F Với này, trước tiên, ta phải thiết lập “hàm” dãy, nghĩa biểu diễn dạng )* + = )* Ta có: )* = Và lưu ý rằng: )+ = WX = W Y WY WZ WY * + * =1 = * + * *P+ Do vậy, ta xây dựng dãy sau: I )* + = 1+ *P+ * =1+ )*P+ , = 1,2,3, …( )* )+ = = 1+ Và hàm xét tương ứng [ / = + > + Chương trình đệ quy để tính giá trị: >>> def tisoFibo(n): if n==1: return else: return 1.0 + 1.0/tisoFibo(n-1) Thực hành Tốn cao cấp - 2019 Trang Bộ mơn Khoa học Dữ liệu >>> for i in range(1, 11): print (i, tisoFibo(i)) ………………………………………………………… ………………………………………………………… ………………………………………………………… ………………………………………………………… ………………………………………………………… ………………………………………………………… ………………………………………………………… ………………………………………………………… ………………………………………………………… ………………………………………………………… Nhận xét 10 số hạng đầu tiên? Dãy đơn điệu hay không đơn điệu? Tuy nhiên, xét số hạng lẻ (1,3,5,7,9) số hạng chẵn (2,4,6,8,10): - Dãy số )+ , )\ , )N , )] , )^ có đơn điệu tăng khơng? Dãy số )Q , )_ , )O , )` , )+F có đơn điệu tăng khơng? Từ đó, ta xét dãy a* )Eẻ c* )deẵ* , cụ thể sau: + Với dãy a* : a+ = )+ aQ = )\ = [ )Q = [°[ a+ a\ = )N = [ )_ = [°[ aQ Tóm lại: Thực hành Toán cao cấp - 2019 a_ = )] = [ )O = [°[ a\ Trang Bộ môn Khoa học Dữ liệu a* + Với dãy c* : + = [°[ a* ( a+ = )+ c+ = )Q cQ = )_ = [ )\ = [°[ c+ c\ = )O = [ )N = [°[ cQ c_ = )` = [ )] = [°[ c\ Tóm lại: c* + = [°[ c* ( c+ = )Q Như vậy, dãy {a* } {c* } hàm đệ quy [°[ khác giá trị Thật ra, dãy phản ánh dãy {)* } Từ đó, xét hàm: / = [°[ / = 1+ 1+ Dễ thấy, dãy {a* } {c* } thể sau: 2/ + /+1 2a* + a* + ( a+ = )+ = a I * + = a* = c* + = c* = I / = 2c* + c* + ( c+ = )Q = Đến đây, thực bước theo quy trình: - - Bước 1: Tìm điểm bất động hàm / = Q> + Bước 2: Xét trục số, ta thấy: −1 < < a+ < > + 2/ + 1 ± √5 = / ⟺ 2/ + = / Q + / ⟺ / Q − / − = ⟺ / = /+1 +P√N Q Từ đó, ta xét hội tụ dãy {a* } khoảng + √N , +∞ Q Thực hành Toán cao cấp - 2019 + √N < c+ Q +P√N + √N Q , Q dãy {c* } khoảng Trang 10 Bộ môn Khoa học Dữ liệu - Bước 3: Khảo sát hàm số , tính T = khoảng - +P√N + √N , Q Q + √N , +∞ Q + + > X > ta thấy hàm số tăng , tóm lại tăng trừ điểm / = −1 không xác định Bước 4: Nhận xét dãy: ta thấy dãy {a* } tăng dãy {c* } giảm Từ điều đó, ta kết luận giới hạn dãy {a* } {c* } + √N Q Tóm lại: 567 Yêu cầu sinh viên: Vẽ đồ thị hàm số / khoảng +P√N Q →8 , 10 = √i >>> ………………………………………………………  sinh viên viết lệnh vẽ đồ thị Revisit: Phương pháp Gradient Ascent/Descent Trong chương 2, có khái niệm phương pháp Gradient Ascent Theo đó, biết phương pháp để tính tốn giá trị cực đại cho hàm số Trong này, nghiên cứu rõ phương pháp chương trình tổng qt giải thích rõ tham số phương pháp: 3.1 Chương trình tổng quát Gradient Ascent Chúng ta sửa đổi chương trình để chương trình thành chương trình tổng quát tính tốn Gradient Ascent Thực hành Tốn cao cấp - 2019 Trang 11 Bộ môn Khoa học Dữ liệu from sympy import Derivative, Symbol, sympify def grad_ascent(x0, ham_f1x, x): epsilon = 1e-6 step_size = 1e-4 x_old = x0 x_new = x_old + step_size*ham_f1x.subs({x:x_old}).evalf() while abs(x_old - x_new) > epsilon: x_old = x_new x_new = x_old + step_size*ham_f1x.subs({x:x_old}).evalf() Thực hành Toán cao cấp - 2019 Trang 12 Bộ môn Khoa học Dữ liệu return x_new if name == ' main ': f = input('Nhap ham bien (f): ') var = input('Nhap ten bien tuong ung (x): ') var0 = float(input('Nhap gia tri khoi dau cho bien x: ')) try: f = sympify(f) # kiem tra ham except SympifyError: print('Ham nhap khong hop le!') else: var = Symbol(var) d = Derivative(f, var).doit() var_max = grad_ascent(var0, d, var) print('{0}: {1}'.format(var.name, var_max)) print('Maximum value: {0}'.format(f.subs({var:var_max}))) Lưu tập tin thực thử nghiệm: - Nhập hàm: 25*25*sin(2*theta)/9.8 Nhập biến có tên là: theta Giá trị khởi đầu là: 0.001 Khi đó, chương trình tính tốn chạy giá trị theta giá trị cực đại Thực hành Toán cao cấp - 2019 Trang 13 Bộ môn Khoa học Dữ liệu Các thử nghiệm khác:  Thử nghiệm 1: Nhap ham bien (f): cos(t) Nhap ten bien tuong ung (x): t Nhap gia tri khoi dau cho bien x: 0.01 t: ………………………………………………………  Sinh viên điền giá trị vào Maximum value: ……………………………………  Sinh viên điền giá trị vào  Thử nghiệm 2: Nhap ham bien (f): cos(t)+p Nhap ten bien tuong ung (x): t Nhap gia tri khoi dau cho bien x: 0.01 t: ………………………………………………………  Sinh viên điền giá trị vào Maximum value: ……………………………………  Sinh viên điền giá trị vào Tuy nhiên, lưu ý hàm cos(ky) không hoạt động đạo hàm bậc cịn chứa giá trị k hàm mà Sympy rõ giá trị k Do đó, Sympy khơng thể tính tốn thuật toán đoạn code bên lấy đạo hàm cịn hàm bên Cụ thể hơn, so sánh abs(x_old – x_new) > epsilon thực 3.2 Các lưu ý giá trị khởi tạo ban đầu (initial value) Giá trị khởi tạo biến để bắt đầu lặp thực chương trình đóng vai trị quan trọng thuật tốn Xét hàm / N − 30/ \ + 50/ Chúng ta bắt đầu việc tìm giá trị lớn sử dụng chương trình: Thực hành Tốn cao cấp - 2019 Trang 14 Bộ môn Khoa học Dữ liệu  Giá trị bắt đầu -2: Nhap ham bien (f): x**5-30*x**3+50*x Nhap ten bien tuong ung (x): x Nhap gia tri khoi dau cho bien x: -2 t: ………………………………………………………  Sinh viên điền giá trị vào Maximum value: ……………………………………  Sinh viên điền giá trị vào Chương trình dừng tìm vị trí đỉnh gần (closest peak) khơng phải lúc giá trị cực đại toàn cục Trong trường hợp này, chọn giá trị khởi đầu -2 dừng lại đỉnh tương ứng với giá trị cực đại toàn cục (khoảng 706) Xét ví trường hợp với giá trị khởi đầu khác:  Giá trị bắt đầu 0.5: Nhap ham bien (f): x**5-30*x**3+50*x Nhap ten bien tuong ung (x): x Nhap gia tri khoi dau cho bien x: 0.5 t: ………………………………………………………  Sinh viên điền giá trị vào Maximum value: ……………………………………  Sinh viên điền giá trị vào Trong trường hợp này, giá trị cực đại thuật toán gradient ascent tìm khơng phải giá trị lớn hàm số Hình cho thấy kết thuật toán gradient ascent cho hai trường hợp bên trên: Thực hành Toán cao cấp - 2019 Trang 15 Bộ môn Khoa học Dữ liệu Do vậy, sử dụng phương pháp, giá trị ban đầu cần lựa chọn kỹ lưỡng Sau này, số dạng thay đổi thuật toán nỗ lực đề cập đến giới hạn (để cải tiến) Trong thuật toán gradient ascent, giá trị j (hay /) biến tính tốn phương trình: 3.3 Vai trị kích thước bước nhảy (step_size) Epsilon jkớl = jdũ + n co cj Trong đó, n bước nhảy (step_size) Bước nhảy định khoảng cách bước Nên phải đủ nhỏ để tránh chuyện vượt qua đỉnh Do đó, giá trị / gần với giá trị làm cho hàm cực đại bước nhảy tương đối lớn giá trị hàm bước nhỏ cực đại Và thuật toán gọi thất bại! Ngược lại, bước nhảy q nhỏ việc tính tốn nhiều Trong chương trình tính tốn này, sử dụng bước nhảy 10P\, hiển nhiên giá trị không phù hợp với hàm Giá trị epsilon (p) định nên dừng việc lặp thuật tốn việc thay đổi / không đáng kể Điều mong đợi đạo hàm cấp / triệt tiêu (bằng 0) điểm cực đại lý tưởng trị tuyệt đối hai giá trị / (hoặc j) 0, nghĩa |/kớl − /dũ | = Tuy nhiên, có sai số nên hiệu khơng Vì vậy, giá tị epsilon chọn giá trị gần với để xử lý trường hợp tính tốn số thực tế, với Thực hành Toán cao cấp - 2019 Trang 16 Bộ môn Khoa học Dữ liệu ngầm hiểu / khơng đổi Trong chương trình trên, ta sử dụng p = 10PO cho tất hàm Mặc dù giá trị đủ nhỏ phù hợp cho hàm có nghiệm T / = sin / hàm khác, cần, phải điều chỉnh lại giá trị epsilon Như vậy, cài đặt lại chương trình theo hướng việc tính tốn dừng đạo hàm hàm số khơng có nghiệm làm triệt tiêu ( T / = vơ nghiệm) Ví dụ trường hợp D > log / Với chương trình mới, nhập hàm chương trình khơng tiếp tục thực thi Dưới chương trình cập nhật: from sympy import Derivative, Symbol, sympify def grad_ascent(x0, ham_f1x, x): from sympy import solve, E if not solve(ham_f1x): print('Khong the tiep tuc, phuong trinh {0}=0 vo nghiem'.format(ham_f1x)) return # đoạn mã cũ epsilon = 1e-6 step_size = 1e-4 x_old = x0 x_new = x_old + step_size*ham_f1x.subs({x:x_old}).evalf() while abs(x_old - x_new) > epsilon: x_old = x_new x_new = x_old + step_size*ham_f1x.subs({x:x_old}).evalf() return x_new if name == ' main ': f = input('Nhap ham bien (f): ') var = input('Nhap ten bien tuong ung (x): ') Thực hành Tốn cao cấp - 2019 Trang 17 Bộ mơn Khoa học Dữ liệu var0 = float(input('Nhap gia tri khoi dau cho bien x: ')) try: f = sympify(f) # kiem tra ham except SympifyError: print('Ham nhap khong hop le!') else: var = Symbol(var) d = Derivative(f, var).doit() var_max = grad_ascent(var0, d, var) # thêm lệnh if (nằm khối lệnh else) để kiểm tra giá trị var_max trước kết luận: if var_max: print('{0}: {1}'.format(var.name, var_max)) print('Maximum value: {0}'.format(f.subs({var:var_max}))) Thực hành Toán cao cấp - 2019 Trang 18 Bộ môn Khoa học Dữ liệu Trong phần chỉnh sửa cho hàm grad_ascent này, gọi hàm solve() Sympy để kiểm tra tồn nghiệm phương trình ’ / = Nếu khơng có nghiệm, in thông báo trả giá trị rỗng, xem đoạn: print('Khong the tiep tuc, phuong trinh {0}=0 vo nghiem'.format(ham_f1x)) return Thực hành Toán cao cấp - 2019 Trang 19 Bộ mơn Khoa học Dữ liệu Từ đó, thay đổi hàm main Cụ thể kiểm tra giá trị trả hàm grad_ascent có phải rỗng hay khơng; có giá trị (khơng rỗng) in ra; ngượi lại, hàm khơng tồn đạo hàm kết thúc chương trình Thực hành: Thử nghiệm với hàm w0 x% Nhap ham bien (f): log(x) Nhap ten bien tuong ung (x): x Nhap gia tri khoi dau cho bien x: 0.1 ………………………………………………………………  sinh viên điền vào Nhap ham bien (f): E**x Nhap ten bien tuong ung (x): x Nhap gia tri khoi dau cho bien x: 0.1 ………………………………………………………………  sinh viên điền vào 3.4 Lời bàn Thuật toán họ ngược lại với gradient ascent thuật toán gradient descent Trong thuật toán gradient descent, giá trị nhỏ tìm kiếm thay tìm giá trị lớn (như gradient ascent) Do đó, điểm khác biệt lớn hai hàm thuật tốn gradient ascent tìm cách “leo lên” gradient descent tìm cách “leo xuống” Sự khác biệt hình thành giá trị j (hay /) sau: jkớl = jdũ − n Thực hành Toán cao cấp - 2019 co cj Trang 20 Bộ môn Khoa học Dữ liệu BÀI TẬP CHƯƠNG Bài tập 1: Viết chương trình tính tốn 50 phần tử đệ quy tìm giới hạn dãy sau: y y )* )* )* I + + + = Q )* + , )+ = ≥ 1( + = 2− + Q nên điều kiện cân xảy khi: ƒ~ = D ‡/< ƒ †=0 Giả định phát triển tế bào ung thư theo phương trình Gompertz cụ thể sau: „ ‰ = ‰…0.5 − 0.05A ‰ † Với ‰ trọng lượng (mg) Hãy tìm khối lượng mg cân (giải „ ‰ = 0, kết mg) tìm tỉ lệ tăng nhanh khối tế bào ung thư (giải „′ ‰ = 0, kết mg/ngày) Thực hành Toán cao cấp - 2019 Trang 21 ... TẬP CHƯƠNG 21 Thực hành Toán cao cấp - 2019 Trang Bộ môn Khoa học Dữ liệu CHƯƠNG 6: HÀM SỐ, DÃY VÀ MỘT SỐ ỨNG DỤNG Mục tiêu: - Lập trình đệ quy Python; - Dãy số/ chuỗi số; - Revisit... …………………………………………………………  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 Thực hành 2: Viết hàm đệ quy tính dãy số Fibonacci Dãy số Fibonacci dãy số có phần tử ban đầu 1, sau đó,...Bộ môn Khoa học Dữ liệu MỤC LỤC CHƯƠNG 6: HÀM SỐ, DÃY VÀ MỘT SỐ ỨNG DỤNG Giới thiệu lập trình đệ quy Python Dãy số (sequence) đệ quy Revisit:

Ngày đăng: 27/08/2022, 13:09

Tài liệu cùng người dùng

Tài liệu liên quan