Download as pdf or txt
Download as pdf or txt
You are on page 1of 20

Giả i tích – PPT cho TTNT 2024

THỰC HÀ NH GIẢI TÍ CH TRÊN PYTHON


1. Tích phân của các hàm số

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ồ:

Khi đó chúng ta có thể phát biểu theo từng gốc độ:


- Đạo hàm: Nếu khối nước cứ tăng đều x trong một đơn vị thời gian thì nghĩa là hệ số nước
đều đều không thay đổi (bằng) 1.
- Tích phân: Với tốc độ chảy nước cứ giữ bằng nhau tại mọi thời điểm trong một đơn vị thời
gian thì nước sẽ tăng đều một giá trị khối lượng nước x nào đó. Hiển nhiên, để mô tả đầy
đủ, chúng ta phải bổ sung thêm giá trị C (trong tích phân) là đối tượng không bắt buộc

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.

1.1. Việc tính tích phân


Tích phân vô định hoặc bất định (indefinite integral, có sách tiếng Anh ghi là antiderivative) của
một hàm số 𝑓(𝑥) là là số 𝐹(𝑥), thỏa 𝐹 ′ (𝑥) = 𝑓(𝑥). Chúng ta có thể hiểu nôm na là tích phân của
một hàm số là một hàm mà đạo hàm của nó chính là hàm ban đầu. Trong toán học, kí hiệu tích phân
là 𝐹(𝑥) = ∫ 𝑓(𝑥)𝑑𝑥. Với tích phân xác định (definite integral), chúng ta có thêm các cận (giả định
là 𝑎 và 𝑏):
𝑏

∫ 𝑓(𝑥)𝑑𝑥 = 𝐹(𝑏) − 𝐹(𝑎)


𝑎

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)

1.3. Tích phân với gói sympy


Với gói SymPy, chúng ta có thể tìm thấy việc tính toán cả hai loại tích phân bằng cách tạo đối tượng
Integral. Dưới đây là minh họa việc tính tích phân ∫ 𝑘𝑥𝑑𝑥 với 𝑘 là một hằng số.
Thực hành: Tính tích phân đơn giản
>>> from sympy import Integral, Symbol
>>> x = Symbol('x')
>>> k = Symbol('k')
>>> Integral(k*x, x)
Sau khi import các lớp Integral và Symbol và thực hiện việc tạo 2 đối tượng tương ứng k và x. Sau
đó, chúng ta tạo đối tượng Integral với hàm kx và xác định biến lấy tích phân là x. Tương tự như
các lớp Limit (tính giới hạn) và Derivative (tính đạo hàm), chúng ta sẽ phải thực hiện việc tính toán
sử dụng phương thức doit():
>>> Integral(k*x, x).doit()
Giá trị tích phân trả về là một hàm số (kí hiệu). Nếu chúng ta tính đạo hàm, nó sẽ ra giá trị của hàm
gốc là hàm kx.
Để tính tích phân xác định, chúng ta chỉ đơn giản thêm các giá trị biến xác định cận dưới và cận trên
khi tạo đối tượng Integral, cụ thể như sau:
>>> Integral(k*x, (x, 0, 2)).doit()
2
Giá trị trả về là tích phân xác định ∫0 𝑘𝑥𝑑𝑥 .
Chúng ta có thể thể hiện trực quan các tích phân xác định bằng việc thể hiện hình học. Xét hình bên
dưới của đồ thị 𝑓(𝑥) = 𝑥 với giá trị 𝑥 nằm giữa [0, 5].

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))

