Bài giảng Kỹ thuật lập trình CKT - Chương 7: Numerical Analysis with Python - Nguyễn Thanh Nhã

Numpy and Scipy
• Numpy (Numerical Python). Đây là một module mở rộng mã
nguồn mở của Python.
• Cung cấp một thư viện lớn các hàm toán học cao cấp cho
số, vector, các dãy nhiều chiều hay ma trận.
• SciPy tương tự Numpy nhưng mở rộng khả năng của
Numpy với các thuật toán như: Tối ưu hóa, Hồi quy, chuyển
đổi chuỗi Fourier, 
pdf 14 trang xuanthi 27/12/2022 2400
Bạn đang xem tài liệu "Bài giảng Kỹ thuật lập trình CKT - Chương 7: Numerical Analysis with Python - Nguyễn Thanh Nhã", để tải tài liệu gốc về máy hãy click vào nút Download ở trên.

File đính kèm:

  • pdfbai_giang_ky_thuat_lap_trinh_ckt_chuong_7_numerical_analysis.pdf

Nội dung text: Bài giảng Kỹ thuật lập trình CKT - Chương 7: Numerical Analysis with Python - Nguyễn Thanh Nhã

  1. TS. Nguyễn Thanh Nhã 10/8/2019 Chapter 7. Numerical Analysis with Python PROGRAMMING FOR ENGINEERINGS Introduction • Python hỗ trợ rất mạnh cho việc tính toán khoa học, phân tích số liệu, thống kê và báo cáo kết quả trực quan. • Các công cụ hỗ trợ cho việc tính toán và phân tích nằm trong môi trường Scipy (Scientific Computing Tools for Python), bao gồm: NumPy IPython Công cụ tính toán số học và ma trận Tương tác với dữ liệu qua console SciPy library Sympy Thư viện các thuật toán và công cụ tính toán Thư viện ký hiệu toán học và tính toán đại số Matplotlib pandas Thư viện vẽ đồ thị 2D, 3D Thư viện thống kê và phân tích dữ liệu See: Department of Engineering Mechanics – HCMUT 2019 3 Chapter 7. Numerical Analysis with Python PROGRAMMING FOR ENGINEERINGS Compare to Matlab • Python có sự kết hợp với các gói Numpy, Matplotlip,Scipy và Pandas có thể sử dụng thay thế cho Matlab (licence issue). Department of Engineering Mechanics – HCMUT 2019 4 nhanguyen@hcmut.edu.vn 2
  2. TS. Nguyễn Thanh Nhã 10/8/2019 Chapter 7. Numerical Analysis with Python PROGRAMMING FOR ENGINEERINGS Numpy and Scipy • Một số thuốc tính quan trọng trong ndarray . ndarray.ndim : Số chiều của dãy . ndarray.shape : chiều của dãy. Thể hiện qua 1 tuple chứa số nguyên kích cỡ của dãy . ndarray.size : Tổng số phần tử trong dãy. Bằng tích các phần tử trong shape >>> import numpy as np >>> arr = np.array( [ [1,2,3,4] , [5,6,7,8] ]) >>> print(arr.ndim) >>> print(arr.shape) >>> print(arr.size) Department of Engineering Mechanics – HCMUT 2019 7 Chapter 7. Numerical Analysis with Python PROGRAMMING FOR ENGINEERINGS Numpy and Scipy >>> import numpy as np • Kiểu dữ liệu của dãy >>> arr = np.array( [ [1,2,3,4] , [5,6,7,8] ]) sẽ là kiểu dữ liệu của >>> print(arr) các phần tử trong dãy >>> print(arr.dtype) (dtype). • Có thể áp đặt kiểu dữ >>> arr2 = np.array( [ [1.2, 3.4] , [5.6, 7.8] ]) liệu của chúng bằng >>> print(arr2) cách định nghĩa trong >>> print(arr2.dtype) lúc tạo >>> arr3 = np.array([[2,4],[5,8]],dtype= complex) >>> print(arr3) >>> print(arr3.dtype) Department of Engineering Mechanics – HCMUT 2019 8 nhanguyen@hcmut.edu.vn 4
  3. TS. Nguyễn Thanh Nhã 10/8/2019 Chapter 7. Numerical Analysis with Python PROGRAMMING FOR ENGINEERINGS Numpy and Scipy • Chú ý 1: Toán tử nhân (*) trong dãy sẽ không thực hiện phép nhân 2 ma trận như trong Matlab. Thay vào đó sử dụng dot để thực hiện >>> import numpy as np >>> x = np.array( [ [1, 2], [3, 4] ]) >>> y = np.array( [ [5, 6], [7, 8] ]) >>> print(x.dot(y)) >>> print(np.dot(x,y)) • Chú ý 2: Kiểu array sử dụng phương thức dot sẽ báo lỗi ở trường hợp [n x 1] * [1 x n]. Thay vào đó sử dụng toán tử (*) để thực hiện Department of Engineering Mechanics – HCMUT 2019 11 Chapter 7. Numerical Analysis with Python PROGRAMMING FOR ENGINEERINGS Numpy and Scipy • Một số phương thức thường dùng • numpy.sum >>> import numpy as np >>> x = np.array( [ [1, 2], [3, 4] ]) >>> print(np.sum(x)) >>> print(np.sum(x, axis=0)) >>> print(np.sum(x, axis=1)) • numpy.transpose >>> import numpy as np >>> x = np.array( [ [1, 2], [3, 4] ]) >>> print(x) >>> print(np.transpose(x)) >>> print(x.T) Department of Engineering Mechanics – HCMUT 2019 12 nhanguyen@hcmut.edu.vn 6
  4. TS. Nguyễn Thanh Nhã 10/8/2019 Chapter 7. Numerical Analysis with Python PROGRAMMING FOR ENGINEERINGS Numpy and Scipy • Module Linear Algebra (numpy.linalg) • numpy.linalg.det (square matrix) – Tính định thức • numpy.linalg.norm (matrix) – Tính độ lớn • numpy.linalg.inv (square matrix) – Tính ma trận nghịch đảo • numpy.linalg.eig (square matrix) – Tìm trị riêng và vector riêng • numpy.linalg.solve (a, b) – Giải hệ phương trình tuyến tính a.x = b • numpy.linalg.matrix_power (square matrix) – Lũy thừa ma trận Department of Engineering Mechanics – HCMUT 2019 15 Chapter 7. Numerical Analysis with Python PROGRAMMING FOR ENGINEERINGS Numpy and Scipy • Ví dụ (numpy.linalg) 2∗𝑥3∗𝑦19 • VD1: Giải hệ phương trình: 5∗𝑥𝑦43 𝑥6∗𝑦78 • Cách 1: nhân ma trận nghịch đảo • Cách 2: sử dụng numpy.solve(a,b) Sử dụng phương thức numpy.allclose(a,b) để kiểm tra kết quả (nếu a = b sẽ trả về kết quả True ngược lại là False) • VD2: Cho ma trận vuông bất kỳ, kiểm tra tính khả nghịch của ma trận đó. Nếu thỏa, tìm ma trận khả nghịch đó Department of Engineering Mechanics – HCMUT 2019 16 nhanguyen@hcmut.edu.vn 8
  5. TS. Nguyễn Thanh Nhã 10/8/2019 Chapter 7. Numerical Analysis with Python PROGRAMMING FOR ENGINEERINGS Matplotlip • Color: ‘b’ blue ‘g’ green ‘r’ red ‘c’ cyan ‘m’ magenta ‘y’ yellow ‘k’ black ‘w’ white Department of Engineering Mechanics – HCMUT 2019 19 Chapter 7. Numerical Analysis with Python PROGRAMMING FOR ENGINEERINGS Matplotlip • Attribute: label Tên linestyle Kiểu đường linewidth Độ dày của đường marker Kiểu marker markeredgecolor Màu của biên marker markeredgewidth Độ dày của biên marker markerfacecolor Màu nền marker markersize Độ lớn marker plt.plot(x, y, color=‘r', linestyle=‘ ’, linewidth=2, marker=‘p', markerfacecolor='b', markersize=10) Department of Engineering Mechanics – HCMUT 2019 20 nhanguyen@hcmut.edu.vn 10
  6. TS. Nguyễn Thanh Nhã 10/8/2019 Chapter 7. Numerical Analysis with Python PROGRAMMING FOR ENGINEERINGS Matplotlip • SCATTER: >>> import numpy as np >>> import matplotlib.pyplot as plt >>> N = 50 >>> x = np.random.rand(N) >>> y = np.random.rand(N) >>> colors = np.random.rand(N) >>> area = np.pi * (15 * np.random.rand(N)) 2 >>> plt.scatter(x, y, s=area, c=colors, alpha=0.5) >>> plt.show() Department of Engineering Mechanics – HCMUT 2019 23 Chapter 7. Numerical Analysis with Python PROGRAMMING FOR ENGINEERINGS Matplotlip • TEXT: >>> import numpy as np >>> import matplotlib.pyplot as plt >>> N = 4 >>> x = np.random.rand(N) >>> y = np.random.rand(N) >>> colors = ['blue', 'red', 'mageta', 'yellow'] >>> area = np.pi * (15 * np.random.rand(N)) 2 >>> for i in range(N): >>> plt.scatter(x[i], y[i], s=area[i], c=colors[i][0], alpha=0.5) >>> plt.text(x[i], y[i], colors[i]) >>> plt.show() Department of Engineering Mechanics – HCMUT 2019 24 nhanguyen@hcmut.edu.vn 12
  7. TS. Nguyễn Thanh Nhã 10/8/2019 Chapter 7. Numerical Analysis with Python PROGRAMMING FOR ENGINEERINGS Matplotlip • IMAGES: import matplotlib.pyplot as plt import imageio img = imageio.imread('C:/Users/User/Desktop/ENGR351.jpg') plt.imshow(img) plt.show() Các phương thức khác trong Matplotlip có thể tham khảo tại: NumPy for Matlab users: matlab-users.html Department of Engineering Mechanics – HCMUT 2019 27 Chapter 7. Numerical Analysis with Python PROGRAMMING FOR ENGINEERINGS Matplotlip Bài tập Vẽ 6 hình tròn với các đường kính khác nhau trên 6 subplots. Mỗi hình tròn có các định dạng khác nhau (linestyle, marker, color, markerfacecolor, ). Viết title và ghi diện tích cho mỗi subplots như hình dưới: Department of Engineering Mechanics – HCMUT 2019 28 nhanguyen@hcmut.edu.vn 14