1 Đạo hàm (Derivative)
Trong phần cuối của series gồm 4 phần này, tôi sẽ giới thiệu với các em cách tính tích phân, vi phân và đạo hàm trong ngôn ngữ lập trình R. Như các bạn thấy ở các phần trước, R rất hữu dụng trong việc thao tác với vẽ đồ thị hàm số, tính toán các hàm số cơ bản, vẽ đồ thị hàm một biến số và hàm nhiều biến số. Chúng ta quay lại nội dung về đạo hàm, trước khi sử dụng R cho tính đạo hàm, mời các bạn ôn lại một số kiến thức, nội dung liên quan tới đạo hàm. Trong giải tích toán học, đạo hàm của một hàm số là một đại lượng mô tả sự biến thiên của hàm tại một điểm nào đó. Đạo hàm là một khái niệm cơ bản trong giải tích. Chẳng hạn, trong vật lý, đạo hàm biểu diễn vận tốc tức thời của một chất điểm chuyển động hoặc cường độ dòng điện tức thời tại một điểm trên dây dẫn. \(x^2+^2=z^2\)
Đạo hàm có biểu diễn trong hình học là hệ số góc của tiếp tuyến với đồ thị biểu diễn hàm số. Tiếp tuyến đó là xấp xỉ tuyến tính gần đúng nhất của hàm ở gần giá trị đầu vào. Vì lý do đó nên đạo hàm còn được gọi là “tốc độ biến thiên tức thời” hay bằng tỉ số giữa số gia của biến phụ thuộc và số gia của biến độc lập. Phép toán để tính đạo hàm được gọi là vi phân. Khái niệm ngược lại với đạo hàm là nguyên hàm. Định lý cơ bản của giải tích liên hệ nguyên hàm với tích phân. Vi phân và tích phân là hai công cụ cơ bản trong giải tích đơn biến. Đồ thị của hàm số (màu đen) và tiếp tuyến của nó (màu đỏ). Hệ số góc của tiếp tuyến bằng đạo hàm của hàm đó tại tiếp điểm (điểm được đánh dấu).

Đạo hàm của hàm số
1.1 Vi Phân(Differentiation)
Vi phân (differentiation) là quá trình để tính đạo hàm. Đạo hàm của hàm số \(y = f(x)\), với \(x\) là biến số, mô tả sự thay đổi giá trị của \(y\) tương ứng với độ biến thiên của \(x\) và còn được gọi là đạo hàm của \(f\) đối với \(x\). Nếu \(x\) và \(y\) đều thuộc tập số thực thì đạo hàm của hàm số là hệ số góc của đồ thị hàm đó tại mỗi điểm trong hệ tọa độ Descartes.
Xét trường hợp đơn giản nhất: gọi \(y\) là một hàm số bậc nhất biến \(x\) có đồ thị là một đường thẳng. Trong trường hợp này, \(y = f(x) = mx + b\) với \(m\) và \(b\) là số thực và hệ số góc \(m\) được tính bằng:
\[m=\frac{\Delta{y}}{\Delta{x}}\] trong đó \(\Delta\) (delta) là viết tắt của “Thay đổi”, \(\Delta{x}\) là số gia của đối số và \(\Delta{y}\) tương ứng là số gia của hàm số, chỉ sự biến thiên của \(x, y\), \(\Delta{y}=f(x+\Delta{x})-f(x)\).
Công thức trên là đúng do: \[y+\Delta{y} = f(x+\Delta{x})=m(x+\Delta{x})+b=mx+m\Delta{x}+b=y+m\Delta{x}\] Do đó: \(\Delta{y}=m\Delta{x}\)
Biểu thức trên cho biết giá trị hệ số góc của một đường thẳng

Hệ số góc của đường thẳng
Ví dụ 1: Tính đạo hàm cấp 1 và cấp 2 của hàm số một biến số: \[f(x)=x^{3}+1\]
#Tính đạo hàm của f(x)
D(expression(x^3+1),'x') #Tính đạo hàm cấp 1
## 3 * x^2
D(D(expression(x^3+1),'x'),'x')
## 3 * (2 * x)
Ví dụ 2: Tính đạo hàm của hàm số \(f(x)= x^{3}+1\) tại \(x=2\)
D(expression(x^3+1),'x')
## 3 * x^2
<- 2
x 3*x^2
## [1] 12
Ví dụ 3: Tính đạo hàm riêng cấp 1 và cấp 2 của hàm số nhiều biến số Tính đạo hàm riêng cấp 1 và cấp 2 của hàm số \(z=x^{2}+y^{2}\)
D(expression(x^2+y^2), 'x')
## 2 * x
D(expression(x^2+y^2), 'y')
## 2 * y
D(D(expression(x^2+y^2), 'x'),'x')
## [1] 2
D(D(expression(x^2+y^2), 'y'),'y')
## [1] 2
1.2 Tích phân hàm một biến
Khái niệm tích phân:
Tích phân là một khái niệm toán học và cùng với nghịch đảo của nó vi phân (differentiation) đóng vai trò là 2 phép tính cơ bản và chủ chốt trong lĩnh vực giải tích (calculus). Có thể hiểu đơn giản tích phân như là diện tích hoặc diện tích tổng quát hóa. Giả sử cần tính diện tích một hình phẳng được bao bởi các đoạn thẳng, ta chỉ việc chia hình đó thành các hình nhỏ đơn giản hơn và đã biết cách tính diện tích như hình tam giác, hình vuông, hình thang, hình chữ nhật… Tiếp theo, xét một hình phức tạp hơn mà nó được bao bởi cả đoạn thẳng lẫn đường cong, ta cũng chia nó thành các hình nhỏ hơn, nhưng bây giờ kết quả có thêm các hình thang cong. Tích phân giúp ta tính được diện tích của hình thang cong đó.
Hoặc giải thích bằng toán học như sau: Cho một hàm \(f\) của một biến thực \(x\) và một miền giá trị thực \([a, b]\). Như vậy một tích phân xác định (definite integral) từ \(a\) đến \(b\) của \(f(x)\), ký hiệu là:
\[\int_{a}^{b}f(x)dx\]
được định nghĩa là diện tích của một vùng trong không gian phẳng \(xy\) được bao bởi đồ thị của hàm \(f\), trục hoành, và các đường thẳng \(x = a\) và \(x = b\), sao cho các vùng trên trục hoành sẽ được tính vào tổng diện tích, còn dưới trục hoành sẽ bị trừ vào tổng diện tích.
Ta gọi \(a\) là cận dưới của tích phân, còn \(b\) là cận trên của tích phân.
Cho \(F(x)\) là nguyên hàm của \(f(x)\) trong \((a, b)\). Khi đó, tích phân bất định (indefinite integral) được viết như sau:
\[\int f(x)dx=F(x)+C\] Tích phân xác định được định nghĩa như diện tích \(S\) được giới hạn bởi đường cong \(y=f(x)\) và trục hoành, với \(x\) chạy từ \(a\) đến \(b\)

Tích phân
Ví dụ : Tính tích phân thông thường Tính \(\int_{1}^{10}xe^xdx\)
# Xây dựng hàm f(x)
<- function(x){
f return(x*exp(x))
}# Tính tích phân của f(x)
integrate(f, lower = 1, upper = 10)
## 198238.2 with absolute error < 2.2e-09
# Kết quả cho ra với sai số tuyệt đối nhỏ hơn 2.2*10^-9
1.2.1 Tích phân suy rộng
Tính hội tụ và phân kỳ của tích phân: Xem bài viết về tích phân hội tụ và phân kỳ
Ví dụ: Xét tính hội tụ, phân kỳ của tích phân \(\int_{1}^{+\infty}\frac{1}{x^{2}}dx\)
# Xây dựng hàm f(x)
<- function(x){
f return(1/x^2)
}integrate(f, lower=1, upper = Inf)
## 1 with absolute error < 1.1e-14
# Giá trị trả về là 1, do đó tích phân suy rộng trên là hội tụ, chúng ta sử dụng -Inf cho giá trị trừ vô cùng
1.3 Phương trình vi phân
Để giải phương trình vi phân, trước tiên chúng ta cần cài đặt một package hỗ trợ có tên là \(deSolve\) thông qua phương thức \(install.packages("deSolve")\), yêu cầu máy tính có sử dụng Internet.
library(deSolve)
1.3.1 Phương trình vi phân cấp 1
Xét phương trình vi phân cấp 1: \(dy/dx=f(x,y)\)
Giả sử ta cần giải phương trình vi phân \(dy/dx = x^{2}\). Phương trình này có nghiệm tổng quát là \(y=x^{3}/3 +C\). Với điều kiện ban đầu \(y(0)=1\) ta được nghiệm riêng \(y=x^{3}+1\), ta sẽ vẽ đồ thị nghiệm riêng này Lưu ý: Phần mềm R lưu hàm số dưới dạng bảng nên ta không có được công thức tường mình những vẫn sẽ vẽ đồ thị Ví dụ: Vẽ đồ thị nghiệm riêng của phương trình vi phân \(dy/dx=x^{2}\) với điều kiện ban đầu \(y(0)=5\) trên miền \([0,100]\). Chúng ta sử dụng hàm \(ode()\) - General Solver for Ordinary Differential Equations.
Các tham số của hàm này là:
y là tham số với điều kiện ban đầu của hàm số
times là tham số mà vùng giá trị chúng ta muốn đưa ra giá trị của phương trình vi phân, lưu ý là giá trị ban đầu phải trùng với giá trị khởi đầu của đối số. Đôi khi \(times = 0:100\) thể hiện miền nghiệm là \([0,100]\), vì trong phương trình vi phân biến \(x\) thường là biến thời gian nên có quy ước chuẩn là \(times\)
func - là hàm số được định nghĩa trong R, trong đó giá trị trả về là một list()
<- function(x, y, parms){list(c(x^2))}
hamso <- c(y=5)
dieukien <- ode(y=dieukien, func = hamso, times = 0:100, parms = 0)
ketqua plot(ketqua, type = "l", which = "y", lwd = 2, xlab = "Truc X", ylab="Truc Y",
main = "Phuong trinh vi phan")
Ví dụ : Vẽ đồ thị nghiệm riêng của phương trình vi phân: \[y'+\frac{x}{1-x^{2}}y = x\sqrt{y}\] với điều kiện ban đầu \(y(4)=2\) trên miền \([4,10]\)
<- function(x,y,parms){list(c(-x/(1-x^2)*y+x*sqrt(y)))}
hamso <- c(y=2)
dieukien <- ode(y = dieukien, func = hamso, times = 4:10, parms = 0)
nghiem plot(nghiem, type = "l", which = "y", lwd = 2, xlab="Truc X", ylab="Truc Y", main="Phuong trinh vi phan")