Professional Documents
Culture Documents
Thuc Hanh Giai Tich 2024
Thuc Hanh Giai Tich 2024
Tích phân về mặt ý niệm là “góp nhặt” (tổng) các “lát cực nhỏ” để được tổng thể đối tượng (nguyên
văn “Integration is a way of adding slices to find the whole ”. Như vậy, giữa đạo hàm với tích phân
có quan hệ ngược nhau. Cụ thể là: giả định có 1 vòi chảy nước vào trong hồ:
Một vòi nước chảy nước đều vào trong hồ chứa, nghĩa là cứ mỗi đơn vị thời gian sẽ có 1 đơn vị
nước chảy vào trong hồ chứa làm hồ chứa tăng đúng 1 khối lượng là x.
Với 𝐹(𝑏) và 𝐹(𝑎) là những giá trị tích phân tại các vị trí 𝑥 = 𝑏 và 𝑥 = 𝑎 tương ứng.
1
Giả i tích – PPT cho TTNT 2024
1.2. Tích phân với gói phần mềm scipy
Thực hành : Viết các lệnh sau và thực thi cùng lúc trong tập tin scipy_in.py:
import scipy
from sympy import *
x = Symbol('x')
bt1 = integrate(x**2 + x + 1, x)
bt2 = integrate(x/(x**2+2*x+1), x)
bt3 = integrate(x**2 * exp(x) * cos(x), x)
bt4 = integrate(exp(-x**2)*erf(x), x)
2
Giả i tích – PPT cho TTNT 2024
Xét vùng ABDE trong đồ thị trên nằm giữa 2 điểm từ 𝑥 = 2 đến 𝑥 = 4 tương ứng với điểm 𝐴 và 𝐵.
Diện tích ABDE có thể được tính bằng cách tính diện tích các vùng hình học, cụ thể:
1
𝑆𝐴𝐵𝐷𝐸 = 𝑆𝐴𝐵𝐶𝐸 + 𝑆𝐸𝐶𝐷 = 2 × 2 + ( ) × 2 × 2 = 6
2
4
Thử lại, chúng ta có thể tính tích phân ∫2 𝑥𝑑𝑥 bằng hàm xử lý Integral của Sympy:
>>> from sympy import Integral, Symbol
>>> x = Symbol('x')
>>> Integral(x, (x, 2, 4)).doit()
Giá trị tích phân tương đồng như việc tính toán diện tích ABDE.
Việc hiểu về tích phân xác định là diện tích “đóng” bởi hàm giữa các điểm xác định trên trục x là
vấn đề chính yếu để hiểu được những tính toán về xác suất trong các sự kiện ngẫu nhiên liên quan
các biến ngẫu nhiên liên tục.
Ứng du ̣ng.
Trên thực tế, nhu cầu sẽ giảm khi giá của một sản phẩm gia tăng. Ngược lại, khi giá càng tăng, sản
phẩm sẽ có nhiều trên thị trường. Với đồ thị thể hiện giữa nhu cầu và cung cấp theo hai đại lượng
giá (p) và số lượng sản phẩm được bán (q) được thể hiện và chúng ta dễ dàng thấy sự nghịch biến.
Trong đồ thị đó, điểm cân bằng (equilibrium) là điểm (𝑞 ∗ , 𝑝∗ ) giao điểm giữa hai xu hướng chính
là giá trị cân bằng của thị trường.
Với 𝑝 = 𝑑(𝑞) là hàm nhu cầu (hàm giảm), 𝑝 = 𝑠(𝑞) là hàm cung cấp (hàm tăng)
Từ đồ thị, chúng ta dễ thấy rằng để đạt đến trạng thái cân bằng, chúng ta có thể phân tích với lượng
tiền “dư” (surplus) từ bên “cầu” (consumer) và bên “cung cấp” (producer) bằ ng tích phân.
Từ đó, hãy giải bài toán sau: Honda dự kiến bán xe SH 2019. Sau vài tháng thăm dò, Honda nhận
ra các quy luật là:
+ Quy luật cầu: 𝑝 = 𝑑(𝑞) = −0.8𝑞 + 150, nghĩa là giá (150-0.8) triệu sẽ bán được 1 xe/tháng (𝑞 =
1), (150-1.6) triệu mỗi tháng sẽ bán được 2 xe/tháng (tương ứng với 𝑞 = 2),…
+ Quy luật cung: 𝑝 = 𝑠(𝑞) = 5.2𝑞, nghĩa là mỗi xe SH bán ra, Honda được lợi là 5.2 triệu đồng.
Thực hiê ̣n các yêu cầ u sau:
1. Xác định giá nên bán trên thị trường (trạng thái cân bằng). Vẽ đồ thị.
2. Tại thời điểm cân bằng, tổng số tiền người mua phải trả dư/cao hơn (consumer surplus).
3. Tại thời điểm cân bằng, tổng số tiền mà sản phẩm thu dư được (producer surplus).
3
Giả i tích – PPT cho TTNT 2024
2. Giới hạn của hàm số
Bài toán thường thấy trong giải tích là tìm giá trị giới hạn (limit hay gọi ngắn gọn là lim) của một
hàm số khi biến số được giả định tiến đến một giá trị nào đó (giá trị xác định, hoặc vô cùng).
Xét hàm số 𝑓(𝑥) = 1⁄𝑥 (với biểu đồ như hình bên dưới).
Khi giá trị 𝑥 tăng, giá trị của hàm 𝑓(𝑥) sẽ dần về 0. Kí hiệu toán học là:
1
=0 lim
𝑥→∞ 𝑥
Với SymPy, chúng ta có thể tính giới hạn của hàm số bằng lớp Limit như sau:
>>> from sympy import Limit, Symbol, S
>>> x = Symbol('x')
>>> L = Limit(1/x, x, S.Infinity)
in L và L.doit() để thấ y kế t quả. Ngoài ra, ta có thể xét giới ha ̣n bên trái, bên phải như sau:
>>> Limit(1/x, x, 0, dir='-').doit()
>>> Limit(1/x, x, 0, dir='+').doit()
Ngoài ra, lớp Limit có thể xử lý các hàm bất định, dạng 0/0 hoặc vô cùng/vô cùng một cách tự
động. Đó là những giới hạn trong lý thuyết được tính toán bằng quy tắc l’Hôpital.
Xét ví dụ sau tính giới hạn của:
sin(𝑥)
lim
𝑥→0 𝑥
Tính toán giới hạn dạng vô cùng/vô cùng
>>> from sympy import Symbol, sin
>>> Limit(sin(x)/x, x, 0).doit()
1
Thực hành: SV hãy tính giá trị của giới hạn sau khi x tiến đến vô cực: 𝑥𝑠𝑖𝑛 𝑥
Ứng du ̣ng. Bài toán lãi suất kép liên tục – Continous Compound Interest
Giả định chúng ta có vốn 1 triệu đô trong ngân hàng. Và tổng tiền chúng ta có được trong 1 năm
theo với lãi suất 100% nhận được từ 𝑛 lần trong 1 năm là:
1 𝑛
𝐴 = (1 + )
𝑛
4
Giả i tích – PPT cho TTNT 2024
Nhà toán học James Bernoulli khám phá ra rằng khi 𝑛 tăng, số hạng (1 + 1/𝑛)𝑛 tiến đến số 𝑒, là
một giá trị hằng. Với giá trị vốn là 𝑝, lãi suất là 𝑟 và số năm là 𝑡 thì số tiền chúng ta
𝑟 𝑛𝑡
𝐴 = 𝑃 (1 + )
𝑛
Giả định lãi suất liên tục, hãy tìm công thức cho giá trị 𝐴.
Thực hành bằ ng đồ thi:̣ Bằng phương pháp đồ thị, hãy cho biết giới hạn của hàm số sau
1
lim 𝑥𝑠𝑖𝑛( )
𝑥→0 𝑥
1
Gợi ý: hãy vẽ đồ thị của các hàm: 𝑔(𝑥) = −𝑥, 𝑓(𝑥) = 𝑥𝑠𝑖𝑛(𝑥), ℎ(𝑥) = 𝑥. Nhận định: giới hạn
của cả hai hàm 𝑔(𝑥)và ℎ(𝑥) đều bằng 0. Sau đó sử dụng định lý “kẹp” để suy ra giới hạn của hàm
𝑓(𝑥)đã cho.
import sympy
from sympy import *
x = Symbol('x')
f = x * sin(1/x)
c = Symbol('c')
delta = Symbol('delta')
c=0
delta = 1/4
sympy.plot(f,(x, c - delta, c + delta))
Dựa vào đồ thị trên, ta thấy giới hạn của hàm đã cho là 0.
5
Giả i tích – PPT cho TTNT 2024
3. Đa ̣o hàm.
Giới thiệu về một số vấn đề xử lý bổ sung với Python và gói Sympy. Các bổ trợ này sẽ hỗ trợ cho
các tính toán, đặc biệt tính toán và xử lý hình thức.
6
Giả i tích – PPT cho TTNT 2024
>>> bieuthuc2 = x**2 + y**2
>>> u = Symbol('u')
>>> v = Symbol('v')
>>> a = Symbol('a')
>>> from sympy import sin, cos
>>> bieuthuc_theo_uv = bieuthuc2.subs({x : a*sin(u), y : a*cos(u)})
>>> bieuthuc_theo_uv
>>> bieuthuc_theo_uv.simplify()
Đạo hàm của hàm số 𝑦 = 𝑓(𝑥) thể hiện tỉ lệ thay đổi trong biến phụ thuộc, theo đó 𝑦 phụ thuộc vào
𝑑𝑦
biến 𝑥 và được kí hiệu là 𝑓 ′ (𝑥) hoặc ⁄𝑑𝑥. Chúng ta có thể tìm đạo hàm của một hàm bằng việc
tạo đối tượng của lớp Derivative. Xét hàm về chuyển động của chiếc ô tô chuyển động:
>>> from sympy import Symbol, Derivative
>>> t = Symbol('t')
>>> st = 5*t**2 + 2*t + 8
>>> Derivative(st, t)
>>> d = Derivative(st, t)
>>> d.doit()
Biểu thức của đạo hàm tính toán được là 10 ∗ 𝑡 + 2. Bây giờ, chúng ta có thể tính toán cụ thể giá
trị của đạo hàm tại các vị trí 𝑡 = 𝑡1 hoặc 𝑡 = 1 bằng phương thức thay thế subs().
+ Về thay thế 𝑡 = 1:
>>> d.doit().subs({t:1})
Xét một hàm dạng 𝑢𝑣, khi đó, ta có: (𝑢𝑣)′ = 𝑢′ 𝑣 + 𝑣′𝑢. Ví dụ: tính đạo hàm của hàm số sau:
𝑓 = (𝑥 3 + 𝑥 2 + 𝑥) × (𝑥 2 + 𝑥)
>>> from sympy import Derivative, Symbol
>>> x = Symbol('x')
>>> f = (x**3+x**2+x)*(x**2+x)
>>> Derivative(f, x).doit()
(2*x + 1)*(x**3 + x**2 + x) + (x**2 + x)*(3*x**2 + 2*x + 1)
Rõ ràng hàm 𝑓 ở đây là tích của hai hàm độc lập với nhau. Tuy nhiên, lớp Derivative sẽ hỗ trợ chúng
ta xử lý những hàm số phức tạp. Với các hàm lượng giác, chúng ta phải import thư viện sympy, sau
đó, chúng ta có thể tính toán bằng lớp Derivative bình thường:
a. f(x)=sin(2x)
>>> f = sympy.sin(2*x)
>>> Derivative(f, x).doit()
b. f(x) = sin(x)cos(x)
>>> f = sympy.sin(x)*sympy.cos(x)
>>> Derivative(f, x).doit()
Lưu ý: phải nhớ khai báo biến x trước bằng khai báo: x = Symbol('x')
7
Giả i tích – PPT cho TTNT 2024
Đạo hàm cấp cao và bài toán cực trị
Theo mặc định, việc tạo ra đối tượng đạo hàm bằng cách sử dụng lớp Derivative để tính đạo hàm
bậc 1. Để tính toán các đạo hàm cấp cao cơn, đơn giản chỉ việc xác định cấp đạo hàm muốn tính
vào tham số thứ 3 khi tạo đối tượng Derivative. Trong phần này, chúng ta sẽ sử dụng đạo hàm thứ
1 và 2 để tìm cực đại và cực tiểu trên một khoảng.
Giả sử, xét hàm 𝑥 5 − 30𝑥 3 + 50𝑥 định nghĩa trên miền xác định [−5, 5]. Chúng ta có thể dễ dàng
vẽ đồ thị của hàm số.
9
Giả i tích – PPT cho TTNT 2024
Và điều này có nghĩa là giá trị lớn nhất sẽ ở các biên của miền xác định!
Lưu ý: để vẽ đồ thị của hàm 𝑓 = 𝑥 5 − 30𝑥 3 + 50𝑥, chúng ta sử dụng lệnh như sau:
>>> import sympy
>>> sympy.plot(f, (x, -5, 5))
Trong đó, tham số (x, -5, 5) là giới hạn hàm số chỉ vẽ trong khoảng [-5, 5]. Và kết quả là đồ thị được
tạo thành như bên dưới:
1. Xác định các biến và các hằng số, vẽ đồ thị phù hợp, hiểu rõ cần tìm cực đại, cực tiểu
của hàm nào.
2. Viết công thức cho hàm muốn tìm cực đại, cực tiểu.
3. Viết hàm phụ thuộc vào một biến duy nhất: 𝑓(𝑥)
4. Tìm 𝑓′(𝑥) và giải 𝑓′(𝑥) = 0. Kiểm tra tất cả các giá trị tới hạn và điểm đầu mút để tìm
cực trị.
10
Giả i tích – PPT cho TTNT 2024
>>> A = cuctri[0]
>>> d2 = Derivative(d1, x).doit()
>>> d2.subs({x:A}).evalf()
>>> x_min=0
>>> x_max=4
>>> f.subs({x:A}).evalf()
>>> f.subs({x:x_min}).evalf()
>>> f.subs({x:x_max}).evalf()
>>> # so sánh các giá trị, ta thấy GTLN là f(2)=1
Ứng du ̣ng.
a) Bài toán Black Friday.
Bạn muốn bán 𝑛 điện thoại Iphone 11 sao cho lợi nhuận là cao nhất. Bộ phận nghiên cứu thị trường
của công ty cho thấy nếu bán với giá $1500 thì có thể bán được 5000 chiếc và nếu cứ giảm $100
cho mỗi điện thoại thì sẽ bán thêm được 1000 chiếc. Giả sử chi phí vốn là cố định (chi phí khởi
nghiệp) bằng $2.000.000 và tổng chi phí mua về (chi phí biên) cho mỗi điện thoại là $500. Tìm giá
bán cho mỗi điện thoại (𝑥) và tổng số điện thoại bán được (𝑛) để lợi nhuận là tối đa. Tìm lợi nhuận
tối đa đó.
b) Quañ g đường trên cát.
Giả sử bạn muốn đến một điểm A (nằm trên cát) từ một con đường gần đó (xem hình 6.1.5). Giả
sử đường đi thẳng và b là khoảng cách từ A đến điểm C (C là điểm gần nhất tính từ A đến con
đường). Đặt 𝑣 là tốc độ của bạn trên đường và 𝑤, nhỏ hơn 𝑣, là tốc độ của bạn trên cát. Hiện tại
bạn đang ở điểm D, cách C một khoảng 𝑎 . Tại điểm B nào (B là điểm giữa D và C) bạn nên tách
đường để băng qua cát sao cho thời gian đến được A là ít nhất?
11
Giả i tích – PPT cho TTNT 2024
4. Mô ̣t số vấ n đề khác.
Từ đó, chúng ta thấy qua các bước lặp, x chính là các giá trị như sau:3, √1 + 3, √1 + √1 + 3,
√1 + √1 + √1 + 3, … và x sẽ hội tụ tại một số bước lặp (mặt khác cũng do sai số của ngôn ngữ
Python). Ở đây, chúng ta gọi điểm hội tụ là những điểm cố định (fixed point).
Với vector 𝑦⃗ = (𝑣1 , 𝑣2 , … 𝑣𝑛 ), chúng ta có phép tính vi phân như sau:
𝑣2 − 𝑣1 𝑣3 − 𝑣2 𝑣𝑛 − 𝑣𝑛−1
𝑑𝑦 = ( , ,…, )
𝑑𝑥 𝑑𝑥 𝑑𝑥
Nghĩa là vector tạo thành sẽ giảm đi 1 chiều.
Thực hành 6: Tính toán đạo hàm trên 1 vector dữ liệu
+ Trường hợp dx cố định:
>>> from numpy import diff
>>> dx = 0.1
>>> y = [1, 2, 3, 4, 4, 5, 6]
>>> dy = diff(y)/dx
>>> dy
12
Giả i tích – PPT cho TTNT 2024
>>> z = np.array([1, 2, 3, 4, 4, 5, 6])
>>> dz = diff(z)/dx
>>> dz
+ Trường hợp dx là một dãy số:
>>> from numpy import diff
>>> x = [.1, .2, .5, .6, .7, .8, .9]
>>> y = [1, 2, 3, 4, 4, 5, 6]
>>> dydx = diff(y)/diff(x)
13
Giả i tích – PPT cho TTNT 2024
5. Phương pháp Gradient Ascent/Descent
Phương pháp Gradient Ascent dùng để tính toán ra các giá trị cực đại cho hàm số. Trong bài này,
chúng ta sẽ nghiên cứu rõ hơn phương pháp bằng chương trình tổng quát và giải thích rõ hơn các
tham số trong phương pháp:
Khi đó, chương trình sẽ tính toán và chạy ra giá trị theta cũng như giá trị cực đại.
Các thử nghiệm khác:
14
Giả i tích – PPT cho TTNT 2024
Thử nghiệm 1:
5.2. Các lưu ý về giá trị khởi tạo ban đầu (initial value)
Giá trị khởi tạo của biến để chúng ta bắt đầu lặp thực hiện chương trình đóng vai trò quan trọng
trong thuật toán. Xét hàm 𝑥 5 − 30𝑥 3 + 50𝑥. Chúng ta bắt đầu việc tìm giá trị lớn nhất sử dụng
chương trình:
Giá trị bắt đầu là -2:
15
Giả i tích – PPT cho TTNT 2024
Do vậy, khi sử dụng phương pháp, giá trị ban đầu cần được lựa chọn kỹ lưỡng. Sau này, một số
dạng thay đổi của thuật toán nỗ lực đề cập đến giới hạn này (để cải tiến).
5.3. Vai trò của kích thước bước nhảy (step_size) và Epsilon
Trong thuật toán gradient ascent, giá trị 𝜃 (hay 𝑥) tiếp theo của biến được tính toán bằng:
𝑑𝑅
𝜃𝑚ớ𝑖 = 𝜃𝑐ũ + 𝜆
𝑑𝜃
Trong đó, 𝜆 là bước nhảy (step_size). Bước nhảy quyết định khoảng cách của bước tiếp theo. Nên
nó phải đủ nhỏ để tránh chuyện vượt qua đỉnh. Do đó, nếu giá trị 𝑥 gần với giá trị làm cho hàm cực
đại và bước nhảy tương đối lớn thì giá trị hàm ở bước tiếp theo có thể sẽ nhỏ cực đại. Và thuật toán
sẽ gọi là thất bại! Ngược lại, nếu bước nhảy quá nhỏ thì việc tính toán sẽ nhiều hơn. Trong chương
trình tính toán này, chúng ta sử dụng bước nhảy là 10−3 , hiển nhiên giá trị này sẽ không phù hợp
với mọi hàm.
Giá trị epsilon (𝜀) quyết định khi nào chúng ta nên dừng việc lặp trong thuật toán vì việc thay đổi
của 𝑥 là không đáng kể. Điều này do chúng ta mong đợi đạo hàm cấp 1 của 𝑓(𝑥) sẽ triệt tiêu (bằng
0) tại điểm cực đại và lý tưởng hơn là trị tuyệt đối giữa hai giá trị 𝑥 (hoặc 𝜃) bằng 0, nghĩa là
|𝑥𝑚ớ𝑖 − 𝑥𝑐ũ | = 0. Tuy nhiên, do có sai số nên hiệu này sẽ không bao giờ bằng 0. Vì vậy, giá tị
epsilon được chọn là giá trị gần với 0 để xử lý trường hợp này trong tính toán số thực tế, với sự
ngầm hiểu là 𝑥 không đổi. Trong chương trình trên, ta sử dụng 𝜀 = 10−6 cho tất cả các hàm. Mặc
dù giá trị này đủ nhỏ và phù hợp cho hàm có nghiệm 𝑓 ′ (𝑥) = 0 như sin(𝑥) nhưng đối với các hàm
khác, nếu cần, chúng ta phải điều chỉnh lại giá trị epsilon.
Như vậy, chúng ta có thể cài đặt lại chương trình theo hướng việc tính toán sẽ dừng nếu đạo hàm
của hàm số không có nghiệm làm triệt tiêu (𝑓 ′ (𝑥) = 0 vô nghiệm). Ví dụ trường hợp 𝑒 𝑥 hoặc
log(𝑥). Với chương trình mới, nếu nhập các hàm trên thì chương trình sẽ không tiếp tục thực thi.
Dưới đây là chương trình được 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
# như đ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
16
Giả i tích – PPT cho TTNT 2024
if __name__ == '__main__':
f = input('Nhap ham 1 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)
# thêm lệnh if (nằm trong khối lệnh else) để kiểm tra giá trị var_max trước khi 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})))
Trong phần chỉnh sửa cho hàm grad_ascent này, chúng ta gọi hàm solve() của Sympy để kiểm tra
sự tồn tại nghiệm của phương trình 𝑓’(𝑥) = 0. Nếu không có nghiệm, chúng ta in ra thông báo và
trả về giá trị rỗng, xem đoạn:
print('Khong the tiep tuc, phuong trinh {0}=0 vo nghiem'.format(ham_f1x))
return
Từ đó, chúng ta cũng thay đổi hàm __main__. Cụ thể là kiểm tra giá trị trả về của hàm grad_ascent
có phải là rỗng hay không; nếu có giá trị (không rỗng) thì chúng ta sẽ in ra; ngượi lại, nếu hàm
không tồn tại đạo hàm thì chúng ta kết thúc chương trình.
Thực hành: Thử nghiệm với các hàm 𝒆𝒙 và 𝒍𝒐𝒈𝒙
Nhap ham 1 bien (f): log(x)
Nhap ten bien tuong ung (x): x
Nhap gia tri khoi dau cho bien x: 0.1
Nhap ham 1 bien (f): E**x
Nhap ten bien tuong ung (x): x
Nhap gia tri khoi dau cho bien x: 0.1
Thuật toán cùng họ nhưng ngược lại với gradient ascent là thuật toán gradient descent. Trong
thuật toán gradient descent, giá trị nhỏ nhất sẽ được tìm kiếm thay vì tìm giá trị lớn nhất (như
gradient ascent). Do đó, điểm khác biệt lớn nhất giữa hai hàm là trong khi thuật toán gradient ascent
tìm cách “leo lên” thì gradient descent tìm cách “leo xuống”. Sự khác biệt đó chính là sự hình thành
𝑑𝑅
giá trị tiếp theo của 𝜃 (hay 𝑥) như sau: 𝜃𝑚ớ𝑖 = 𝜃𝑐ũ − 𝜆 𝑑𝜃 .
17
Giả i tích – PPT cho TTNT 2024
6. Giới thiệu các biến đổi với hàm nhiều biến.
Phần này giới thiệu tóm tắt để sinh viên biết tên các loại đạo hàm trong hàm nhiều biến. Mục tiêu
chính là nhận diện loại giá trị đầu vào và đầu ra cho các phép tính như:
- Gradient: từ giá trị tính ra vector
- Divergence: từ vector tính ra một giá trị
- Circulation.
- Vector Laplacian.
- Trace.
- Jacobian của một vector ra kết quả một ma trận.
- Hessian của một giá trị ra kết quả một ma trận
̣
6.1. Giới thiêu.
Trong ngành tối ưu hóa, phương pháp nhân tử Lagrange (đặt theo tên của nhà toán học Joseph Louis
Lagrange) là một phương pháp để tìm cực tiểu hoặc cực đại địa phương của một hàm số theo các
điều kiện giới hạn. Bài toán được phát biểu như sau:
Cho hàm số 𝑓(𝑋) đa biến, với 𝑋 là biến vector. Tìm 𝑋 để hàm 𝑓 đạt cực trị theo điều kiện 𝑔(𝑋) = 𝑐
với 𝑐 là một hằng số.
Biểu diễn toán học:
𝑀𝑎𝑥𝑖𝑚𝑖𝑧𝑒(ℎ𝑜ặ𝑐𝑀𝑖𝑛𝑖𝑚𝑖𝑧𝑒)𝑓(𝑋)
𝑅à𝑛𝑔𝑏𝑢ộ𝑐: 𝑔(𝑋) = 𝑐
Minh họa trong dưới đây, 𝑓(𝑥, 𝑦) = 2𝑥 + 𝑦 là đường màu đỏ và 𝑔(𝑥, 𝑦) = 𝑥 2 + 𝑦 2 (đường vòng
tròn) với giá trị 𝑐 = 1 (điều kiện giới hạn được hiểu là 𝑔(𝑥, 𝑦) ≤ 𝑐) và chiếu xuống mặt phẳng, ta
có các hình bên dưới (nguồn: https://en.wikipedia.org/wiki/Lagrange_multiplier):
18
Giả i tích – PPT cho TTNT 2024
𝜕ℒ
𝜕𝑋 ∇f(X) − 𝜆∇g(X)
∇ℒ(𝑋, 𝜆) = [𝜕ℒ ] = [ ]
𝑔(𝑋) − 𝑐
𝜕𝜆
Bước 3: Dựa vào các nghiệm của phương trình đạo hàm trên, ta thay thế vào hàm 𝑓(𝑋) để tìm giá
trị lớn nhất hoặc nhỏ nhất.
6.2. Các ví du ̣.
a) Ông chủ bán Mì Cay.
Ông chủ một cửa hàng bán mì cay mỗi tháng chỉ có thể rút từ ngân hàng 50 triệu đồng để trang trãi
chi phí tiền lương thuê người làm (biến x), vật liệu sử dụng để làm mì cay (biến y) và tiền thuế/mặt
bằng (giả định là một hằng số). Ngoài ra, ông chủ phải chi ra 5 triệu tiền thuê mặt bằng, thuế,… để
bán hàng. Với ràng buộc ông chủ chỉ vay được ngân hàng 50 triệu, hãy giúp ông chủ tìm phương
án chọn x và y sao cho lợi nhuận N là lớn nhất. Biết rằng lợi nhuận từ hai yếu tố mang lại là một
hàm theo 2 biến 𝑥 và 𝑦:
𝑁(𝑥, 𝑦) = 4𝑥𝑦 − 8𝑥 − 5
Ý nghĩa là của hàm 𝑁(𝑥, 𝑦): Nếu không có nhân viên làm việc (tương ứng 𝑥 = 0) thì lợi nhuận sẽ
bằng 0 (vì không tạo ra được sản phẩm). Hiển nhiên, số nhân viên cũng mang lại cho ông chủ một
số lợi nhuận khi làm việc. Tuy nhiên, số nhân viên càng nhiều thì lợi nhuận càng thấp (được đánh
giá là −8𝑥 vì phải trả lương cho nhân viên khá lớn!). Ngược lại, nếu không sử dụng vật liệu (𝑦 = 0)
thì lợi nhuận tạo ra sẽ âm khi số nhân viên tăng lên. Việc sử dụng vật liệu càng nhiều (y càng lớn)
thì càng có lợi nhuận.
Giải:
Xét hàm 𝑓(𝑥, 𝑦, 𝑧) = (4𝑥𝑦 − 8𝑥 − 5) + 𝒛(𝒙 + 𝒚 − 𝟓𝟎). Lúc này hàm 𝑧 được gọi là nhân tử
Lagrange. Hàm 𝑓 sẽ có cực trị (cụ thể là cực đại sinh viên tìm hiểu vì sao không phải là cực tiểu)
khi:
𝜕𝑓 𝜕𝑓 𝜕𝑓
= 0, = 0, =0
𝜕𝑥 𝜕𝑦 𝜕𝑧
Sau đó, chúng ta giải hệ trên sẽ được giá trị x, y tương ứng. Cụ thể, trong Python:
+ Lập nhân tử Lagrange:
>>> from sympy import Derivative, Symbol, solve
>>> x = Symbol('x')
>>> y = Symbol('y')
>>> z = Symbol('z')
>>> f = 4*x*y - 8*x - 5 + z*(x+y-50)
+ Tính các đạo hàm riêng theo các biến x, y và z:
>>> dx = Derivative(f, x).doit()
>>> dy = Derivative(f, y).doit()
>>> dz = Derivative(f, z).doit()
+ Giải hệ phương trình (giải cả 3 phương trình), là hệ phương trình ∇ℒ(𝑋, 𝜆):
19
Giả i tích – PPT cho TTNT 2024
>>> nghiem = solve([dx, dy, dz], (x,y,z))
>>> print (nghiem)
Cuối cùng, thay thế vào công thức tính, ta được số tiền thuê nhân viên (x), số tiền cần để mua nhiên
liệu (y) và lợi lợi nhuận (tiền lời) dự kiến của ông chủ mì cay:
>>> xx = nghiem[x]
>>> yy = nghiem[y]
>>> 4*xx*yy - 8*xx – 5
Hoặc:
>>> ketqua = 4*nghiem[x]* nghiem[y] – 8* nghiem[x] - 5
>>> print (ketqua)
Hãy tìm giá bán mỗi loại tô/bát phở để lợi nhuận cao nhất năm đó.
[Đáp án: giá bát/tô thường 65k; bát/tô đặc biệt 75k].
c) Giả sử bạn được giao phụ trách Hành trình về nguồn. Ở một chặng nọ, Ban tổ chức yêu cầu thực
hiện buổi cắm trại tại một khu vực (gọi là picnic area) trên bãi cỏ dọc theo Quốc lộ (highway) với
diện tích cần là 5000 m2 và cần thuê hàng rào để chắn (như hình bên dưới). Chi phí thuê hàng rào
được thuê với giá 1.000 đồng/mét. Bạn hãy tìm cách giảm số tiền thuê hàng rào để tiết kiệm chi phí
cho hành trình (theo nghĩa số mét hàng rào càng ít thì số tiền thuê sẽ ít).
d) Tìm các điểm trên mặt phẳng 𝑥 + 𝑦 + 𝑧 = 5 (cả 3 𝑥, 𝑦, 𝑧 biến đều dương) làm cho hàm
𝑓(𝑥, 𝑦, 𝑧) = 𝑥𝑦 2 𝑥 2 cực đại.
[Đáp án: (x,y,z)=(1,2,2)]
20