sympy.plot(f, abs(x), -abs(x),(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.

Giới thiệu hàm eval trong Python


Hàm eval trong Python có chức năng ước tính một biểu thức số học cho một chuỗi. Như các dạng
bảng tính Excel, biểu thức sẽ được tính toán theo các giá trị nhập. Ví dụ:
>>> chuoitinhtoan = "a*b+c"
>>> a = 2
>>> b = 5
>>> c = 8
>>> eval(chuoitinhtoan)

Giới thiệu hàm subs trong Sympy


Mạnh mẽ hơn hàm eval() trong Python, hàm subs() của Sympy không những vừa thay thế các biến
để tính toán vừa có khả năng thực hiện tính toán hình thức. Chúng ta xét thực hành minh họa về
hàm subs như sau:
>>> import sympy
>>> x = Symbol('x')
>>> y = Symbol('y')
>>> bieuthuc = x+y
>>> thaytheso = bieuthuc.subs({x:10, y:5})
>>> thaytheso
Rõ ràng đến đây, ta thấy được hàm subs() cũng tương tự hàm eval() khi tính toán. Và dưới đây là
một ưu điểm khác của hàm subs() trong Sympy:
>>> u = Symbol('u')
>>> v = Symbol('v')
>>> bieuthuc_theo_uv = bieuthuc.subs({x:u, y:v})
>>> bieuthuc_theo_uv
Chúng ta có thể thử nghiệm các ví dụ khác:
>>> thaythe_tinhtoan = bieuthuc.subs({x:2*u*v, y:u**2+v**2})
>>> thaythe_tinhtoan
u**2 + 2*u*v + v**2
>>> thaythe_tinhtoan.factor()
Ví dụ khác:
>>> import sympy
>>> x = Symbol('x')
>>> y = Symbol('y')
>>> bieuthuc = x + y

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ố.

Đồ thị của hàm số


Từ đồ thị của hàm số, chúng ta thấy rằng nó gồm các giá trị cực tiểu tại điểm 𝐵 trong khoảng −2 ≤
𝑥 ≤ 0. Tương tự, nó có giá trị cực đai tại điểm 𝐶 thuộc khoảng 0 ≤ 𝑥 ≤ 2. Tuy nhiên, giá trị cực
đại và cực tiểu của toàn bộ miền xác định nằm ở hai điểm được đặt tên là 𝐴 và 𝐷 tương ứng. Do
vậy, điểm 𝐵 và 𝐶 được xem như cực tri địa phương, mà cụ thể là cực tiểu địa phương (local
minimum) và cực đại địa phương (local maximum). Và điểm 𝐴 và 𝐷 được gọi là cực đại toàn cục
(global maximum) và cực tiểu toàn cục (global minimum).
Thuật ngữ cực trị (extramum, số nhiều là extrama) đề cập đến những điểm là cực đại hoặc cực tiểu
toàn cục cũng như địa phương. Đặc điểm là: nếu 𝑥0 là cực trị của hàm 𝑓(𝑥) thì đạo hàm bậc 1 của
𝑓(𝑥) tại 𝑥0 sẽ bị triệt tiêu (vanish, bằng 0), nghĩa là: 𝑓 ′ (𝑥0 ) = 0.
Điều này có nghĩa là để tìm được các điểm cực trị, chúng ta phải giải phương trình 𝑓 ′ (𝑥) = 0.
Lưu ý: để giải phương trình, Sympy hỗ trợ lệnh solve(phương trình).
Chúng ta thực hiện các lệnh sau:
>>> from sympy import Symbol, solve, Derivative
>>> x = Symbol('x')
>>> f = x**5-30*x**3+50*x
>>> d1 = Derivative(f, x).doit()
Với các lệnh trên, chúng ta tính được đạo hàm bậc 1 của hàm 𝑓 là 𝑑1. Từ đó, giải phương trình
𝑑1 = 0 để tìm tập hợp các điểm cực trị. Các lệnh tiếp theo như sau:
>>> d1 = Derivative(f, x).doit()
>>> cuctri = solve(d1)
Sau đó, chúng ta lần lượt lấy các giá trị của nó gán vào các biến A, B, C, D tương ứng với 4 nghiệm:
8
Giả i tích – PPT cho TTNT 2024
>>> A = cuctri[0] # nghia la gia tri -sqrt(-sqrt(71) + 9)
>>> A = cuctri[2] # nghia la gia tri -sqrt(sqrt(71) + 9)
>>> B = cuctri[0] # nghia la gia tri -sqrt(-sqrt(71) + 9)
>>> C = cuctri[1] # nghia la gia tri sqrt(-sqrt(71) + 9)
>>> D = cuctri[3] # nghia la gia tri sqrt(sqrt(71) + 9)
Khi này, chúng ta có thể tính toán để xác định giá trị cực đại và cực tiểu cũng như địa phương và
toàn cục. Điều này được xử lý bằng việc kiểm đạo hàm cấp 2 (second derivative test). Chúng ta thực
hiện như sau:
>>> d2 = Derivative(d1, x, 2).doit()
Và sau đó, chúng ta có thể tìm lại các giá trị cực tiêu hoặc cực đại bằng biểu thức thay thế (subs) và
tính toán (sử dụng hàm evalf) như sau:
>>> d2.subs({x:B}).evalf()
>>> d2.subs({x:C}).evalf()
>>> d2.subs({x:A}).evalf()
>>> d2.subs({x:D}).evalf()
Giá trị cực đại sẽ có đạo hàm cấp 2 âm. Trong khi đó, giá trị cực tiểu sẽ có đạo hàm cấp 2 dương.
Ngoài ra, chúng ta phải tìm giá trị tại 2 biên x_min = -5 và x_max= 5 để tìm giá trị cực trị toàn cục
và cục bộ. Chúng ta tính toán như sau:
>>> x_min = -5
>>> x_max = 5
>>> f.subs({x:A}).evalf()
>>> f.subs({x:C}).evalf()
>>> f.subs({x:x_min}).evalf()
>>> f.subs({x:x_max}).evalf()
Tương tự với 2 điểm cực tiểu B và D, chúng ta cũng tính toán các giá trị:
>>> f.subs({x:B}).evalf()
>>> f.subs({x:D}).evalf()
>>> f.subs({x:x_min}).evalf()
>>> f.subs({x:x_max}).evalf()
Từ những giá trị trên, chúng ta có thể xác định giá trị nhỏ nhất tương ứng với cực tiểu toàn cục và
điểm cực tiểu cục bộ. Phương pháp tìm giá trị cực trị, cụ thể hơn là tìm cực đại và cực tiểu chỉ áp
dụng được đối với các hàm có đạo hàm cấp 2.
Với hàm như 𝑒 𝑥 , việc áp dụng phương pháp trên vẫn hiệu quả, chúng sẽ không có giá trị cực trị:
>>> g = sympy.E ** x
>>> g1 = Derivative(g, x)
>>> g1
>>> solve(g1)
[]

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:

Nhắc lại về các bước giải bài toán tối ưu hóa

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ị.

Ví du ̣. Tìm giá trị cực đại của hàm


𝑓(𝑥) = −𝑥 2 + 4𝑥 − 3
trên khoảng [0,4] và vẽ đồ thị hàm số 𝑓(𝑥).
Gợi ý:
Trước hết, lưu ý rằng 𝑓 ′ (𝑥) = −2𝑥 + 4 = 0 khi 𝑥 = 2 và 𝑓(2) = 1.
Tiếp theo, 𝑓(𝑥) xác định với mọi x, do đó sẽ không có cực trị nào khác.
Ngoài ra, 𝑓(0) = −3 và 𝑓(4) = −3.
Vậy, giá trị lớn nhất của hàm số 𝑓(𝑥) trên đoạn [0,4] là 𝑓(2) = 1
Giải:
>>> from sympy import Symbol, solve, Derivative
>>> x = Symbol('x')
>>> f = -x**2+4*x-3
>>> d1=Derivative(f, x).doit()
>>> cuctri = solve(d1)
>>> cuctri
[2]

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.

4.1. Phép lặp để giải phương trình


Trong tính toán, phép lặp là một phương pháp kỹ thuật để giải phương trình. Ví dụ sau liên quan
đến số gọi là Tỉ số Vàng (Golden Ratio) bằng phép lặp for trong Python. Vấn đề, chúng ta cần giải
phương trình sau:
𝑥 = √1 + 𝑥
Để giải phương trình trên, bước đầu tiên chúng ta chọn 1 nghiệm, nghiệm đó được gọi là nghiệm
ban đầu. Và tiếp tục quá trình lặp để tìm các nghiệm chính xác hơn.
Thực hành 1: Lặp để tìm nghiệm
>>> x = 3
>>> print (x)
>>> x = math.sqrt(1+x)
>>> print (x)
Sinh viên thực hiện các lệnh trên đến khi x không thay đổi và cho biết cần bao nhiêu lần thực hiện
phép gán: x = sqrt(x)? Chúng ta có thể thử viết lệnh lặp để giải như sau:
>>> import math
>>> x = 3
>>> lap = 1
>>> while (x != math.sqrt(x+1)):
x = math.sqrt(x+1)
lap = lap + 1
>>> x
>>> lap

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)

4.2. Các tiêu chuẩn đo khoảng cách (distance)


Từ việc xác định các lân cận và trên tiêu chuẩn không gian liên tục, nếu có 2 điểm 𝐴(𝑥𝐴 , 𝑦𝐴 ) và
𝐵(𝑥𝐵 , 𝑦𝐵 ) thì khoảng cách 𝑑(𝐴, 𝐵) của 2 điểm 𝐴 và 𝐵 được xác định theo cách tiêu chuẩn sau:
- Với không gian Euclide:
2
𝑑(𝐴, 𝐵) = √(𝑥𝐴 − 𝑥𝐵 )2 + (𝑦𝐴 − 𝑦𝐵 )2
- Với lân cận 4, đây thực sự giống như là khoảng cách các khối nhà hình bàn cờ (hay còn gọi
là khoảng cách Mahattan):
𝑑(𝐴, 𝐵) = |𝑥𝐴 − 𝑥𝐵 | + |𝑦𝐴 − 𝑦𝐵 |
- Với lân cận 8: 𝑑(𝐴, 𝐵) = max⁡(|𝑥𝐴 − 𝑥𝐵 |, |𝑦𝐴 − 𝑦𝐵 |).

̣ vô cùng lớn dominant


4.3. Khái niêm
Ví du ̣: 𝑛2 ≫ 𝑛 khi 𝑛 tiến về vô cùng. Khi đó, nếu trong biểu thức có 2 đại lượng 𝛼𝑛2 + 𝛽𝑛 thì đại
lượng vô cùng lớn so với đại lượng còn lại chính là 𝛼𝑛2 . Hàm dominant trong gói
sympy.series.limitseq. Hàm dominant trả về None khi các biểu thức bằng nhau.
Minh họa:
>>> from sympy import series
>>> from sympy import Sum
>>> from sympy.series.limitseq import dominant
>>> from sympy.abc import n,k
>>> dominant(n**3+100*n**2+200*n+1, n)
>>> dominant(2**n + Sum(k, (k,0,n)), n)
>>> dominant(n**2 + Sum(k, (k,0,n)), n)
>>> dominant(2*n**2 + Sum(k, (k,0,n)), n)
>>> dominant(n**3 + Sum(k, (k,0,n)), n)
>>> dominant(n*3 + Sum(k, (k,0,n)), n)
>>> dominant(2*n*3 + Sum(k, (k,0,n)), n)
>>> dominant(2*n**3 + Sum(k, (k,0,n)), n)
2𝑚 1
Sinh viên hãy tính giới hạn: lim (∑𝑛𝑘=1 𝑘 2 ∑𝑘𝑚=𝑙 ) × 2𝑛𝑛
𝑛→∞ 𝑚

>>> from sympy.abc import n, k, m


>>> limit_seq(Sum(k**2 * Sum(2**m/m,(m,1,k)),(k,1,n))/(2**n*n), n)

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:

5.1. Chương trình tổng quát về Gradient Ascent


Chúng ta sẽ sửa đổi chương trình một ít để chương trình thành chương trình tổng quát về tính toán
Gradient Ascent.
from sympy import Derivative, Symbol, sympify
def grad_ascent(x0, ham_f1x, x):
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
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)
print('{0}: {1}'.format(var.name, var_max))
print('Maximum value: {0}'.format(f.subs({var:var_max})))
Lưu tập tin và thực hiện thử nghiệm:
- Nhập hàm: 25*25*sin(2*theta)/9.8
- Nhập biến có tên là: theta
- Giá trị khởi đầu là: 0.001

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:

