1. Trang chủ
  2. » Giáo án - Bài giảng

Thực hành Toán cao cấp - Chương 4: Tích phân hàm số

19 3 0

Đ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

Nội dung

Thực hành Toán cao cấp - Chương 4: Tích phân hàm số. Chương này cung cấp cho học viên những nội dung về: hàm linspace của numpy; giới thiệu cơ bản về lập trình hàm; tích phân của các hàm số;... 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 4: TÍCH PHÂN HÀM SỐ Hàm linspace numpy Giới thiệu lập trình hàm 2.1 Hàm ẩn/vô danh lambda 2.2 Ứng dụng hàm lambda 2.3 Giới thiệu lập trình hàm Tích phân hàm số 10 3.1 Việc tính tích phân 10 3.2 Tích phân với gói phần mềm scipy 13 3.3 Tích phân với gói sympy 14 3.4 Một ví dụ hàm mật độ xác suất 16 BÀI TẬP CHƯƠNG 19 Thực hành Toán cao cấp - 2019 Trang Bộ môn Khoa học Dữ liệu CHƯƠNG 4: TÍCH PHÂN Mục tiêu: - Sơ lược numpy, giới thiệu thêm tính gói Anaconda, phong cách lập trình - Bổ túc lập trình Python: vẽ đồ thị, hàm ẩn/vơ danh lambda - Giới thiệu lập trình hàm dạng - Tích phân hàm số Nội dung chính: Hàm linspace numpy Thư viện numpy hàm linspace để tạo số thực Trong trước, làm quen với hàm range cho để tạo khoảng số tự nhiên Và sau đó, làm quen với việc viết bổ sung hàm (frange) hỗ trợ cho việc tạo khoảng số thực Trong này, sử dụng hàm linspace gói tính tốn numpy Cùng với gói sympy, scipy,…, gói numpy gói hỗ trợ nhiều cho tính tốn xử lý liệu Tuy vậy, khác với sympy, numpy không tập trung vào việc giải tốn hình thức (cơng thức) mà giải cụ thể số Numpy xem thư viện trung gian chuẩn cấu trúc liệu để thư viện xử lý sympy, scipy tương tác liệu (ma trận, dãy số, lưới, đa thức, vector, số phức… nhiều hàm xử lý) Hình ảnh gói xử lý khoa học liệu gói Anaconda hỗ trợ Thư viện numpy hỗ trợ hàm linspace để tạo dãy số thực khoảng Đầu lệnh kiểu liệu dạng array numpy gói phần mềm hỗ trợ Ví dụ: Để chia miền đến thành 10 miền (11 giá trị), thực lệnh linspace sau: Thực hành 1: Chia khoảng liệu Thực hành Toán cao cấp - 2019 Trang Bộ môn Khoa học Dữ liệu >>> import numpy as np >>> mienchia = np.linspace(0, 2, 11) >>> mienchia ……………………………………………………… sinh viên điền vào Kết hợp linspace numpy để vẽ đồ thị hình sin matplotlib: Thực hành 2: Vẽ đồ thị import numpy as np import matplotlib.pyplot as plt fs = [1, 2, 4] all_time = np.linspace(0, 2, 200) t = all_time[:100] for f in fs: y = np.sin(2 * np.pi * f * t) plt.plot(t, y, label='{} Hz'.format(f)) plt.legend() import os os.chdir('d:\\') plt.savefig('basics_python.pdf') plt.show() Kết đồ thị tập tin pdf xuất ra: Thực hành Toán cao cấp - 2019 Trang Bộ môn Khoa học Dữ liệu Lưu ý: số báo cáo khoa học, việc sử dụng tập tin pdf bắt buộc ảnh khơng bị vỡ phóng to thu nhỏ Ngoài ra, định dạng pdf định dạng nhiều hệ điều hành như: Windows, Linux/Unix,… Cũng nói thêm phong cách/tư viết chương trình Chúng ta tưởng tượng “nơi vẽ đồ thị” giống bảng lớn Như vậy, trình diễn đồ thị có hai cách khác có là: - - Trình diễn dạng đối tượng (object-oriented approach): vẽ đồ thị lên tờ giấy bảng dán chúng lên bảng lớn Mỗi tờ giấy “bảng con” Ưu điểm phương pháp tách quản lý hình ảnh với bảng lớn Trong số trường hợp, cần điều chỉnh bảng nhỏ Tư phương pháp lập trình có ngơn ngữ lập trình đại như: Java, C++, C# Trình diễn dạng “máy trạng thái” (state-machine approach): vẽ đồ thị lên bảng đồ thị đến đồ thị khác Ưu điểm phương pháp trực quan tương thích với ngơn ngữ lập trình kinh điển khác như: Matlab (để dễ dàng chuyển đổi code) Như vậy, với hai cách bên phải xem xét đồ thị Nghĩa phải có vịng lặp duyệt đồ thị Nhưng khác chỗ: giải pháp hướng đối tượng “vẽ” lên bảng phương pháp state-machine “vẽ” vào “bảng” Ở đây, bảng đối tượng plt thư viện matplotlib Từ đó, xét đoạn mã với điểm khác biệt việc sử dụng vịng lặp for để vẽ: - Giải pháp hướng đối tượng: Vẽ đối tượng “con” plt: ……… fig, ax = plt.subplots() Thực hành Toán cao cấp - 2019 Trang Bộ môn Khoa học Dữ liệu for f in fs: y = np.sin(2 * np.pi * f * t) ax.plot(t, y, label='{} Hz'.format(f)) …………… - Giải pháp hướng máy trạng thái: Vẽ hình trực tiếp lên đối tượng plt: ……… for f in fs: y = np.sin(2 * np.pi * f * t) plt.plot(t, y, label='{} Hz'.format(f)) …………… Sinh viên tham khảo hình ảnh hai chương trình: Thực hành 3: Xây dựng chương trình hướng đối tượng Tư hướng đối tượng điểm mà người làm toán cần phải nắm để thể mơ hình Đó phương pháp ưu việt giúp chương trình kết hợp với để tạo phần mềm lớn Thực hành Toán cao cấp - 2019 Trang Bộ môn Khoa học Dữ liệu Giới thiệu lập trình hàm Trong trước, làm quen với việc xử lý tính tốn giá trị chuỗi hàm eval() Tuy nhiên, với số mơ hình tính tốn, cần phải mở rộng để xử lý 2.1 Hàm ẩn/vơ danh lambda Hàm lambda Python: có từ phiên 2.2 Gọi hàm “ẩn danh” (anonymous function) lúc chạy Hàm lambda khơng có lệnh return trả module Python ln ln thực lệnh để trả giá trị Ví dụ: xây dựng hàm tính dạng hàm lambda: theo phương pháp: viết hàm def thông thường viết hàm theo Thực hành 4: Minh họa hàm lambda >>> >>> 64 >>> >>> >>> >>> 64 def f (x): return x**2 print (f(8)) g = lambda x: x**2 print (g(8)) 2.2 Ứng dụng hàm lambda Khi xây dựng ứng dụng nhiều cấp, số tham số thay đổi cấp cụ thể Tuy nhiên, mặt công thức tính tốn giữ Ví dụ: việc tính thuế để mua xe,… công thức chung áp dụng cho nước Nhưng số nơi Hà Nội TP.HCM có điều chỉnh theo điều kiện như: để giảm tắt nghẽn giao thông để giảm nhiễm Xét ứng dụng bản: Bài tốn tính thuế địa phương sau: Giả sử thuế TPHCM 0.012 (nghĩa 1.2%); Hà Nội 0.01 (nghĩa 1%) Hãy viết hàm tính (lưu ý: hệ thống mở rộng nhiều địa phương) Thực hành 5: Tính thuế theo khu vực >>> def thue(phan_tram): return lambda x: x * phan_tram >>> = thue(0.012) >>> hn = thue(0.01) Thực hành Toán cao cấp - 2019 Trang Bộ môn Khoa học Dữ liệu >>> hcm(1000000) ……………………………………… Sinh viên điền kết vào >>> hn(1000000) ……………………………………… Sinh viên điền kết vào Cùng với chế lambda, chế reduce, map, filter hàm quan trọng đặc biệt Python nói riêng nhánh lập trình gọi lập trình hàm (functional programming) nói chung Lập trình hàm phương pháp lớn, cần nhiều thời gian để nghiên cứu Nhìn chung, lập trình hàm lập trình hướng đối tượng cách thức lập trình Mục 2.3 mô tả sơ lược, dạng giới thiệu Tài liệu tham khảo thêm hàm reduce, map, filter Python: - https://vimentor.com/vi/lesson/19-lambda-filter-reduce-and-map (truy cập 10/2019) 2.3 Giới thiệu lập trình hàm Theo Wikipedia, ngành khoa học máy tính, lập trình hàm mơ hình lập trình xem việc tính tốn đánh giá hàm toán học tránh sử dụng trạng thái liệu biến đổi Lập trình hàm nhấn mạnh việc ứng dụng hàm số, trái với phong cách lập trình mệnh lệnh, nhấn mạnh vào thay đổi trạng thái Thực hành Toán cao cấp - 2019 Trang Bộ môn Khoa học Dữ liệu Một hình ảnh hài hước minh họa giai đoạn xuất phương thức lập trình: từ ngơn ngữ máy (machine) đến lập trình hàm (functional) Lập trình hàm xuất phát từ phép tính lambda, hệ thống hình thức phát triển vào năm 1930 để nghiên cứu định nghĩa hàm số, ứng dụng hàm số, đệ quy Nhiều ngơn ngữ lập trình hàm xem cách phát triển giải tích lambda Một góc nhìn lập trình hàm (functional programming) trình bày sau: Functional Programming phương pháp lập trình lấy function làm đơn vị thao tác Từ đó, số ngun tắc lập trình hàm: - - Nguyên tắc thứ Functional Programming là: Thứ khai báo lần mãi vậy, không thay đổi Các biến đối tượng kịch Functional Programming có phải immutable (có tính bất biến) Ngun tắc thứ hai: Trong Functional Programming: tất hàm phải pure function, khơng có hiệu ứng phụ (side effect), không tác động lên giá trị bên ngồi nó, nói khơng với chỉnh sửa tham số input Lưu ý: purity tính khiết, túy, sạch, khơng bị pha tạp Ví dụ: hàm tính tốn có sử dụng giá trị ngày hệ thống khơng đảm bảo tính purity kết khác Tài liệu tham khảo: - https://vi.wikipedia.org/wiki/L%E1%BA%ADp_tr%C3%ACnh_h%C3%A0m https://vnoi.info/wiki/translate/functional-programming-part-1 Thực hành Toán cao cấp - 2019 Trang Bộ môn Khoa học Dữ liệu Tích phân hàm số Tích phân mặt ý niệm “góp nhặt” (tổng) “lát cực nhỏ” để tổng thể đối tượng (nguyên văn “Integration is a way of adding slices to find the whole”, theo https://www.mathsisfun.com/calculus/integration-introduction.html) Như vậy, đạo hàm với tích phân có quan hệ ngược Cụ thể là: Giả định có vịi chảy nước vào hồ Khi phát biểu theo gốc độ: - Đạo hàm: Nếu khối nước tăng x đơn vị thời gian nghĩa hệ số nước đều khơng thay đổi (bằng) Tích phân: Với tốc độ chảy nước giữ thời điểm đơn vị thời gian nước tăng giá trị khối lượng nước x Hiển nhiên, để mơ tả đầy đủ, phải bổ sung thêm giá trị C (trong tích phân) đối tượng khơng bắt buộc Một vịi nước chảy nước vào hồ chứa, nghĩa đơn vị thời gian có đơn vị nước chảy vào hồ chứa làm hồ chứa tăng khối lượng x 3.1 Việc tính tích phân Tích phân vơ định bất định (indefinite integral, có sách tiếng Anh ghi antiderivative) hàm số ( ) là số ( ), thỏa ( ) = ( ) Chúng ta hiểu nơm na tích phân hàm số hàm mà đạo hàm hàm ban đầu Trong tốn học, kí hiệu tích Thực hành Tốn cao cấp - 2019 Trang 10 Bộ mơn Khoa học Dữ liệu ( ) phân ( ) = (giả định ): Với tích phân xác định (definite integral), có thêm cận ( ) = ( )− ( ) Với ( ) ( ) giá trị tích phân vị trí = = tương ứng Để tính tốn tích phân, nguyên lý phương pháp tính diện tích hình thang (the trapezoidal rule) Chúng ta thực việc xây dựng hàm tính tốn lambda chung sử dụng minh họa cho hàm : Thực hành 6: Biểu diễn cài đặt phương pháp hình thang với hàm lambda >>> hinhthang = lambda f, a, b: (b-a)*(f(a)+f(b))/2 >>> from math import exp >>> hinhthang(exp,0, 1) 1.8591409142295225 >>> def hai_x(x): return 2*x >>> hinhthang(hai_x, 1, 2) …………………………………………………… Thực hành Toán cao cấp - 2019 Sinh viên điền kết Trang 11 Bộ môn Khoa học Dữ liệu Thực hành 7: Xây dựng hàm tính tích phân cho phương pháp hình thang """ Ham tinh theo luat hinh thang cho ham(x) tu [trai, phai] """ def traprule(ham, trai, phai): return (phai-trai)*(ham(trai) + ham(phai))/2 import math S = "Bieu thuc can tinh tich phan la e^x:" print(S + '[a,b]') A = float(input('Nhap a : ')) B = float(input('Nhap b : ')) Y = traprule(math.exp, A, B) print(S + "[%.1E,%.1E] : " % (A, B)) print('Gia tri xap xi : %.15E' % Y) E = math.exp(B) - math.exp(A) print(' Gia tri chinh xac : %.15E' % E) Kết thực thi: ========================== ========================== RESTART: D:/traprule.py Bieu thuc can tinh tich phan la e^x:[a,b] Nhap a : Nhap b : Thực hành Toán cao cấp - 2019 Trang 12 Bộ môn Khoa học Dữ liệu Bieu thuc can tinh tich phan la e^x:[0.0E+00,1.0E+00] : Gia tri xap xi : ………… …………………………………… sinh viên nhập vào Gia tri chinh xac : …………………………………………… sinh viên nhập vào Với phần mềm ngày nay, ngồi việc tự xây dựng chương trình, việc tính tích phân thực nhiều gói phần mềm khác scipy, sympy 3.2 Tích phân với gói phần mềm scipy Trong scipy, việc tính tốn tích phân sử dụng thông qua hàm integrate Thực hành 8: Viết lệnh sau thực thi lúc tập tin scipy_in.py: import scipy from sympy import * import sys sys.displayhook = pprint x = Symbol('x') bt1 = integrate(x**2 + x + 1, x) pprint (bt1) bt2 = integrate(x/(x**2+2*x+1), x) pprint (bt2) bt3 = integrate(x**2 * exp(x) * cos(x), x) pprint (bt3) bt4 = integrate(exp(-x**2)*erf(x), x) pprint (bt4) Kết thực thi: ……………………………………………………………………………… Sinh viên điền ……………………………………………………………………………… Thực hành Tốn cao cấp - 2019 Trang 13 Bộ mơn Khoa học Dữ liệu ……………………………………………………………………………… ……………………………………………………………………………… 3.3 Tích phân với gói sympy Với gói SymPy, tìm thấy việc tính tốn hai loại tích phân cách tạo đối tượng Integral Dưới minh họa việc tính tích phân với số Thực hành 9: Tính tích phân đơn giản >>> from sympy import Integral, Symbol >>> x = Symbol('x') >>> k = Symbol('k') >>> Integral(k*x, x) ……………………………………… Sinh viên điền vào Sau import lớp Integral Symbol thực việc tạo đối tượng tương ứng k x Sau đó, tạo đối tượng Integral với hàm kx xác định biến lấy tích phân x Tương tự lớp Limit (tính giới hạn) Derivative (tính đạo hàm), phải thực việc tính tốn sử dụng phương thức doit(): >>> Integral(k*x, x).doit() ……………………………………… Sinh viên điền vào Hoặc “trình bày” kết đẹp với lệnh pprint Sympy: Thực hành 10: Tính tích phân đơn giản >>> from sympy import pprint, Integral Thực hành Toán cao cấp - 2019 Trang 14 Bộ môn Khoa học Dữ liệu >>> F = Integral(k*x, x).doit() >>> pprint (F) ……………………………………… Sinh viên điền vào ……………………………………… Giá trị tích phân trả hàm số (kí hiệu) Nếu tính đạo hàm, giá trị hàm gốc hàm kx Để tính tích phân xác định, đơn giản thêm giá trị biến xác định cận cận tạo đối tượng Integral, cụ thể sau: Thực hành 11: Tính tích phân đơn giản >>> Integral(k*x, (x, 0, 2)).doit() ……………………………………… Sinh viên điền vào Giá trị trả tích phân xác định Chúng ta thể trực quan tích phân xác định việc thể hình học Xét hình bên đồ thị ( ) = với giá trị nằm [0, 5] Thực hành Tốn cao cấp - 2019 Trang 15 Bộ mơn Khoa học Dữ liệu Xét vùng ABDE đồ thị nằm điểm từ = đến = tương ứng với điểm Diện tích ABDE tính cách tính diện tích vùng hình học, cụ thể: !" = #" Thử lại, tính tích phân + "#! * =2×2+& (×2×2= hàm xử lý Integral Sympy: Thực hành 12: Tính tích phân đơn giản >>> from sympy import Integral, Symbol >>> x = Symbol('x') >>> Integral(x, (x, 2, 4)).doit() …………………………………………………………… Sinh viên điền vào Giá trị tích phân tương đồng việc tính tốn diện tích ABDE Việc hiểu tích phân xác định diện tích “đóng” hàm điểm xác định trục x vấn đề yếu để hiểu tính tốn xác suất kiện ngẫu nhiên liên quan biến ngẫu nhiên liên tục 3.4 Một ví dụ hàm mật độ xác suất Giả định lớp toán thực thi Điểm thi đạt từ đến 20, bao gồm điểm phân số Nếu xem việc điểm kiện ngẫu nhiên, điểm xem biến Thực hành Toán cao cấp - 2019 Trang 16 Bộ môn Khoa học Dữ liệu liên tục ngẫu nhiên điểm số bao gồm giá trị từ đến 20 Nếu muốn tính tốn xác suất sinh viên có điểm từ 11 đến 12 vận dụng cách tính (trên lý thuyết): +(11 < < 12) = -(.) -( ) với tập điểm 11 12 tập tất khả có, nghĩa tất số (điểm) có 20 Từ định nghĩa từ trước, -(.) xác định khơng thể đếm hết tất trường hợp thực điểm nằm 11 12; điều tương tự -( ) Do đó, cần giải pháp khác để tính xác suất Hàm mật độ xác suất +( ) thể xác suất giá trị ngẫu nhiên có mối quan hệ với , với tùy ý Hàm cho biết xác suất để “rơi” vào khoảng tùy ý Rằng: biết hàm mật độ xác suất thể xác suất điểm lớp việc tính tốn xác suất +(11 < < 12) dễ dàng Tuy nhiên, làm cách để tính tốn xác suất đó? Khi vẽ đồ thị, dễ dàng thấy diện tích hàm mật độ xác suất trục x từ điểm = 11 đến điểm = 12 hình bên dưới: Chúng ta biết diện tích với tích phân: 00 Thực hành Tốn cao cấp - 2019 /( ) Trang 17 Bộ môn Khoa học Dữ liệu đó, tìm xác suất hai giá trị 11 12 Bằng phương pháp toán học, tìm xác suất Hàm mật độ xác suất giả định hàm bên hàm: √22 (540 )6 với điểm nhận Hàm (giả định) lựa chọn để tính xác suất điểm gần với điểm 10 (hoặc lân cận 10) cao có sụp giảm nhanh chóng tăng giảm phía Bây giờ, tính tích phân: 00 /( ) với /( ) cho hàm bên Khi đó, lệnh tính tốn Python là: Thực hành 13: Tính tích phân hàm mật độ xác suất >>> from sympy import Symbol, exp, sqrt, pi, Integral >>> x = Symbol('x') >>> p = exp(-(x - 10)**2/2)/sqrt(2*pi) >>> Integral(p, (x, 11, 12)).doit().evalf() ………………………………………………………… sinh viên ghi lại kết Chúng ta tạo đối tượng Integral cho hàm số, với p thể hàm mật độ xác suất tính tốn tích phân xác định 11 12 trục x Sau hàm doit() sử dụng để thực tính tốn giá trị hàm evalf() để thể số Giá trị tính tốn gần 0.14 Thực hành Toán cao cấp - 2019 Trang 18 Bộ môn Khoa học Dữ liệu BÀI TẬP CHƯƠNG Những tập yêu cầu sinh viên nộp tuần học Bài tập 1: Sinh viên đọc, tìm hiểu viết báo cáo tài liệu mạng sau: http://homepages.math.uic.edu/~jan/mcs507/sympyscipyintegration.pdf (lưu ý: sử dụng kết hợp thêm tài liệu khác để viết phong phú) Bài tập 2: Sinh viên đọc, tìm hiểu viết báo cáo tài liệu mạng sau: https://vi.wikipedia.org/wiki/Ph%C3%A9p_t%C3%ADnh_lambda (lưu ý: sử dụng kết hợp thêm tài liệu khác để viết phong phú) Thực hành Toán cao cấp - 2019 Trang 19 ... ghi antiderivative) hàm số ( ) là số ( ), thỏa ( ) = ( ) Chúng ta hiểu nơm na tích phân hàm số hàm mà đạo hàm hàm ban đầu Trong tốn học, kí hiệu tích Thực hành Toán cao cấp - 2019 Trang 10 Bộ... https://vi.wikipedia.org/wiki/L%E1%BA%ADp_tr%C3%ACnh_h%C3%A0m https://vnoi.info/wiki/translate/functional-programming-part-1 Thực hành Toán cao cấp - 2019 Trang Bộ môn Khoa học Dữ liệu Tích phân hàm số Tích phân mặt ý niệm “góp nhặt” (tổng) “lát cực nhỏ”... 14 3.4 Một ví dụ hàm mật độ xác suất 16 BÀI TẬP CHƯƠNG 19 Thực hành Toán cao cấp - 2019 Trang Bộ môn Khoa học Dữ liệu CHƯƠNG 4: TÍCH PHÂN Mục tiêu: - Sơ lược numpy,

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

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN