Ra mắt hai series mới cực hot Trí tuệ nhân tạo A đến ZPython công cụ không thể thiếu khi nghiên cứu Data science, Machine learning.

Tính đạo hàm và vẽ đồ thị con trong Python

Video trong bài viết

Trước khi đến với phần đạo hàm, đây là lời giải bài tập trong bài trước. Tôi không chú trọng đến toán học mà mục đích muốn các bạn làm quen với các công cụ như Jupyter Notebook để thuận tiện hơn trong học tập và làm việc với Machine Learning sau này.

1. Đạo hàm là gì?

Đây là một kiến thức toán học đã học ở hồi cấp 3 phổ thông trung học, nhưng không phải ai cũng hiểu được ý nghĩa của nó. Nhân tiện nói về đạo hàm, xin phép 500 anh em, tôi dài dòng một chút. "Bà chủ, xin cốc trà đá. Có điếu không làm một bi!". Mịa kiếp, rời ghế nhà trường cũng ngót nghét 20 năm, giờ cũng không còn nhớ gì nhiều, chỉ nhớ mang máng nó liên quan gì đến gia tốc hay tốc độ thay đổi gì gì đó.

Tại sao gọi là đạo hàm, nó là một từ Hán Việt, đạo là chỉ dẫn, chỉ đạo, hàm là hàm chứa, bao hàm. Do đó, đạo hàm là một cái gì đó chỉ dẫn hàm số tăng hay giảm với tốc độ nhanh hay chậm hay diễn đạt một ý khác chính là tốc độ thay đổi giá trị(bảo rồi mà có liên quan đến gia tốc).

Chúng ta xem lại chút định nghĩa đạo hàm trong sách giáo khoa:

Đạo hàm của hàm số $y = f(x)$ tại điểm $x_0$ được xác định bằng giới hạn: $$f'(x_0) = \lim_{x\rightarrow{x_0}}\frac{f(x)-f(x_0)}{x-x_0}$$. Nếu đặt $\Delta{x} = x-x_0$ thì $x = x_0+\Delta{x}$ khi đó ta có: $$f'(x_0) = \lim_{\Delta{x}\rightarrow{x_0}}\frac{f(x_0 + \Delta{x})-f(x_0)}{\Delta{x}}$$

Về mặt hình học, đạo hàm của $f(x)$ tại điểm $x_0$ chính là hệ số góc hay độ dốc của đường thẳng tiếp tuyến với hàm số $f(x)$ tại điểm $x_0$.

Độ dốc (slope) cho ta biết được hàm số tại điểm xác định đang tăng hay giảm một cách nhanh hay chậm. Do đó nó bằng tỉ lệ sự thay đổi trên trục y chia cho sự thay đổi trên trục x. Do đó: $$slope = \frac{\Delta{y}}{\Delta{x}} = tan(\theta)$$

Ý nghĩa hình học của đạo hàm

Muốn xác định tiếp tuyến tại điểm P ta cho điểm Q chạy về điểm P, tức là $\Delta{x}$ tiến đến 0. Hay nói cách khác, như vậy đã minh chứng được đạo hàm tại điểm $x_0$ chính là hệ số góc hay độ dốc đường tiếp tuyến tại điểm đó.

"Chém gió tí mà nói thật vẫn chưa hiểu cái mô tê chi rứa, bà chủ cho xin thêm cốc nữa", chém gió nhiều khát nước quá. Đạo hàm được là Newton và Leibniz đưa ra đồng thời và độc lập nhau, tuy nhiên Newton lại có một cách nhìn nhận khác về đạo hàm. Đạo hàm cho chúng ta biết được tốc độ biến thiên (tốc độ thay đổi) của một hàm số. Các bạn có biết được điều này quan trọng thế nào không? Với đạo hàm, bất cứ ở đâu có sự thay đổi, ở đó chúng ta sẽ biết được nó thay đổi như thế nào: liệu đại lượng đó đang tăng hay đang giảm hay đang không thay đổi, nếu là đang tăng vậy tăng nhanh hay tăng chậm…

Vận tốc đặc trưng cho sự thay đổi của quãng đường đi được, gia tốc là đặc trưng cho sự thay đổi của vận tốc theo thời gian vậy thì có gì là khó hiểu không khi trong chương trình vật lí người ta nói với các bạn rằng: vận tốc là đạo hàm của hàm quãng đường theo thời gian, còn gia tốc là đạo hàm của hàm vận tốc.

2. Tìm điểm cực trị của hàm số

Người ta đã chứng minh được rằng, hàm số đạt được cực trị tại điểm $x_0$ thì $f'(x_0) = 0$ tức là khi đó đường tiếp tuyến sẽ song song với trục x. Hẳn bạn còn nhớ các định lý sau về việc tìm điểm cực trị của hàm số:

Định lý 1: Cho hàm số $y = f(x)$ liên tục trong khoảng $K = (x_0 - h; x_0 + h)$ và có đạo hàm trên $K$ hoặc trên $K\setminus\{x_0\}$.

  • Nếu $f'(x) > 0 | \forall{x_0 - h; x_0}$ và $f'(x) < 0 | \forall{x_0; x_0 + h}$ thì $x_0$ là điểm cực đại của hàm số. Tức là $f'(x)$ đổi dấu từ dương sang âm khi đi qua $x_0$.
  • Nếu $f'(x) < 0 | \forall{x_0 - h; x_0}$ và $f'(x) > 0 | \forall{x_0; x_0 + h}$ thì $x_0$ là điểm cực tiểu của hàm số. Tức là $f'(x)$ đổi dấu từ âm sang dương khi đi qua $x_0$.

3. Thực hiện vẽ đồ thị đạo hàm trong Python

Như vậy, để thực hiện tìm được cực tiểu của hàm chi phí, chúng ta cần tìm đạo hàm của nó. Hàm chi phí như ở bài trước chúng ta đã giả sử là một hàm số $y = x^2 + x + 1$. Bạn hẳn còn nhớ đạo hàm hàm mũ được tính theo công thức: $$\frac{\partial f}{\partial x} x^n = nx^{(n-1)}$$

Do đó, đạo hàm của $y = x^2 + x + 1$ sẽ là $y' = 2x + 1$. Thực hiện vẽ đồ thị của đạo hàm bên cạnh đồ thị hàm số trong Python:

def df(x):
    return 2*x + 1
plt.figure(figsize=[15, 5])

# 1 Chart: Cost function
plt.subplot(1, 2, 1)

plt.xlim(-3, 3)
plt.ylim(0, 8)

plt.title('Cost function', fontsize=17)
plt.xlabel('X', fontsize=16)
plt.ylabel('f(x)', fontsize=16)

plt.plot(x_1, f(x_1), color='blue', linewidth=3)

# 2 Chart: Derivative
plt.subplot(1, 2, 2)

plt.title('Slope of the cost function', fontsize=17)
plt.xlabel('X', fontsize=16)
plt.ylabel('df(x)', fontsize=16)
plt.grid()
plt.xlim(-2, 3)
plt.ylim(-3, 6)

plt.plot(x_1, df(x_1), color='skyblue', linewidth=5)

plt.show()

Kết quả chúng ta có được đồ thị của hàm số cùng với đạo hàm hàm số trên cùng một hình ảnh.

Vẽ đồ thị hàm vào đạo hàm

Giải thích một số phương thức mới sử dụng trong đoạn code Python vẽ đồ thị ở trên:

  • plt.figure(figsize=[15, 5]) thiết lập kích thước hình ảnh bao trùm cả hai đồ thị là rộng 15 inch và cao 5 inch. Chú ý, đơn vị đo trong Matplotlib là inch, có thể do đội phát triển thư viện này chủ yếu là người Mỹ.
  • plt.subplot() để vẽ các đồ thị con, có 3 tham số trong phương thức này, tham số thứ nhất là số dòng, tham số thứ hai là số cột, tham số thứ 3 là chỉ số của đồ thị. Sau khi thiết lập, vẫn gọi hàm plt.plot() để vẽ bình thường.
  • plt.grid() vẽ lưới ô vuông trên đồ thị giúp nhìn các điểm cắt trục x và y dễ dàng hơn.

CÁC BÀI VIẾT KHÁC

FirebirD

Đam mê Toán học, Lập trình. Sở thích chia sẻ kiến thức, Phim hài, Bóng đá, Cà phê sáng với bạn bè.

Tạo dữ liệu và vẽ đồ thị với Numpy và Matplotlib

Vẽ đồ thị trong Python với thư viện Matplotlib

0 Bình luận trong "Tính đạo hàm và vẽ đồ thị con trong Python"

Thêm bình luận