Nhap ham 1 bien (f): cos(t)


Nhap ten bien tuong ung (x): t
Nhap gia tri khoi dau cho bien x: 0.01
 Thử nghiệm 2:

Nhap ham 1 bien (f): cos(t)+p


Nhap ten bien tuong ung (x): t
Nhap gia tri khoi dau cho bien x: 0.01

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:

Nhap ham 1 bien (f): x**5-30*x**3+50*x


Nhap ten bien tuong ung (x): x
Nhap gia tri khoi dau cho bien x: -2
Chương trình dừng khi tìm ra vị trí đỉnh gần nhất (closest peak) nhưng không phải lúc nào cũng là
giá trị cực đại toàn cục. Trong trường hợp này, chúng ta chọn giá trị khởi đầu là -2 và nó dừng lại ở
đỉnh tương ứng với giá trị cực đại toàn cục (khoảng 706). Xét ví trường hợp tiếp theo với giá trị
khởi đầu khác:
 Giá trị bắt đầu là 0.5:

Nhap ham 1 bien (f): x**5-30*x**3+50*x


Nhap ten bien tuong ung (x): x
Nhap gia tri khoi dau cho bien x: 0.5
Trong trường hợp này, giá trị cực đại thuật toán gradient ascent tìm được không phải là giá trị lớn
nhất của hàm số. Hình dưới đây sẽ cho thấy kết quả của thuật toán gradient ascent cho cả hai trường
hợp bên trên:

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):

