Thực hành Toán cao cấp - Chương 8: Hàm nhiều biến và ứng dụng (Tiếp theo). Chương này cung cấp cho học viên những nội dung về: một số lưu ý khi sử dụng sympy; giới thiệu Solveset trong Sympy; giới thiệu các biến đổi với hàm nhiều biến; bài toán tối ưu về nhân tử Lagrange;... Mời các bạn cùng tham khảo!
Bộ mơn Khoa học Dữ liệu THỰC HÀNH TỐN CAO CẤP TÀI LIỆU PHỤC VỤ SINH VIÊN NGÀNH KHOA HỌC DỮ LIỆU Nhóm biên soạn: TS Hồng Lê Minh – Khưu Minh Cảnh – Hoàng Thị Kiều Anh – Lê Thị Ngọc Huyên – … TP.HCM – Năm 2019 Thực hành Tốn cao cấp - 2019 Trang Bộ mơn Khoa học Dữ liệu MỤC LỤC CHƯƠNG 8: HÀM NHIỀU BIẾN VÀ ỨNG DỤNG (tiếp theo) Một số lưu ý sử dụng sympy (phần 2) Giới thiệu Solveset Sympy Giới thiệu biến đổi với hàm nhiều biến Bài toán tối ưu nhân tử Lagrange BÀI TẬP CHƯƠNG 13 Thực hành Toán cao cấp - 2019 Trang Bộ môn Khoa học Dữ liệu CHƯƠNG 8: HÀM NHIỀU BIẾN VÀ ỨNG DỤNG (tiếp theo) Mục tiêu: - Bổ sung lưu ý sử dụng sympy, hàm solveset - Hàm nhiều biến - Bài toán tối ưu hóa hàm nhiều biến với nhân tử Lagrange Nội dung chính: Một số lưu ý sử dụng sympy (phần 2) Dưới số lưu ý sử dụng sympy mà người sử dụng cần biết: Để tạo danh sách (list) giá trị, gán giá trị vào dấu [ ] brackets (ví dụ: x = [1,2,3,4,5]) Để lấy giá trị thứ i list x sử dụng x[i - 1] Lưu ý điều có nghĩa truy cập đến phần tử (thứ 1) x[0],… Các liệu dạng tuples giống với kiểu lists khó sử dụng Về cách tạo giống, cần đưa phần tử vào dấu ngoặc đơn, ví dụ: x = (2,3,4) Tuy nhiên, cách sử dụng, kiểu tuple khác với list hai điểm Điểm khác biệt khơng thể cập nhật/thay đổi giá trị sau tạo chúng Điều hữu ích muốn tạo liệu mà ngăn thay đổi (cố ý vơ tình đó, ví dụ: ghi nhận thông tin thời điểm hộp đen hành trình) Thực hành 1a: Minh họa sử dụng Tuple >>> y = (3, 5, 7) >>> y (3, 5, 7) >>> y[1] >>> y[1]= ……………………………………………………………… sinh viên ghi nhận lỗi Thực hành Toán cao cấp - 2019 Trang Bộ môn Khoa học Dữ liệu Nếu muốn chia số nguyên, ý tưởng tốt nên sử dụng gói from future import division Vì sử dụng gói ngăn cản Python cắt bớt trị trả cách sử dụng lệnh floor() [tuy nhiên, phiên 3.x, dường điều không cần thiết] Thực hành 1b: >>> from future import division >>> 10/3 ……………………………………………………………… sinh viên ghi nhận giá trị Khi có phương trình giá trị (một biến), sử dụng phương thức thay subs để thay giá trị Ví dụ, ta có: x + 14 biết x = 1, thực lệnh thay sau (x + 14).subs(x, 1) để nhận giá trị 15 Thực hành 1c: >>> import sympy >>> from sympy import Symbol >>> x = Symbol('x') >>> y = x + >>> y.subs(x, 14) ……………………………………………………………… sinh viên ghi nhận giá trị Ngồi ra, sử dụng phương thức thay biến cho biểu thức Ví dụ: muốn thay biến x thành biến y biểu thức pi - 17*x, đó, Thực hành Tốn cao cấp - 2019 Trang Bộ môn Khoa học Dữ liệu thực câu lệnh sau: (pi - 17*x).subs(x, y) để tạo pi - 17*y Nếu y hàm theo x biểu thức tính tốn giá trị (và cuối thể x) Tuy nhiên, thay x biến (được khái báo) biểu thức biểu diễn theo biến (như ví dụ y bên trên) Minh họa: Thực hành 1d: >>> import sympy >>> from sympy import Symbol >>> x = Symbol('x') >>> from sympy import pi >>> z = pi - 18*x >>> z.subs(x, y) ……………………………………………………………… sinh viên ghi nhận giá trị >>> t = Symbol('t') >>> z = pi - 18*x >>> z.subs(x, t) ……………………………………………………………… sinh viên ghi nhận giá trị Giới thiệu Solveset Sympy Để giải phương trình, Sympy hỗ trợ lệnh Solve hay ấn tượng Tuy nhiên, lệnh Solve có số giới hạn sau: Lệnh Solve không quán output nhiều loại phương trình tốn học Xét ví dụ thực hành sau: Thực hành 2: >>> from sympy import solve, sin >>> x = Symbol('x') >>> y = Symbol('y') Thực hành Toán cao cấp - 2019 Trang Bộ môn Khoa học Dữ liệu >>> solve(x-1,x) # phuong trinh =1 ………………………………………………………………… sinh viên điền vào >>> solve(x**2-1,x) # phuong trinh =1 ………………………………………………………………… sinh viên điền vào >>> solve(x**2+1,x) # phuong trinh −1=0 ………………………………………………………………… sinh viên điền vào >>> solve(sin(x),x) # phuong trinh sin =0 ………………………………………………………………… sinh viên điền vào Nhiều tham số đầu vào có nhiều Nhiều tham số khơng cần làm cho người sử dụng tương đối khó để giải Trong số trường hợp, việc tìm kiếm giá trị max hàm sử dụng điểm cực trị (critical points) khơng thể đảm bảo hàm solve Từ đó, sympy hỗ trợ thêm lệnh Solveset để khắc phục số vấn đề lệnh Solve Cụ thể sau: Rõ ràng giao diện đầu vào ra! Theo đó, phải khai báo thêm ConditionSet để hỗ trợ đầu Ở đầu vào, hàm Solveset có phương trình, kể biến tham số domain giải Solveset trả nghiệm vơ tận Ví dụ: giải sin = 0, trả nghiệm 2nπ|n ∈ Z ∪ 2nπ + π|n ∈ Z Thực hành 3: Thử nghiệm solveset >>> from sympy import solveset >>> solveset(sin(x),x) ………………………………………………………………… sinh viên điền vào ………………………………………………………………… Khai báo rõ domain nghiệm Domain nghiệm miền nghiệm Trong Sympy, có miền nghiệm, mặc định nghiệm phức (domain = S.Complexes) Ví dụ: giải phương trình sau: Thực hành Tốn cao cấp - 2019 Trang Bộ mơn Khoa học Dữ liệu - Phương trình: Thực hành 4: + = >>> from sympy import solveset, S >>> from sympy.abc import x, y, z >>> solveset(x**2 + 1, x) # mac dinh la mien so phuc: domain = S.Complexes ………………………………………………………………… sinh viên điền vào >>> solveset(x**2 + 1, x, domain = S.Reals) # mien so thuc ………………………………………………………………… sinh viên điền vào - Phương trình: = : (miền thực nghiệm {0} miền phức họ nghiệm khác) Chi tiết sau: Thực hành 5: >>> from sympy import solveset, S >>> from sympy.abc import x, y, z >>> from sympy import E >>> solveset(e**x-1, x) # mac dinh la mien so phuc: domain = S.Complexes ………………………………………………………………… sinh viên điền lỗi vào >>> solveset(E**x-1, x) # mac dinh la mien so phuc: domain = S.Complexes ………………………………………………………………… sinh viên điền vào >>> solveset(E**x-1, x, domain = S.Reals) ………………………………………………………………… sinh viên điền vào - Phương trình phức hợp Ví dụ: sin + −9 =0 Phương trình có nghiệm hợp tập: −3, ∪ x|x ∈ ℝ ⋀ x + sin x = Thực hành Toán cao cấp - 2019 Trang Bộ môn Khoa học Dữ liệu Thực hành 6: >>> solveset((sin(x)+x)*(x**2-9), x, domain = S.Reals) ………………………………………………………………… sinh viên điền vào Thực hành 7: Một số thực hành khác với Solveset: >>> from sympy import exp, S >>> solveset(exp(x) > 1, x, domain = S.Reals) ………………………………………………………………… sinh viên điền vào >>> solveset(E**x > 1, x, domain = S.Reals) ………………………………………………………………… sinh viên điền vào >>> solveset(E**x > E, x, domain = S.Reals) ………………………………………………………………… sinh viên điền vào Ghi chú: domain = S.Reals sử dụng phương pháp viết tắt sau: >>> R = S.Reals >>> solveset(E**x > E, x, R) ………………………………………………………………… sinh viên điền vào Tài liệu tham khảo thêm: https://docs.sympy.org/latest/modules/solvers/solveset.html Giới thiệu biến đổi với hàm nhiều biến Phần giới thiệu tóm tắt để sinh viên biết tên loại đạo hàm hàm nhiều biến Mục tiêu nhận diện loại giá trị đầu vào đầu cho phép tính như: - Gradient: từ giá trị tính vector Divergence: từ vector tính giá trị Thực hành Tốn cao cấp - 2019 Trang Bộ môn Khoa học Dữ liệu - Circulation Vector Laplacian Trace Jacobian vector kết ma trận Hessian giá trị kết ma trận BỨC TRANH TỔNG QUAN TÓM TẮT VỀ ĐẠO HÀM CỦA HÀM SỐ (Theo http://blog.ruofeidu.com/gradient-circulation-laplacian-divergence-jacobian-hessian-trace/) Lưu ý: - Scalar hàm số thông thường Vector hàm số theo vector - Matrix ma trận hàm số Bài toán tối ưu nhân tử Lagrange 3.1.Dẫn nhập Trong ngành tối ưu hóa, phương pháp nhân tử Lagrange (đặt theo tên nhà toán học Joseph Louis Lagrange) phương pháp để tìm cực tiểu cực đại địa phương hàm số theo điều kiện giới hạn Bài toán phát biểu sau: Thực hành Toán cao cấp - 2019 Trang Bộ môn Khoa học Dữ liệu Cho hàm số ! " đa biến, với " biến vector Tìm " để hàm ! đạt cực trị theo điều kiện # " = $ với $ số Biểu diễn toán học: %& '(')* ℎ,ặ$ %'.'(')* ! " /à.# 12ộ$: # " = $ Minh họa đây, ! , = + đường màu đỏ # , = + (đường vòng tròn) với giá trị $ = (điều kiện giới hạn hiểu # , ≤ $) chiếu xuống mặt phẳng, ta có hình bên (hình mạng nguồn: khanacademy): Kỹ thuật giải toán nhân tử Lagrange: Bước 1: Thêm biến nhân tử Lagrange định nghĩa hàm Lagrangian ℒ sau: ℒ ", = ! " − # " − $ Với " vector đại diện hàm nhiều biến, nên " , 5, ), … Bước 2: Giải đạo hàm ℒ ", , nghĩa ∇ℒ ", = Bản chất phương trình là: ∇f X = 7∇g x ? ; # " =$ Vì lấy đạo hàm thỏa điều kiện cực trị, nghĩa phương trình ∇ℒ ", = hệ: Aℒ ∇f X − 7∇g X A" D ∇ℒ ", = @Aℒ B = C # " −$ A7 Thực hành Toán cao cấp - 2019 Trang 10 Bộ môn Khoa học Dữ liệu Bước 3: Dựa vào nghiệm phương trình đạo hàm trên, ta thay vào hàm ! " để tìm giá trị lớn nhỏ 3.2.Ơng chủ bán Mì Cay Ví dụ: Ơng chủ cửa hàng bán mì cay tháng 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) tiền thuế/mặt (giả định số) Biết lợi nhuận từ hai yếu tố mang lại hàm theo biến 5: E ,5 = − − Ý nghĩa hàm E , : Nếu khơng có nhân viên làm việc (tương ứng = 0) lợi nhuận (vì khơng tạo sản phẩm) Hiển nhiên, số nhân viên mang lại cho ông chủ số lợi nhuận làm việc Tuy nhiên, số nhân viên nhiều lợi nhuận thấp (được đánh giá −8 phải trả lương cho nhân viên lớn!) Ngược lại, không sử dụng vật liệu (5 = 0) lợi nhuận tạo âm số nhân viên tăng lên Việc sử dụng vật liệu nhiều (y lớn) có lợi nhuận Ngồi ra, ông chủ triệu tiền thuê mặt bằng, thuế,… để bán hàng Với ràng buộc ông chủ vay ngân hàng 50 triệu, giúp ông chủ tìm phương án chọn x y cho lợi nhuận N lớn Giải: Xét hàm ! , 5, ) = − − + I + J − K Lúc hàm ) gọi nhân tử Lagrange Hàm ! có cực trị (cụ thể cực đại sinh viên tìm hiểu khơng phải cực tiểu) khi: A! = 0, A A! = 0, A5 A! =0 A) Sau đó, giải hệ giá trị x, y tương ứng Cụ thể, Python: + Lập nhân tử Lagrange: Thực hành 8: >>> from sympy import Derivative, Symbol, solve >>> x = Symbol('x') >>> y = Symbol('y') >>> z = Symbol('z') Thực hành Tốn cao cấp - 2019 Trang 11 Bộ mơn Khoa học Dữ liệu >>> f = 4*x*y - 8*x - + z*(x+y-50) + Tính đạo hàm riêng theo biến x, y 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 phương trình), hệ phương trình ∇ℒ ", : >>> nghiem = solve([dx, dy, dz], (x,y,z)) >>> print (nghiem) ………………………………………………………… Sinh viên điền kết vào Cuối cùng, thay vào cơng thức tính, ta số tiền thuê nhân viên (x), số tiền cần để mua nhiên liệu (y) lợi lợi nhuận (tiền lời) dự kiến ơng chủ mì cay: >>> xx = nghiem[x] >>> yy = nghiem[y] >>> 4*xx*yy - 8*xx – ………………………………………………………… Sinh viên điền kết vào Hoặc: >>> ketqua = 4*nghiem[x]* nghiem[y] – 8* nghiem[x] - >>> print (ketqua) ………………………………………………………… Sinh viên điền kết vào Thực hành Tốn cao cấp - 2019 Trang 12 Bộ mơn Khoa học Dữ liệu BÀI TẬP CHƯƠNG Bài tập 1: Tìm điểm mặt phẳng hàm ! , 5, ) = cực đại + + ) = (cả , 5, ) biến dương) làm cho [Đáp án: (x,y,z)=(1,2,2)] Bài tập 2: Hai người bạn mở quán bán phở khu dân cư Hai loại phở bán bát/tô thường bát/tô đặc biệt có vốn 40k (nghĩa 40 nghìn đồng) 60k bát/tơ Một luận văn nghiên cứu thị trường chị sinh viên kinh tế tìm thấy quy luật khu vực sau: gọi xk giá bát /tô phở thường yk giá bát/tô phở đặc biệt giá yk thị trường bán được: - Số lượng bát/tô thường bán: 500(y-x) tô/năm Số lượng bát/tô đặc biệt bán: 45000 + 500(x-2y) tô/năm Hãy tìm giá bán loại tơ/bát phở để lợi nhuận cao năm [Đáp án: giá bát/tơ thường 65k; bát/tơ đặc biệt 75k] Thực hành Tốn cao cấp - 2019 Trang 13 ... Bài toán tối ưu nhân tử Lagrange BÀI TẬP CHƯƠNG 13 Thực hành Toán cao cấp - 2019 Trang Bộ môn Khoa học Dữ liệu CHƯƠNG 8: HÀM NHIỀU BIẾN VÀ ỨNG DỤNG (tiếp theo). .. MỤC LỤC CHƯƠNG 8: HÀM NHIỀU BIẾN VÀ ỨNG DỤNG (tiếp theo) Một số lưu ý sử dụng sympy (phần 2) Giới thiệu Solveset Sympy Giới thiệu biến đổi với hàm nhiều biến ... tiêu: - Bổ sung lưu ý sử dụng sympy, hàm solveset - Hàm nhiều biến - Bài tốn tối ưu hóa hàm nhiều biến với nhân tử Lagrange Nội dung chính: Một số lưu ý sử dụng sympy (phần 2) Dưới số lưu ý sử dụng