Kỹ thuật giải các bài toán nhân tử Lagrange:


Bước 1: Thêm một biến nhân tử Lagrange 𝜆 và định nghĩa một hàm Lagrangian ℒ như sau:
ℒ(𝑋, 𝜆) = 𝑓(𝑋) − 𝜆(𝑔(𝑋) − 𝑐)⁡
Với 𝑋 là vector đại diện do hàm có thể nhiều biến, nên 𝑋 có thể là bộ (𝑥, 𝑦, 𝑧, … )
Bước 2: Giải đạo hàm của ℒ(𝑋, 𝜆), nghĩa là ∇ℒ(𝑋, 𝜆) = 0. Bản chất của phương trình là:
∇f(X) = 𝜆∇g(x)
{
𝑔(𝑋) = 𝑐
Vì khi lấy đạo hàm thỏa điều kiện cực trị, nghĩa là phương trình ∇ℒ(𝑋, 𝜆) = 0 sẽ là hệ:

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)

b) Bài toán bán phở.


Hai người bạn mở quán bán phở trong một khu dân cư. Hai loại phở bán ra là bát/tô thường và bát/tô
đặc biệt có vốn lần lượt là 40k (nghĩa là 40 nghìn đồng) và 60k mỗi bát/tô. Một luận văn về nghiên
cứu thị trường của một chị sinh viên kinh tế tìm thấy quy luật tại khu vực đó như sau: nếu gọi xk là
giá bát /tô phở thường và yk là giá bát/tô phở đặc biệt giá là yk thì thị trường sẽ có thể bán được:
- Số lượng bát/tô thường được bán: 500(y-x) tô/năm.
- Số lượng bát/tô đặc biệt được bán: 45000 + 500(x-2y) tô/năm.

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).

[Đáp án: min là 200, đa ̣t đươ ̣c khi x = 100, y = 50].

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

You might also like