S dử ụng Python cài đặt các thuật toán trong chương 2 của học phần Gi i tích sảố: Gi i gả ần đúng nghiệm thực của phương trình.... Sử ụng Python cài đặ d t các thuật toán trong chương 3
MỤC ĐÍCH, ĐỐI TƯỢNG VÀ PH M VI NGHIÊN C U C Ạ Ứ ỦA ĐỀ TÀI
- Nghiên cứu các phương pháp tính trong học phần Giải tích số
- Nghiên cứu sơ đồ khối của các thuật toán trong học phần Giải tích s ố
- Nghiên cứu ki n th c, k ế ứ ỹthuật lập trình b ng ngôn ng Python ằ ữ
- Dựa vào các sơ đồ kh i, s d ng ngôn ng ố ử ụ ữ Python để cài đặt cho các thuật toán.
PHƯƠNG PHÁP VÀ NHIỆM V C A NGHIÊN C Ụ Ủ ỨU
- Phân tích các tính ch t cấ ủa sơ đồ kh i c a các thu t toán trong h c ph n Giố ủ ậ ọ ầ ải tích số
- Tổng h p mợ ột số ế ki n thức, kỹthuật về ngôn ng l p trình Python ữ ậ
- S d ng ngôn ng lử ụ ữ ập trình Python cài đặt các thu t toán trong h c ph n Giậ ọ ầ ải tích số
4 CẤU TRÚC VÀ CÁC KẾT QUẢ ỦA ĐỀ TÀI: C
Ngoài ph n l i mầ ờ ở đầu, k t lu n và tài li u tham khế ậ ệ ảo, đề tài được chia làm 2 chương với cấu trúc và kết qu của tả ừng chương như sau:
- Chương 1 Giới thi u v ngôn ng lệ ề ữ ập trình Python: Chương này sẽ trình bày t ng quan v ngôn ng l p trình Python và mổ ề ữ ậ ột số thư viện h ỗtrợ trong Gi i tích ả s ố
- Chương 2 Sử ụng Python cài đặ d t các thuật toán trong học phần Giải tích số: Đây là chương chứa nội dung chính của đề tài
Python được sử dụng rộng rãi trong lĩnh vực khoa học dữ liệu vì nó có cú pháp trực quan, tương đối dễ học và sử dụng Ngoài ra, Python còn có hàng trăm thư viện và Framework giúp cho vi c x lý dệ ử ữ liệu tr nên dở ễ dàng hơn nên có cộng đồng s d ng ử ụ l n M t khác, ớ ặ Giải tích s có vai trò quan tr ng trong khoa h c dố ọ ọ ữ liệu, vì nó giúp x ử lý và phân tích các dữ liệ ớu l n và ph c t p mà không th giứ ạ ể ải được b ng các công thằ ức đơn giản Do vậy, vi c nghiên c u ngôn ngệ ứ ữ Python để cài đặt cho các phương pháp trong h c ph n Gi i tích s là r t c n thi t Các k t qu cọ ầ ả ố ấ ầ ế ế ả ủa đề tài có th làm tài li u ể ệ tham kh o cho gi ng viên và sinh viên ngành khoa h c dả ả ọ ữ liệu Nó giúp cho người đọc hiểu sâu hơn về các phương pháp giải số cũng như rèn luyện được kỹ năng lập trình
Chương 1 Giới thiệu về ngôn ngữ lập trình Python
1.1 T ng quan v ngôn ng l p trình Python ổ ề ữ ậ
1.1.1 Giới thiệu v ngôn ng l p trình Python ề ữ ậ
Python là ngôn ngữ lập trình hướng đối tượng ra đời vào cuối những năm 1980 Mặc dù không nổi bật trong giới học thuật hay phổ biến như nhiều ngôn ngữ khác, Python vẫn có lượng người theo dõi đáng kể trong cộng đồng lập trình Python có thể được xem như một ngôn ngữ mới, vì nó vẫn đang được phát triển và hoàn thiện Hiện tại, Python là một ngôn ngữ tuyệt vời để phát triển các ứng dụng kỹ thuật.
Các chương trình Python không được biên dịch thành mã máy mà được chạy bởi trình thông dịch Ưu điểm lớn c a ngôn ng thông dủ ữ ịch là các chương trình có thể được ki m tra và g lể ỡ ỗi nhanh chóng, cho phép người dùng t p trung nhiậ ều hơn vào các thuật toán của chương trình và ít tập trung hơn vào bản thân chương trình Vì không cần biên d ch, liên k t và th c thi sau m i l n sị ế ự ỗ ầ ửa, các chương trình Python có thể được phát triển trong th i gian ngờ ắn hơn nhiều so với các chương trình Fortran hoặc C tương đương Về nhược điểm, các chương trình thông dịch không tạo ra các ứng dụng độc lập Do đó, một chương trình Python chỉ có thể chạy trên các máy tính đã cài đặt trình thông dịch Python
Trong môi trường học tập, Python có những ưu điểm so với một số ngôn ngữ lập trình khác là:
- Python là một phần mềm mã nguồn mở, có nghĩa là nó miễn phí
- Python có s n cho t t c các hẵ ấ ả ệ điều hành chính (Linux, Unix, Windows, Mac OS ) Một chương trình được vi t trên m t hế ộ ệ điều hành này ch y mà không ạ cần sửa đổi trên tất cả các hệ điều hành khác
- Python dễ học hơn và dễ đọc code hơn hầu h t các ngôn ng ế ữ
- Python và các phần m r ng c a nó rở ộ ủ ất dễ cài đặt
Trình thông d ch ị Python có thể được t i ả xu ng ố t ừ https://www.python.org/downloads/ Tuy nhiên để thuận tiện cho việc cài đặt môi trường sử d ng cho cho ngôn ngữ Python sử d ng b công c Anaconda là lựa ch n ụ ụ ộ ụ ọ thích h p nh t Ngoài vi c cung c p s n các ph n m m biên d ch và hợ ấ ệ ấ ẵ ầ ề ị ỗ trợ ngườ ậi l p trình trong quá trình l p trình Python, viậ ệc cài đặt các thư viện ngoài khi s d ng ử ụ Anaconda trở nên đơn giản hơn rất nhiều
Anaconda được tải xuống từ https://www.anaconda.com/
1.2.1 Một sốkiểu dữ u trong Python lõi liệ
Tương tự như các loại ngôn ngữ lập trình bậc cao khác, khi khai báo một biến bất kì trong Python, ki u d u cể ữliệ ủa nó sẽ được tự động định d ng ạ
Tên Định dạng Mô tả
Số nguyên int Chứa các số nguyên
Số thực float Chứa các số thực
Số phức complex Chứa các số phức với j là phần ảo
Kí tự str Chứa các ký tự: “hello”, ‘John’, “2022”
Danh sách list Tập hợp các phần tử được sắp xếp và có thể thay đổi
Từ điển dict Tập hợp các phần tử không được sắp xếp, có thể thay đổi và được lập chỉ mục
Tuples tup Tập hợp các phần tử được sắp xếp và không thể thay đổi
Tập hợp set Tập hợp các phần tử không được sắp xếp và không có chỉ mục Đúng sai bool Trả về giá trị True nếu đúng và False nếu sai
B ng 1 1 ả Danh sách các định dạng dữ liệu trong Python
1.2.2 Một số phép toán và hàm thông dụng
Python hỗ trợ ất cả t các phép toán s hố ọc sơ bản như cộng tr nhân chia, ngoài ra ừ còn hỗ trợ thêm các toán t gán, toán t so sánh ph c v cho toán h c Các phép toán ử ử ụ ụ ọ phức tạp hơn đòi hỏi phải sử ụng thư việ d n Math
Các phép toán số học cơ bản:
Phép toán Ký hiệu Ví dụ
B ng 1 2 Danh sách các phép toán s h ả ố ọc cơ bản trong Python
Tương tự với vòng lặp xác định, break và continue cũng có công dụng tác động vào vòng l p ặ
- Break: dùng để dừng toàn bộ quá trình chạy vòng lặp
- Continue: dùng để dừng vòng lặp hiện tại và chuyển sang vòng lặp tiếp theo Vòng lặp không xác định cũng sử dụng else tương tự như vòng lặp xác định Else sẽ được thực thi nếu như vòng lặp hoàn tất được chu trình lặp trong suốt chuỗi lặp Tuy nhiên nếu vòng lặp bị dừng giữa chừng bằng break, các câu lệnh trong else sẽ không được tiến hành
1.2.2.7 Chuyển đổi ki u dể ữ liệu
Python cung cấp các hàm chuyển đổi kiểu dữ liệu trực tiếp từ kiểu dữ liệu này sang kiểu dữ liệu khác rất hữu ích trong quá trình xử lý dữ liệu khi lập trình.
Hàm Mô tả Ví dụ int() Ép thành kiểu số nguyên age = "21" print("age =", int(age))
# age = 21 float() Ép thành kiểu số thực age = "21" print("age =", float(age))
# age = 21.0 ord() Ép ký tự thành kiểu nguyên trong bảng Unicode str = '4' print(ord(str))
#52 hex() Ép kiểu nguyên thành thập lục phân print(hex(56))
#0x38 oct() Ép kiểu nguyên thành chuỗi bát phân print(oct(56))
#0o70 tuple() Chuyển đổi thành tuple str = 'abcdefgh' print(tuple(str)) Hình 1 5 Quá trình ho ạt độ ng c a while loop trong Pytho ủ
#('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h') set() Chuyển đổi thành set str = 'abcdefgh' print(set(str))
#{'d', 'g', 'e', 'h', 'f', 'c', 'a', 'b'} list() Chuyển đổi thành list str = 'abcdefgh' print(list(str))
#['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'] dict() Chuyển đổi tuple thành từ điển tup = (( , ) ,( 'a' 1 'f', 2), ('g', 3)) print(dict(tup))
#{'a': 1, 'f': 2, 'g': 3} string() Chuyển đổi thành kiểu chuỗi tup = (( , ) ,( 'a' 1 'f', 2), ('g', 3)) print(str(tup))
#(('a', 1), ('f', 2), ('g', 3)) complex() Chuyển đổi số thực thành số phức print(complex( , 1 2))
#(1+2j) chr() Chuyển đổi số nguyên thành
ASCII tương đương print(chr(76))
B ng 1 5 Danh sách các cách ép ki u trong Python ả ể 1.2.2.8 Các hàm toán h c tích h p s n ọ ợ ẵ
Ngoài s dử ụng thư ệvi n Math, Python có m t sộ ố hàm được tích h p s n (Build-ợ ẵ in) phục vụ cho tính toán
Hàm Mô tả Ví dụ min() Tìm số nhỏ nhất print(min(5, , 10 25)) #5 max() Tìm số lớn nhất print(max(5, , 10 25)) #25 abs() Trả về giá trị tuyệt đối print(abs(- 7.25 )) #7.25 pow () Tính số mũ print(pow(4, )) 3 #64
B ng 1 6 Danh sách các hàm tích h p s ả ợ ẵn trong Python
1.2.2.9 Thao tác với các t p tin ệ
Tập tin là m t t p h p liên tộ ậ ợ ục các Byte được s dử ụng để lưu trữ ữ liệu Dữ liệu d này được tổ chức theo một định dạng cụ thể và có thể lưu trữ bất cứ th gì, từ tứ ệp văn bản đơn giản đến các chương trình thực thi ph c tứ ạp Khi máy tính x ửlý, các tệp này s ẽ được biên d ch sang dạng nh ị ịphân 0 và 1 đểđọc ghi và thực thi các chương trình Tệp tin được hình thành gồm 3 phần:
- Header: chứa metadata lưu trữ thông tin về tập tin (tên tập tin, kích thước, lo i, )ạ
- Data: Nội dung c a tủ ập tin được viết ho c biên t p bặ ậ ởi người dùng
- End of File (EOF): chứa các ký tự c biđặ ệt đánh dấu kết thúc của tập tin Đường dẫn c a tệp tin: ủ
Khi truy c p m t t p tin trên m t hậ ộ ệ ộ ệ điều hành, đường dẫn đến nó là yêu c u tầ ất y u phế ải có Đường dẫn đến t p tin là m t chu i ký tậ ộ ỗ ự đại diện cho địa ch c a t p tin ỉ ủ ệ đó, nó được cấu thành gồm 3 phần:
- Folder path: Vị trí thư mục trên hệ thống, các thư mục nhỏ được tách nhau bởi d u g ch chéo (/) ấ ạ
- File name: Tên của tệp tin
- Extension: Cuối đường d n ch ẫ ỉ định định d ng cạ ủa tập tin (.txt, csv, pdf, )
E:\PythonTeachingLab\test.txt Đóng mở tệp tin b ng Python: ằ
Khi làm vi c v i t p tin, việ ớ ệ ệc đầu tiên là m tở ệp tin đó Python sẽ ử ụ s d ng hàm open() nh n vào mậ ột đối sốlà chuỗi ký tự đường d n cẫ ủa tệp tin file = open('E:\PythonTeachingLab\test.txt')
Ý NGHĨA CỦA ĐỀ TÀI
Python được sử dụng rộng rãi trong lĩnh vực khoa học dữ liệu vì nó có cú pháp trực quan, tương đối dễ học và sử dụng Ngoài ra, Python còn có hàng trăm thư viện và Framework giúp cho vi c x lý dệ ử ữ liệu tr nên dở ễ dàng hơn nên có cộng đồng s d ng ử ụ l n M t khác, ớ ặ Giải tích s có vai trò quan tr ng trong khoa h c dố ọ ọ ữ liệu, vì nó giúp x ử lý và phân tích các dữ liệ ớu l n và ph c t p mà không th giứ ạ ể ải được b ng các công thằ ức đơn giản Do vậy, vi c nghiên c u ngôn ngệ ứ ữ Python để cài đặt cho các phương pháp trong h c ph n Gi i tích s là r t c n thi t Các k t qu cọ ầ ả ố ấ ầ ế ế ả ủa đề tài có th làm tài li u ể ệ tham kh o cho gi ng viên và sinh viên ngành khoa h c dả ả ọ ữ liệu Nó giúp cho người đọc hiểu sâu hơn về các phương pháp giải số cũng như rèn luyện được kỹ năng lập trình.
Giới thiệu về ngôn ngữ lập trình Python
T ng quan v ngôn ng l p trình Python ổ ề ữ ậ
1.1.1 Giới thiệu v ngôn ng l p trình Python ề ữ ậ
Python là m t ngôn ng lộ ữ ập trình hướng đối tượng được phát tri n vào cu i nh ng ể ố ữ năm 1980 (tên Python có nguồn gốc từ loạt phim truyền hình của Anh, MontyPython’s Flying Circus) [5] M c dù Python không n i ti ng trong gi i kặ ổ ế ớ ỹ thuật cũng như mộ ốt s ngôn ngữ khác, nhưng nó có một lượng người theo dõi đáng kể trong cộng đồng l p ậ trình Python có thể được xem như một ngôn ng m i n i, vì nó vữ ớ ổ ẫn đang được phát triển và hoàn thi n Hi n t i, nó là m t ngôn ngệ ệ ạ ộ ữ tuyệt vời để phát tri n các ng d ng ể ứ ụ k ỹthuật
Các chương trình Python được chạy bởi trình thông dịch, không phải được biên dịch thành mã máy Ưu điểm là cho phép kiểm tra và gỡ lỗi nhanh chóng, tập trung vào thuật toán chương trình hơn là bản thân chương trình Không cần liên kết hay thực thi lại sau mỗi thay đổi, giúp phát triển chương trình nhanh hơn Nhược điểm là không tạo ra ứng dụng độc lập, chỉ chạy được khi máy tính có cài đặt trình thông dịch Python.
Trong môi trường học tập, Python có những ưu điểm so với một số ngôn ngữ lập trình khác là:
- Python là một phần mềm mã nguồn mở, có nghĩa là nó miễn phí
- Python có s n cho t t c các hẵ ấ ả ệ điều hành chính (Linux, Unix, Windows, Mac OS ) Một chương trình được vi t trên m t hế ộ ệ điều hành này ch y mà không ạ cần sửa đổi trên tất cả các hệ điều hành khác
- Python dễ học hơn và dễ đọc code hơn hầu h t các ngôn ng ế ữ
- Python và các phần m r ng c a nó rở ộ ủ ất dễ cài đặt
Trình thông d ch ị Python có thể được t i ả xu ng ố t ừ https://www.python.org/downloads/ Tuy nhiên để thuận tiện cho việc cài đặt môi trường sử d ng cho cho ngôn ngữ Python sử d ng b công c Anaconda là lựa ch n ụ ụ ộ ụ ọ thích h p nh t Ngoài vi c cung c p s n các ph n m m biên d ch và hợ ấ ệ ấ ẵ ầ ề ị ỗ trợ ngườ ậi l p trình trong quá trình l p trình Python, viậ ệc cài đặt các thư viện ngoài khi s d ng ử ụ Anaconda trở nên đơn giản hơn rất nhiều
Anaconda được tải xuống từ https://www.anaconda.com/
Giớ i thi u v Python lõi ệ ề
1.2.1 Một sốkiểu dữ u trong Python lõi liệ
Tương tự như các loại ngôn ngữ lập trình bậc cao khác, khi khai báo một biến bất kì trong Python, ki u d u cể ữliệ ủa nó sẽ được tự động định d ng ạ
Tên Định dạng Mô tả
Số nguyên int Chứa các số nguyên
Số thực float Chứa các số thực
Số phức complex Chứa các số phức với j là phần ảo
Kí tự str Chứa các ký tự: “hello”, ‘John’, “2022”
Danh sách list Tập hợp các phần tử được sắp xếp và có thể thay đổi
Từ điển dict Tập hợp các phần tử không được sắp xếp, có thể thay đổi và được lập chỉ mục
Tuples tup Tập hợp các phần tử được sắp xếp và không thể thay đổi
Tập hợp set Tập hợp các phần tử không được sắp xếp và không có chỉ mục Đúng sai bool Trả về giá trị True nếu đúng và False nếu sai
B ng 1 1 ả Danh sách các định dạng dữ liệu trong Python
1.2.2 Một số phép toán và hàm thông dụng
Python hỗ trợ ất cả t các phép toán s hố ọc sơ bản như cộng tr nhân chia, ngoài ra ừ còn hỗ trợ thêm các toán t gán, toán t so sánh ph c v cho toán h c Các phép toán ử ử ụ ụ ọ phức tạp hơn đòi hỏi phải sử ụng thư việ d n Math
Các phép toán số học cơ bản:
Phép toán Ký hiệu Ví dụ
B ng 1 2 Danh sách các phép toán s h ả ố ọc cơ bản trong Python
Tương tự với vòng lặp xác định, break và continue cũng có công dụng tác động vào vòng l p ặ
- Break: dùng để dừng toàn bộ quá trình chạy vòng lặp
Vòng lặp sử dụng câu lệnh Continue để dừng vòng lặp hiện tại và chuyển sang vòng lặp tiếp theo Trong vòng lặp không xác định, cũng có thể sử dụng câu lệnh Else tương tự như vòng lặp xác định Câu lệnh Else sẽ được thực thi nếu vòng lặp hoàn thành chu trình lặp trong suốt quá trình lặp Tuy nhiên, nếu vòng lặp bị dừng giữa chừng bằng câu lệnh Break, thì các câu lệnh trong khối Else sẽ không được thực hiện.
1.2.2.7 Chuyển đổi ki u dể ữ liệu
Python định nghĩa các hàm chuyển đổi kiểu dữ liệu trực tiếp từ kiểu dữ liệu này sang kiểu d u khác thu n ti n trong quá xữliệ ậ ệ ử lý dữ u khi l p trình liệ ậ
Hàm Mô tả Ví dụ int() Ép thành kiểu số nguyên age = "21" print("age =", int(age))
# age = 21 float() Ép thành kiểu số thực age = "21" print("age =", float(age))
# age = 21.0 ord() Ép ký tự thành kiểu nguyên trong bảng Unicode str = '4' print(ord(str))
#52 hex() Ép kiểu nguyên thành thập lục phân print(hex(56))
#0x38 oct() Ép kiểu nguyên thành chuỗi bát phân print(oct(56))
#0o70 tuple() Chuyển đổi thành tuple str = 'abcdefgh' print(tuple(str)) Hình 1 5 Quá trình ho ạt độ ng c a while loop trong Pytho ủ
#('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h') set() Chuyển đổi thành set str = 'abcdefgh' print(set(str))
#{'d', 'g', 'e', 'h', 'f', 'c', 'a', 'b'} list() Chuyển đổi thành list str = 'abcdefgh' print(list(str))
#['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'] dict() Chuyển đổi tuple thành từ điển tup = (( , ) ,( 'a' 1 'f', 2), ('g', 3)) print(dict(tup))
#{'a': 1, 'f': 2, 'g': 3} string() Chuyển đổi thành kiểu chuỗi tup = (( , ) ,( 'a' 1 'f', 2), ('g', 3)) print(str(tup))
#(('a', 1), ('f', 2), ('g', 3)) complex() Chuyển đổi số thực thành số phức print(complex( , 1 2))
#(1+2j) chr() Chuyển đổi số nguyên thành
ASCII tương đương print(chr(76))
B ng 1 5 Danh sách các cách ép ki u trong Python ả ể 1.2.2.8 Các hàm toán h c tích h p s n ọ ợ ẵ
Ngoài s dử ụng thư ệvi n Math, Python có m t sộ ố hàm được tích h p s n (Build-ợ ẵ in) phục vụ cho tính toán
Hàm Mô tả Ví dụ min() Tìm số nhỏ nhất print(min(5, , 10 25)) #5 max() Tìm số lớn nhất print(max(5, , 10 25)) #25 abs() Trả về giá trị tuyệt đối print(abs(- 7.25 )) #7.25 pow () Tính số mũ print(pow(4, )) 3 #64
B ng 1 6 Danh sách các hàm tích h p s ả ợ ẵn trong Python
1.2.2.9 Thao tác với các t p tin ệ
Tập tin là m t t p h p liên tộ ậ ợ ục các Byte được s dử ụng để lưu trữ ữ liệu Dữ liệu d này được tổ chức theo một định dạng cụ thể và có thể lưu trữ bất cứ th gì, từ tứ ệp văn bản đơn giản đến các chương trình thực thi ph c tứ ạp Khi máy tính x ửlý, các tệp này s ẽ được biên d ch sang dạng nh ị ịphân 0 và 1 đểđọc ghi và thực thi các chương trình Tệp tin được hình thành gồm 3 phần:
- Header: chứa metadata lưu trữ thông tin về tập tin (tên tập tin, kích thước, lo i, )ạ
- Data: Nội dung c a tủ ập tin được viết ho c biên t p bặ ậ ởi người dùng
- End of File (EOF): chứa các ký tự c biđặ ệt đánh dấu kết thúc của tập tin Đường dẫn c a tệp tin: ủ
Khi truy c p m t t p tin trên m t hậ ộ ệ ộ ệ điều hành, đường dẫn đến nó là yêu c u tầ ất y u phế ải có Đường dẫn đến t p tin là m t chu i ký tậ ộ ỗ ự đại diện cho địa ch c a t p tin ỉ ủ ệ đó, nó được cấu thành gồm 3 phần:
- Folder path: Vị trí thư mục trên hệ thống, các thư mục nhỏ được tách nhau bởi d u g ch chéo (/) ấ ạ
- File name: Tên của tệp tin
- Extension: Cuối đường d n ch ẫ ỉ định định d ng cạ ủa tập tin (.txt, csv, pdf, )
E:\PythonTeachingLab\test.txt Đóng mở tệp tin b ng Python: ằ
Khi làm vi c v i t p tin, việ ớ ệ ệc đầu tiên là m tở ệp tin đó Python sẽ ử ụ s d ng hàm open() nh n vào mậ ột đối sốlà chuỗi ký tự đường d n cẫ ủa tệp tin file = open('E:\PythonTeachingLab\test.txt')
Việc quan tr ng b t bu c ph i nh sau khi m m t tọ ắ ộ ả ớ ở ộ ệp tin là đóng tệp tin đó lại Trong nhiều trường h p, khi h y b m t câu l nh hay mợ ủ ỏ ộ ệ ột chương trình, tệp tin s t ẽ ự động đóng lại, tuy nhiên chúng ta không xác định chắc chắn được điều này sẽ xảy ra
Để đảm bảo an toàn, tránh xảy ra các trường hợp ngoài ý muốn, chúng ta phải chắc chắn rằng tệp tin sẽ được đóng lại bằng khối lệnh try-finally.
# kh i l nh x ố ệ ử lý finally: reader.close()
Một cách khác để đả m b o tả ệp tin được đóng hoàn toàn là sử ụ d ng câu l nh with: ệ with open('E:\PythonTeachingLab\test.txt') as reader:
With s tẽ ự động đóng tập tin đang sử ụng khi chương trình thoát khỏ d i kh i l nh ố ệ x ửlý có trong nó
Ngoài ra có th s d ng thêm mể ử ụ ột đố ố thứ hai đểi s quyết định cách tệp tin được m (mode): ở with open('E:\PythonTeachingLab\test.txt','r') as reader:
Có nhiều l a ch n khác nhau cho mode khi m mự ọ ở ột tệp tin:
- ‘r’: mở để đọc tệp tin (mặc định)
- ‘w’: mở ghi t p tin (t p s b để ệ ệ ẽ ị ghi đè)
- ‘rb’ hoặc ‘wb’: mở dưới dạng nhị phân (đọc và ghi dướ ạng byte) i d Đọc và ghi tệp tin b ng Python: ằ
Có ba phương pháp đọc nội dung tệp tin có thể dùng trên Python:
- read(size=-1): nếu không có đối s truy n vào ho c truy n vào -1, t p tin s ố ề ặ ề ệ ẽ được đọc toàn bộ
- readline(size=-1): đọc t ng dòng v i sừ ớ ố lượng ký tự là đối số truyền vào Nó đọc hết dòng r i quay tr lồ ở ại ban đầu Nếu không có đối số truyền vào hoặc truyền vào là -1 thì c dòng s ả ẽ được đọc.
- readlines(): đọc tất cả các dòng chưa đọc trong tệp tin rồi g i vử ề dưới dạng list
Có 2 phương pháp để ghi t p tin b ng Python: ệ ằ
- write(): ghi m t chu i ký t vào t p tin ộ ỗ ự ệ
- writelines(): ghi các chu i ký t vào tỗ ự ệp tin, người dùng ph i t thêm các ký ả ự hi u k t thúc vào cu i mệ ế ố ỗi chuỗi
Khi một lỗi xảy ra trong quá trình thực thi một chương trình, một ngoại lệ được đưa ra và chương trình sẽ dừng lại Để xử lý các trường hợp ngoại lệ, câu lệnh try except được sử dụng: try:
except error:
# Ch y n u kh ạ ế ối lệ nh th ực thi x y ra l ả ỗi
else:
# Chạy khi không xảy ra lỗi
finally:
# chạy khi hoàn t ất quá trình dù lỗ i hay không
- try: khối lệnh cho phép thực thi thử
- except: khối lệnh giúp x ửlý khi lỗi xảy ra
- else: khối lệnh th c thi khi không x y ra l i ự ả ỗ
- finally: khối lệnh th c thi sau khi quá trình ch y th hoàn t t ự ạ ử ấ
ERROR là tên c a m t ngo i l Python tích h p s n (built-in Python exception) ủ ộ ạ ệ ợ ẵ Nếu error ngo i l không g p, kh i các l nh trong khạ ệ ặ ố ệ ối try được thực thi, ngượ ạc l i các l nh trong khệ ối EXCEPT được th c thi T t c các ngo i l có thự ấ ả ạ ệ ể được phát hi n b ng ệ ằ cách bỏ qua ERROR khỏi câu lệnh EXCEPT
Hàm là một khối lệnh chỉ được thực thi khi gọi đến nó Người dùng có thể truyền dữ liệu vào hàm thông qua các tham số và hàm cũng có thể trả về các kết quả mà nó xử lý thành công
Khai báo một hàm sử dụng def: def ():
Để thực thi hàm, ta cần gọi đúng tên của hàm đã được khai báo
Ví dụ 1: def my_function(): print( "Đây là hàm" ) my_function()
Truyền dữ liệu vào hàm thông qua tham số
Ví dụ 2: def my_function(ho, ten): print(ho + " " + ten) my_function("Smith", "John")
Hàm với tham số mặc định
Ví dụ 3: def my_function(ho = "Smith" , ten = "John"): print(ho + " " + ten) my_function()
Sử ụng Python cài đặ d t các thu t toán trong h c ph n Gi i tích s ậ ọ ầ ả ố
Giớ i thi u v ệ ề giả i tích s ố
Giải tích s là m t nhánh c a toán h c giúp gi i các bài toán mà không thố ộ ủ ọ ả ể tìm đượ ờc l i giải chính xác bằng các công c toán hụ ọc thông thường Giải tích s dựa trên ố vi c x p xệ ấ ỉ các đại lượng liên t c bụ ằng các đại lượng r i r c và s d ng các thu t toán ờ ạ ử ụ ậ để tính toán các kết quả gần đúng Giải tích số có nhiều ứng dụng trong các lĩnh vực như khoa học máy tính, kỹ thuật, vật lý, hóa học, sinh học, tài chính, v.v Gi i tích s ả ố bao g m nhi u chồ ề ủ đề khác nhau, như phương pháp tìm nghiệm của phương trình, phương pháp giải hệ phương trình tuyến tính và phi tuyến, phương pháp nội suy và ngoại suy, phương pháp tích phân và vi phân số, phương pháp giải phương trình vi phân thường và vi phân riêng biệt, v.v Mỗi phương pháp đều có những ưu và nhược điểm riêng, cũng như những điều kiện áp dụng khác nhau Để sử dụng hiệu quả các phương pháp tính, người ta cần biết cách lựa chọn và thiết kế các thuật toán thích hợp cho t ng bài toán cừ ụ thể Ngoài ra, người ta cũng cần đánh giá được sai số và độ ổn định c a các kết quả gủ ần đúng Giải tích số là một lĩnh vực đang phát triển liên tục và có nhi u thách th c m i Nó yêu cề ứ ớ ầu người h c có ki n th c n n t ng v ng ch c v ọ ế ứ ề ả ữ ắ ề giải tích, đạ ố tuyếi s n tính và l p trình Gi i tích s là m t công c quan tr ng và hậ ả ố ộ ụ ọ ữu ích cho vi c mô hình hóa và gi i quy t các bài toán th c t trong nhi u ngành khoa hệ ả ế ự ế ề ọc k ỹthuật
Giải tích s có vai trò quan tr ng trong khoa h c dố ọ ọ ữ liệu, vì nó giúp x lý và phân ử tích các dữ liệ ớu l n và ph c t p mà không th giứ ạ ể ải được b ng các công thằ ức đơn giản Giải tích số cũng giúp tạo ra các mô hình và d báo t các dự ừ ữ liệu, cũng như kiểm tra và đánh giá các giả thuyết khoa học Một số ứng dụng của giải tích số trong khoa học d u là ữliệ
▪ Trong máy h c, gi i tích s giúp tọ ả ố ối ưu hóa các hàm mất mát, hu n luy n các ấ ệ mô hình như mạng nơ-ron, phân loại và phân cụm dữ liệu, v.v.;
▪ Trong th ng kê, gi i tích số ả ố giúp ước lượng các tham s , kiố ểm định các gi ả thuyết, tính toán các xác su t và kho ng tin c y, v.v.; ấ ả ậ
▪ Trong trí tu nhân t o, gi i tích s giúp gi i quy t các bài toán tìm ki m, l p k ệ ạ ả ố ả ế ế ậ ế hoạch, suy luận logic, học tăng cường, v.v
Giải tích số trong chương trình đào tạo đại học ngành Khoa học dữ liệu tại Đại học Kinh tế-Kỹ thuật Công nghiệp bao gồm sáu chương Chương 1 giới thiệu tổng quan về sai số Năm chương còn lại đề cập đến năm lĩnh vực cụ thể trong toán học tính toán Mục đích của việc sử dụng ngôn ngữ lập trình Python cài đặt các thuật toán trong các chương 2, 3, 4, 5, 6 của học phần Giải tích số là giúp sinh viên rèn luyện kỹ năng lập trình và hiểu các thuật toán toán học này một cách sâu sắc hơn.
S d ử ụng Python cài đặ t các thu ật toán trong chương 2 của học phần Gi i tích sả ố: Gi i g ả ần đúng nghiệ m thực c ủa phương trình
Giải tích số: Giả ần đúng nghiệi g m th c cự ủa phương trình
Chương 2 học phần Giải tích số đề cập đến việc xấp xỉ nghiệm thực cho phương trình, đây là cơ sở để giải quyết nhiều bài toán trong kinh tế và kỹ thuật Hầu hết các phương trình đều không có công thức giải tích để tính nghiệm đúng Hơn nữa, ngay cả khi một vài phương trình có công thức tính nghiệm đúng thì quá trình tính toán các công th c này s phát sinh sai s do quy tròn ho c do tính toán nên k t quứ ẽ ố ặ ế ả cuối cùng s là giá tr gẽ ị ần đúng của nghi m Do v y, vi c xây d ng thuệ ậ ệ ự ật toán để tính nghi m gệ ần đúng cho mỗi phương trình là rất cần thiết
Các phương pháp xấp xỉ nghiệm cho phương trình được chia làm 2 lớp là các phương pháp khoảng và các phương pháp mở Nếu đã biết một khoảng chứa nghiệm của phương trình thì các phương pháp khoảng sẽ tìm được khoảng con đủ nhỏchứa nghiệm Các phương pháp khoảng được gi i thiớ ệu trong chương trình Giải tích số là phương pháp Tìm kiếm gia tăng và phương pháp Chia đôi Các phương pháp khoảng có ưu điểm đơn giản nhưng độ chính các và tính ổn định không cao Do vậy, các phương pháp khoảng thường được sử dụng để ải sơ bộ gi cho bài toán tìm nghiệm xấp xỉ cho phương trình để tìm khoảng đủ nh mà hàm sỏ ố thoả mãn m t vài tính ch t c n ộ ấ ầ thiết Khi đó, các phương mở sẽ tiếp t c th c hi n ph n vi c còn lụ ự ệ ầ ệ ại Các phương pháp mở là nhóm các phương pháp tận dụng dáng điệu của đường cong để đưa ra công thức l p x p x nghi m cho h p lý Do v y, n u so vặ ấ ỉ ệ ợ ậ ế ới các phương pháp khoảng thì các phương pháp mở có độ chính xác cao hơn Ba phương pháp mở được giới thiệu trong chương trình là phương pháp Dây cung, phương pháp Tiếp tuyến và phương pháp Lặp đơn
2.2.1 S dử ụng Python để cài đặt cho phương pháp tìm kiếm gia tăng
𝑓(𝑥) = 0,𝑥 ∈ 𝑎,[ 𝑏]. Giả sử ta biết phương trình có nghiệm 𝛼 ∈[𝑎,𝑏]nhưng độ dài đoạn [𝑎,𝑏]chưa đủ nhỏ Phương pháp Tìm kiếm gia tăng sẽ giúp tìm một đoạn con có chiều dài đủ nhỏ Δ 𝑥 của [𝑎,𝑏] chứa nghiệm của phương trình Các bước được thực hiện như sau:
Phương pháp Tìm kiếm gia tăng
1 Nếu 𝑥2>𝑏 Thuật toán dừng (vì kho ng tìm kiếm vượt ra ngoài [𝑎,ả 𝑏])
2 Nếu 𝑥2≤𝑏 Tính 𝑓(𝑥 1 )𝑓(𝑥 2 ) a Nếu 𝑓(𝑥 1 ) (𝑓 𝑥2) ≤ 0thì dừng thu t toán Kậ ết luận 𝛼 ∈[𝑥1,𝑥2] b Nếu 𝑓(𝑥 1 ) (𝑓 𝑥2) > 0 thì 𝑥1≔ 𝑥2và quay lại Bước 1
Hàm trong chương trình sau thực hiện tìm khoảng [𝑥 1 ,𝑥 2 ] với các tham số đầu vào là hàm 𝑓(𝑥), cận dưới, c n trên ậ 𝑎,𝑏 và s gia ố 𝑑𝑥
Searches the interval (a,b) in increments dx for the bounds (x1,x2) of the smallest root of f(x)
Returns x1 = x2 = None if no roots were detected
''' from numpy import sign def rootsearch(f,a,b,dx): x1 a; f1 f(a) = = x2 a dx; f2 f(x2) = + = while sign(f1) == sign(f2): x1 if >= b: return None None , x1 x2; f1 f2 = = x2 x1 dx; f2 f(x2) = + = else: return x1,x2
Ví dụ: Sử dụng tìm kiếm gia tăng với Δ = 0.2 𝑥 , tìm khoản chứa 0-điểm dương nhỏ nhất của 𝑓(𝑥) =𝑥 3 − 10𝑥 2 + 5 Đinh nghĩa hàm 𝑓 và truyền tham số vào rootsearch(f,a,b,dx)
3 def (x): f return x **3 - 10.0* **2 + x 5.0 x1,x2 = rootsearch(f, 0.0 100.0 0.2) , , print( 'Khoang chua nghiem =[' ,x1, ',',x2,']')
Phương pháp tìm kiếm gia tăng có ưu điểm đơn giản nhưng độ chính xác thấp vì có sai số không quá Δ𝑥 Nếu Δ𝑥lớn thì sai số sẽ lớn và có thể bỏ sót nghiệm Ngược lại, nếu Δ𝑥 nhỏ thìquá trình tìm kiếm sẽ tốn nhiều thời gian Phương pháp Chia đôi được trình bày sau đây sẽ có độ chính xác và hiệu quả cao hơn
2.2.2 S dử ụng Python để cài đặt cho phương pháp chia đôi
𝑓(𝑥) = 0,𝑥 ∈ 𝑎,[ 𝑏] Giả sử phương trình có nghi m ệ 𝛼 ∈[𝑎,𝑏] nhưng độ dài đoạn [𝑎,𝑏] chưa đủ nhỏ Phương pháp chia đôi sẽ giúp tìm khoảng con của [𝑎,𝑏] có chứa nghiệm bằng cách lặp l i viạ ệc chia đôi liên tiếp kho ng ch a nghiả ứ ệm đã biết Sau m i l n lỗ ầ ặp, độ dài của kho ng ch a nghi m s giả ứ ệ ẽ ảm đi một n a Quá trình l p s d ng lử ặ ẽ ừ ại đến khi tìm được đoạn con đủ nhỏ Thường thì quá trình lặp sẽ dừng sau khi tìm được khoảng con có độ dài nhỏ hơn sai số cho trước (ký hi u ệ 𝜀, hoặc tol) Quá trình tính toán cụ thể được minh hoạ bằng thuật toán sau
1 N u ế 𝐸𝑟𝑟≤𝑡𝑜𝑙: Dừng thuật toán Kết luận nghiệm xấp xỉ (𝑥1+𝑥2)/2
2 Ngược lại: Quay lại Bước 1
Hàm bisection(f,x1,x2,switch=0,tol=1.0e-9)cho nghi m x p x ệ ấ ỉ bằng phương pháp chia đôi với 𝑓,𝑥1,𝑥2là hàm và các tham số cho trước Sai số tol mặc định là 10 −9 Switch = 1 nếu không tìm được nghiệm
Finds a root of f(x) = 0 by bisection
The root must be bracketed in (x1,x2)
Setting switch = 1 returns root = None if f(x) increases upon bisection
27 import math import error from numpy import sign def bisection(f,x1,x2,switch ,tol =1 =1.0e-9 ): f1 f(x1) = f1 if == 0.0 : return x1 f2 f(x2) = f2 if == 0.0 : return x2 sign(f1) if == sign(f2): error.err('Root is not bracketed') n = int(math ceil(math log( abs(x2 x1) tol) math log( - / / 2.0 ))) for i in range (n): x3 = 0.5* (x1 x2); f3 + = f(x3)
(switch if == 1 ) and ( abs (f3) > abs (f1)) \ and ( abs (f3) > abs (f2)): return None f3 if == 0.0 : return x3 if sign(f2)!= sign(f3): x1 x3; f1 f3 = = else : x2 x3; f2 f3 = = return (x1 x2) + /2.0
Do m i l n lỗ ầ ặp độ dài đoạn ch a nghi m sứ ệ ẽ giảm m t n a nên sau ộ ử 𝑛 lần lặp thì độ dài đoạn chứa nghiệm sẽ giảm 2 𝑛 lần so với độ dài đoạn [𝑎,𝑏] ban đầu Do đó, ta có sai số tuyệt đối của phương pháp được tính bởi
2 𝑛 Phương pháp ây cung có độ chính xác thấp nhưng rất ổn định và thực hiện tính D toán mà không yêu cầu điều kiện về hàm số Do vậy, phương pháp chia đôi thường được áp dụng để xấp xỉ nghiệm khi ta chưa có nhiều thông tin về dáng điệu của hàm số hoặc thực hiện bước giải sơ bộ Tức là tìm khoảng con đủ nhỏ để hàm số thoả mãn một số điều kiện mà các phương pháp chính xác cao yêu cầu
2.2.3 S dử ụng Python để cài đặt cho phương pháp dây cung Để có được công thức xấp x nghiệm có độ chính xác cao, các phương pháp phải ỉ t n dậ ụng dáng điệu c a hàm ủ 𝑓(𝑥) để đưa ra công thức lặp cho phù hợp Các phương pháp này được gọi là các phương pháp mở Chương trình Giải tích số giới thiệu ba phương pháp mở là phương pháp dây cung, phương pháp tiếp tuyến và phương pháp lặp đơn Trong ba phương pháp này, phương pháp dây cung và phương pháp tiếp tuyến sẽ hội tụ nếu phương trình thoả mãn hai giả thiết sau:
Các giả thiết (gt1) và (gt2) là các điều kiện tương đối chặt cho mỗi bài toán trong thực tế Để giải quyết vấn đề này, các phương pháp khoảng được sử dụng kết hợp với các phương pháp mở Quá trình giải thường sẽ được chia thành hai giai đoạn liên tiếp Giai đoạn đầu thực hiện giải sơ bộ bằng các phương pháp khoảng để tìm được khoảng chứa nghiệm đủ nhỏ mà các (gt1) và (gt2) thỏa mãn Giai đoạn tiếp theo sẽ sử dụng các phương pháp mở để xấp xỉ nghiệm cho phương trình với độ chính xác cao Mục này sẽ trình bày phương pháp dây cung xấp xỉ nghiệm cho phương trình cũng như chương trình Python cài đặt cho thuật toán
Giả sử phương trình thoả mãn (gt1) và (gt2) với 𝑓 ′ (𝑥) > 0,𝑓 ′′ ( ) > 0,∀𝑥 ∈𝑥 [𝑎,𝑏] (minh hoạ như Hình 2.1) Ta th y nghiấ ệm 𝛼 của phương trình là giao của cung AB với
Ox Ý tưởng của phương pháp dây cung là nghiệm đúng , là giao của dây cung Ab, sẽ 𝛼 được xấp xỉ bởi 𝑥 1 là giao của dây cung AB Do dây cung AB là đường thẳng là đa thức bậc nhất nên việc tìm 𝑥 1 s dẽ ễ hơn rất nhi u so v i vi c tìm ề ớ ệ 𝛼 Cụ thể, với 𝑥 0 =𝑎 ta có
Quá trình tương tự sẽ được thực hiện lặp lại để thu được các nghiệm xấp xỉ tốt hơn Một số bước lặp được minh họa trong Hình 2.1
Quá trình lặp trong trường hợp đang xét thì điểm 𝐵 không thay đổi, tuy nhiên một số trường hợp khác thì điểm A sẽ không thay đổi Do vậy, trước khi thực hiện lặp, tại bước khởi tạo ta cần xác định điểm cố định 𝑥𝐹𝑖𝑥và giá trị bắt đầu Để dãy nghiệm 𝑥 0 xấp xỉ 𝑥 0 ,𝑥 1 , … ngày càng gần 𝛼 (dãy {𝑥𝑛} hội tụ về 𝛼) thì dãy điểm này phải nằm
Hình 2 1 Hình minh họa phương pháp dây cung
Để tìm điểm cực tiểu (m) nằm trên trục Ox, hàm số phải lõm tại điểm m Từ đó suy ra tung độ điểm m phải cùng dấu với đạo hàm cấp hai của hàm số tại m, tức là f(m)f′′(m) > 0 Ta sẽ kiểm tra điều kiện này để xác định điểm m từ hai giá trị a và b Giá trị còn lại sẽ được gán với giá trị ban đầu.
1 N u ế 𝐸𝑟𝑟≤𝑡𝑜𝑙: Dừng thuật toán Nghiệm xấp xỉ 𝑥 1
2 Ngược lại: 𝑥 ≔ 𝑥0 1, quay lại Bước 2
Sai s cố ủa phương pháp dây cung sau 𝑛lần lặp được xác định ởi công thứcb
Tức là, sai số tuyệt đối của bước lặp thứ 𝑛 được tính bằng tích của một hằng số (𝑀−𝑚)/𝑚 với độ chênh về vòng lặp trước Tuy nhiên, việc nhân với hằng số (𝑀−𝑚)/𝑚 không ảnh hưởng nhiều đến công thức đánh giá sai số nên thường được bỏ đi cho đơn giản trong quá trình chạy số Khi đó, sai số sẽ được đánh giá bởi độ chênh giữa hai lần lặp liên tiếp |𝑥 1 −𝑥0| và thuật toán sẽ dừng khi độ chênh này nhỏ hơn sai số cho phép.
Sử ụng Python cài đặ d t các thu ật toán trong chương 3 của học phần Gi i tích sả ố: Gi i h ả ệ phương trình đại số tuyến tính
Giải tích số: Giả ệ phương trình đạ ối h i s tuyến tính
Tuyến tính hóa là một khái niệm quan trọng trong toán học Về cơ bản, bài toán có tính chất tuyến tính là bài toán mà chúng ta có thể nắm bắt được những tính chất cơ bản của nó Do vậy, việc tuyến tính hóa một bài toán sẽ giúp tiếp cận và giải quyết bài toán đó một cách dễ dàng hơn Hệ phương trình đại số tuyến tính là một trong những hệ phương trình dễ giải nhất, nên trên thực tế, hầu hết các lĩnh vực của khoa học hiện đại đều chứa những mô hình trong đó các phương trình được xấp xỉ bằng các hệ phương trình đại số tuyến tính Việc tìm nghiệm của các hệ phương trình sẽ giúp cho việc phát triển lý thuyết cũng như ứng dụng của những lĩnh vực này trong thực tế
Hệ phương trình đại số tuyến tính có nhiều ứng dụng trong kỹ thuật và kinh tế Ví dụ, trong kỹ thuật, hệ phương trình đại số tuyến tính có thể được sử dụng để mô hình hóa các mạch điện, các hệ thống cơ khí, các hệ thống điều khiển hoặc các hệ thống tối ưu Trong kinh tế, hệ phương trình đại số tuyến tính có thể được sử dụng để phân tích các mối quan hệ giữa các biến kinh tế, như nhu cầu, cung, giá hoặc lợi nhuận Hệ phương trình đại số tuyến tính cũng có thể được sử dụng để giải quyết các bài toán phân bổ nguồn lực, bài toán vận chuyển hoặc bài toán lập kế hoạch sản xuất Tuy nhiên, hệ phương trình đại số tuyến tính có vai trò đặc biệt trong khoa học dữ liệu, ví dụ như
▪ Linear programming: là một kỹ thuật tối ưu hóa phổ biến, sử dụng hệ phương trình đại số tuyến tính để tìm ra giá trị nhỏ nhất hoặc lớn nhất của một hàm mục tiêu, thỏa mãn một số ràng buộc Linear programming có thể được sử dụng để giải quyết các bài toán về phân bổ nguồn lực, lập kế hoạch sản xuất, vận chuyển hàng hóa, quản lý rủi ro hoặc phân tích dữ liệu
▪ Phân tích thành phần chính (PCA): là một kỹ thuật giảm chiều dữ liệu, sử dụng hệ phương trình đại số tuyến tính để tìm ra các vectơ riêng và giá trị riêng của ma trận hiệp phương sai của dữ liệu, và chọn ra các vectơ riêng có giá trị riêng lớn nhất để biểu diễn dữ liệu trên các trục tọa độ mới PCA có thể được sử dụng để nén ảnh, phát hiện gương mặt, phân loại văn bản hoặc phân tích thành phần chính
Phân tích nhân tố (FA) là kỹ thuật khám phá cấu trúc dữ liệu, dựa trên hệ phương trình đại số tuyến tính để xác định các biến ẩn ẩn (factors) ảnh hưởng đến các biến quan sát được (variables), đồng thời làm rõ mối quan hệ giữa chúng FA đóng vai trò quan trọng trong việc đo lường các yếu tố như khả năng, thái độ, năng lực và kiến thức của cá nhân hoặc nhóm.
▪ Phân tích hồi quy (Regression analysis): là một kỹ thuật mô hình hóa mối quan hệ giữa các biến, sử dụng hệ phương trình đại số tuyến tính để tìm ra các hệ số của một hàm số biểu diễn mối quan hệ giữa biến phụ thuộc (dependent variable) và các biến độc lập (independent variables) Phân tích hồi quy có thể được sử dụng để dự báo, kiểm tra giả thuyết, đánh giá hiệu quả hoặc khám phá xu hướng của dữ liệu
▪ Phân tích cụm (Cluster analysis): là một kỹ thuật phân nhóm dữ liệu, sử dụng hệ phương trình đại số tuyến tính để tìm ra các nhóm con (clusters) của các điểm dữ liệu có sự tương đồng cao với nhau và khác biệt với các điểm dữ liệu ở các nhóm khác Phân tích cụm có thể được sử dụng để phân loại khách hàng, gom nhóm gen, xác định vùng địa lý hoặc phát hiện bất thường
Hệ phương trình đại số tuyến tính là một nhóm các phương trình tuyến tính có cùng các ẩn số dạng
Giải hệ phương trình đại số tuyến tính là việc tìm ra các nghiệm chung cho các phương trình này (nếu có Có một số phương pháp cơ bản để tìm nghiệm của hệ ) phương trình đại số tuyến tính là phương pháp ma trận nghịch đảo, phương pháp Cramer và phương pháp Gauss Tuy nhiên, vì việc tính toán định thức và ma trận nghịch đảo rất tốn kém nên khi hệ phương trình có kích thước lớn thì chỉ có phương pháp Gauss thích hợp cho việc giải các hệ này Chương trong học phần Giải tích số 3 giới thiệu thuật toán Gauss và thuật toán phân rã LU, một cải tiến của thuật toán Gauss, để tìm nghiệm cho hệ phương trình đại số tuyến tính Các thuật toán này cũng sẽ được nâng cao nhờ việc áp dụng phương pháp phần tử trội để giải hệ khi mà phần tử xoay bằng 0
Bên cạnh việc sử dụng phương pháp Gauss, LU để tìm nghiệm cho hệ phương trình đại số tuyến tính, việc sử dụng các phương pháp lặp đơn để tìm nghiệm xấp xỉ cho hệ cũng là một hướng tiếp cận cần thiết với ưu điểm là đơn giản và thuật toán có thể tự sửa sai số Hai thuật toán sẽ được trình bày là thuật toán lặp Jacobi và thuật toán lặp Seidel
2.3.1 S dử ụng Python để cài đặt cho phương pháp Gauss giải hệ phương trình:
Phép khử Gauss là phương pháp chuyển đổi ma trận hệ số về dạng tam giác hoặc bậc thang thông qua các phép biến đổi sơ cấp Phép khử Gauss được sử dụng rộng rãi trong Giải tích số và Đại số tuyến tính, đặc biệt là để đưa ma trận hệ số hệ phương trình đại số tuyến tính về dạng tam giác trên để giải hệ từ dưới lên.
▪ Đơn giản và hiệu quả, có thể áp dụng cho hầu hết các hệ phương trình đại số tuyến tính;
▪ Có thể sử dụng để tìm nghiệm của hệ phương trình, hạng của ma trận, ma trận nghịch đảo hoặc ma trận chuyển vị;
▪ Có thể sử dụng để tính định thức của ma trận vuông;
▪ Có thể sử dụng để giải các bài toán ứng dụng như linear programming, cân bằng phản ứng hóa học, mã hoá và giải mã thông tin
Viết hệ phương trình dưới dạng ma trận hệ số mở rộng
Thuật toán khử Gauss để giải hệ phương trình đại số tuyến tính sẽ thực hiện 2 pha: Pha khử: Sử dụng các phép biến đổi sơ cấp trên các hàng của ma trận để khử các ẩn từ trái sang phải, từ trên xuống dưới để đưa ma trận hệ số về dạng tam giác trên, tức là các phần tử nằm dưới đường chéo chính đều bằng không Giả sử, để khử các phần tử của cột 𝑘:
Ta ch n hàng là hàng xoay và hàng ọ 𝑘 𝑖=𝑘+ 1, … ,𝑛 sẽ được tính b ng cách hàng ằ
Cách tính toán cụ thể như sau:
Kết thúc pha khử, ma trận hệ số mở rộng có dạng
Pha giải: Giải hệ tam giác trên bằng cách thế ngược từ dưới lên trên để tìm nghiệm của hệ phương trình Công thức cụ thể như sau:
Hàm gaussElimin(a,b) s tính nghi m x p x c a hẽ ệ ấ ỉ ủ ệ phương trình đại số tuyến tính với ma tr n h sậ ệ ố 𝑎 và vector h s t do ệ ố ự 𝑏.
''' import numpy np as def gaussElimin(a,b): n = len (b)
# Elimination Phase for k in range ( ,n ): 0 -1 for i in range (k ,n): +1 a[i,k] if != 0.0: lam a [i,k] a[k,k] = /
# Back substitution for k in range (n , , ): -1 -1 -1 b[k] (b[k] np dot(a[k,k = - +1:n],b[k :n])) a[k,k] +1 / return b Độ phức tạp tính toán của phương pháp khử Gauss là số lượng phép tính toán cần thực hiện để đưa ma trận về dạng bậc thang tam giác Phép khử Gauss trên một ma trận
𝑛×𝑛 cần khoảng 2𝑛 3 /3 phép tính toán Do đó nó có độ phức tạp là Ο(n 3 ) Thuật toán này có thể được sử dụng trên máy tính với hàng ngàn hệ phương trình và ẩn số
Khi s dử ụng phương pháp khử Gauss để gi i hả ệ phương trình đại số tuyến tính
𝐴𝑥=𝑏 N u h s t do ế ệ ố ự 𝑏 thay đổi thì việc tính toán phải thực hiện lại từ đầu, bao g m c vi c kh ma tr n Vi c này s dồ ả ệ ử ậ 𝐴 ệ ẽ ẫn đến khối lượng tính toán l n n u ta phớ ế ải gi i nhi u hả ề ệ phương trình cùng ma trận h sệ ố 𝐴 nhưng hệ ố ự s t do 𝑏 thay đổi Phương pháp phân rã LU sau đây sẽ khắc phục được nhược điểm này
2.3.2 S dử ụng Python để cài đặt cho phương pháp phân rã LU
Phương pháp phân rã LU là phương pháp phân tích ma trận thành tích của một ma trận tam giác dưới và một ma trận tam giác trên Phép phân tích này thường được dùng trong giải tích số để giải hệ phương trình tuyến tính hoặc tính định thức của ma trận Thuật toán phân rã LU để giải hệ phương trình đại số tuyến tính có các bước như sau: Bước 1: Phân rã ma trận hệ số A thành tích của hai ma trận tam giác dưới L và tam giác trên U, tức là A = LU Có nhiều cách để thực hiện phép phân rã này, một cách phổ biến là sử dụng phương pháp khử Gauss Cụ thể, ma trận tam giác trên U chính là kết quả của việc khử Gauss cho ma trận A Ma trận tam giác dưới L với các phần tử trên đường chéo chính là 1 và các phần tử phía dưới đường chéo chính là bội số để khử phần tử tương ứng của ma trận A Do vậy, phân rã LU thực ra là việc khử Gauss cho ma trận A với cải tiến là bội số trong quá trình khử được lưu vào vị trí tương ứng Khi đó, kết quả là ma trận [L U], là ma trận mà các phần tử phía trên đường chéo chính là \ ma trận U và các phần tử phía dưới đường chéo chính là ma trận L
Bước 2: Đặt y = Ux và giải hệ phương trình tam giác dưới Ly = b bằng phương pháp thế thuận
Bước 3: Giải hệ phương trình tam giác trên Ux = y bằng phương pháp thế ngược
S d ử ụng Python cài đặ t các thu ật toán trong chương 4 của học phần Gi i tích s ả ố: Nội suy và phương pháp bình phương nhỏ nhất
Giải tích số: Nội suy và phương pháp bình phương nhỏ nhất
Tập các điểm dữ liệu cho dưới dạng bảng
Bảng 2.1 tóm tắt các loại dữ liệu thường tham gia vào các tính toán kỹ thuật, thu thập từ các quan sát thực nghiệm hoặc tính toán số Nội suy và khớp dữ liệu là hai kỹ thuật chính để xử lý và phân tích dữ liệu rời rạc Nội suy xây dựng đường cong đi qua các điểm dữ liệu, coi chúng là chính xác và khác biệt Ngược lại, khớp đường cong phù hợp với dữ liệu bị nhiễu do lỗi đo lường, tìm đường cong trơn xấp xỉ dữ liệu nhưng không nhất thiết phải đi qua các điểm dữ liệu.
Nội suy là quá trình sử dụng các điểm dữ liệu đã biết để ước tính giá trị của các điểm dữ liệu chưa biết trong phạm vi một tập hợp rời rạc[6] Nội suy quan trọng và hữu ích trong việc xử lý và phân tích dữ liệu vì:
▪ Nội suy giúp dự đoán các giá trị chưa biết cho bất kỳ điểm dữ liệu địa lý nào, như độ cao, lượng mưa, nồng độ hóa chất, mức độ ồn, v.v [7] Điều này có thể hỗ trợ các quyết định và giải pháp liên quan đến môi trường, khí hậu, y tế, kinh tế, v.v
▪ Nội suy giúp giảm khối lượng dữ liệu và cải thiện chất lượng dữ liệu bằng cách kết hợp các nguồn dữ liệu khác nhau và loại bỏ các nhiễu và sai số Điều này [8] có thể tăng hiệu quả và độ tin cậy của việc xử lý và phân tích dữ liệu
▪ Nội suy giúp tạo ra các bề mặt liên tục từ các điểm dữ liệu rời rạc bằng cách sử dụng các phương pháp như nội suy spline, nội suy Lagrange, v.v [8] Điều này có thể giúp trực quan hóa và mô hình hóa dữ liệu một cách sinh động và chính xác Hình 2.4
Nội suy trong toán học là phương pháp tìm ra đường cong đi qua các điểm dữ liệu đã biết Nội suy thường được sử dụng để dự đoán giá trị tại các điểm chưa biết dựa trên dữ liệu hiện có Trong giải tích số, có hai phương pháp nội suy cơ bản là nội suy Lagrange và nội suy đa thức Các phương pháp này giúp tìm ra đường cong nội suy đa thức đi qua các điểm dữ liệu.
Bên cạnh phương pháp nội suy, một phương pháp phổ biến khác để xấp xỉ các điểm dữ liệu là phương pháp khớp đường cong (curve fitting) Khớp đường cong là quá trình xây dựng một đường cong hoặc một hàm số có sự phù hợp tốt nhất với một loạt các điểm dữ liệu, có thể có ràng buộc Khớp đường cong là phương pháp thay thế
Hình 2 4 Minh h a n i suy ọ ộ nội suy, khi độ chính xác của dữ liệu chưa cao dữ liệu và yêu cầu một hàm số "mượt" để xấp xỉ dữ liệu[10]
Khớp đường cong có vai trò quan trọng trong khoa học dữ liệu vì nó có thể được sử dụng như một công cụ để trực quan hóa dữ liệu, để suy ra các giá trị của một hàm số khi không có dữ liệu nào khả dụng và để tóm tắt các mối quan hệ giữa hai hoặc nhiều biến [11] Khớp đường cong cũng giúp xác định các tham số tối ưu cho một hàm số cho trước để biểu diễn tốt nhất các tập dữ liệu [11] Ngoài ra, khớp đường cong cũng cho phép chúng ta nắm bắt xu hướng trong dữ liệu và thực hiện các dự đoán về cách dữ liệu sẽ biến động trong tương lai [12] Khớp đường cong có thể là tuyến tính hoặc phi tuyến, tùy thuộc vào tính chất của mối quan hệ giữa các biến [13]
Các bước khớp đường cong cho các điểm dữ liệu có thể phụ thuộc vào hàm số và phương pháp khớp đường cong cụ thể Tuy nhiên, quy trình tổng quát thường bao gồm các bước:
▪ Bước 1: Vẽ biểu đồ phân tán của các điểm dữ liệu để xem xu hướng và mối quan hệ giữa các biến
▪ Bước 2: Chọn một hàm số phù hợp với dạng của dữ liệu, ví dụ như đường thẳng, đa thức, hàm mũ, hàm lôgarit, hàm Gaussian, v.v
▪ Bước 3: Xác định các tham số của hàm số và giá trị ban đầu cho chúng Các tham số có thể được ước lượng bằng cách sử dụng các phương pháp như phương pháp bình phương nhỏ nhất (least squares method), phương pháp tối ưu hóa (optimization method), v.v
▪ Bước 4: Sử dụng một công cụ toán học hoặc lập trình để khớp đường cong với các điểm dữ liệu bằng cách điều chỉnh các tham số cho đến khi tìm được giá trị tối ưu cho chúng Có thể sử dụng các tiêu chí như sai số bình phương (sum of squared errors), chỉ số tương quan (correlation coefficient), v.v để đánh giá độ phù hợp của đường cong
▪ Bước 5: Vẽ biểu đồ của đường cong đã khớp và so sánh nó với các điểm dữ liệu Kiểm tra xem có điểm nào bị loại bỏ hoặc ngoại lai không và xem xét việc sử dụng một hàm số khác nếu cần
Trong phạm vi môn học này, chúng ta sẽ tập chung thảo luận phương pháp bình phương nhỏ nhất để xấp xỉ các điểm dữ liệu bằng đa thức Sau đó sẽ mở rộng cho các hàm phi tuyến và cho trường hợp dữ liệu có trọng số
2.4.1 S dử ụng Python để cài đặt cho phương pháp Lagrange
Từ một số bài toán quen thuộc như qua hai điểm xác định duy nhất một đường thẳng, ba điểm xác định duy nhất đồ thị của một đa thức bậc hai, bốn điểm xác định duy nhất đồ thị của một đa thức bậc ba, v.v, thay thấy qua 𝑛+ 1 sẽ xác định được một đa thức bậc 𝑛 Một trong những phương pháp này được nhà toán học Joseph-Louis Lagrange đề xuất vào năm 1795 và được mang tên ông [14] Để thực hiện phương pháp nội suy Lagrange, ta có thể thực hiện các bước sau đây:
▪ Nhập các giá trị của biến độc lập 𝑥 𝑖 và biến phụ thuộc 𝑦 𝑖 ,𝑖= 0,1, … ,𝑛
▪ Tính các đa thức cơ sở
▪ Tính đa thức nội suy Lagrange
Chương trình Python lagrangePoly(xData,yData,x) sau đây tính sử ụng phương d pháp Lagrange tính giá tr cị ủa đa thức nội suy qua các điểm dữ liệu 𝑥𝐷𝑎𝑡𝑎,𝑦𝐷𝑎𝑡𝑎 cho trước:
''' def lagrangePoly (xData,yData,x): n = len (xData) - 1 # Degree of polynomial p = 0.0 for i in range ( ,n ): 1 +1 l=1.0 for j in range ( ,n ): 1 +1 j i: l l (x if != = * -xData[j]) (xData[i] xData[j]) / - p p = +yData[i]*l return p
S d ử ụng Python cài đặ t các thu ật toán trong chương 5 của học phần Gi i tích sả ố: Tính gần đúng đạo hàm và tích phân
Giải tích số: Tính gần đúng đạo hàm và tích phân
2.5.1 M t s ộ ố phương pháp xấp xỉ đạo hàm Đạo hàm là một khái niệm quan trọng trong toán học và khoa học dữ liệu Nó được sử dụng để tính toán tỷ lệ thay đổi của một hàm số theo một biến số Vai trò của đạo hàm trong khoa học dữ liệu là rất quan trọng Nó được sử dụng để tìm kiếm cực trị của hàm số, tìm kiếm điểm cực đại và cực tiểu của hàm số, và tìm kiếm điểm uốn của hàm số Đạo hàm cũng được sử dụng để tính toán độ dốc của một đường cong, độ cong của một đường cong, và độ cong của một đường cong tại một điểm cụ thể
Ngoài ra, đạo hàm còn được sử dụng để tìm kiếm các điểm dữ liệu bất thường trong tập dữ liệu, giúp cải thiện độ chính xác của mô hình Vì vậy, đạo hàm là một công cụ quan trọng trong khoa học dữ liệu và được sử dụng rộng rãi trong các lĩnh vực như kinh tế, tài chính, khoa học xã hội, y học, kỹ thuật và nhiều lĩnh vực khác
Có hai phương pháp xấp xỉ đạo hàm phổ biến là sai phân và nội suy Phương pháp sai phân dựa trên khai triển Taylor và có ba loại công thức xấp xỉ: sai phân tiến, lùi và trung tâm Lựa chọn công thức phù hợp phụ thuộc vào giá trị của biến cần xấp xỉ Hệ số của các công thức sai phân để xấp xỉ đạo hàm được trình bày trong bảng trên.
B ng 2 3 B ng h s công ả ả ệ ố thứ c sai phân trung tâm x p x ấ ỉ đạo hàm
B ng 2 4 B ng h s công th c sai phân ti n b c hai x p x o hàm ả ả ệ ố ứ ế ậ ấ ỉ đạ 𝒇(𝒙 −𝟓𝒉) 𝒇(𝒙 −𝟒𝒉) 𝒇(𝒙 −𝟑𝒉) 𝒇(𝒙 − 𝟐𝒉) 𝒇(𝒙 − 𝒉) 𝒇(𝒙)
B ng 2 5 B ng h s công th c sai phân lui b c hai x p x o hàm ả ả ệ ố ứ ậ ấ ỉ đạ Để tăng độ chính xác cho các công thức sai phân xấp xỉ đạo hàm, ta có thể sử dụng phương pháp ngoại suy Richardson Các bước thực hiện phương pháp ngoại suy Richardson như sau:
▪ Tính giá trị của hàm số tại các điểm cách đều nhau trên trục x
▪ Sử dụng công thức ngoại suy để tính giá trị của hàm số tại một điểm x0 bất kỳ
▪ Lặp lại bước 2 với các giá trị cách xa nhau hơn trên trục x cho đến khi đạt được độ chính xác mong muốn
Mô-đun này cung cấp hai cách tiếp cận để xấp xỉ đạo hàm: central_difference sử dụng công thức sai phân trung tâm, trong khi richardson_extrapolation sử dụng công thức ngoại suy Richardson cho sai phân trung tâm để cải thiện độ chính xác.
''' R[n][n] = richardson_extrapolation(f, x, h, n) Richardson extrapolation formula for central difference central_difference(f, x, h) return returns the approximation of the derivative using the central difference formula.''' def richardson_extrapolation (f, x, h, n):
R [[ ] (n ) = 0 * + 1 for _ in range (n )] + 1 for i in range (n ): + 1
R[i][ ] central_difference(f, x, h i) 0 = / 2 ** for j in range ( , i ): 1 + 1
Bên cạnh phương pháp sai phân xấp xỉ đạo hàm, phương pháp nội suy cũng thường được sử dụng để tính đạo hàm tại một điểm bất kỳ bằng cách dùng các giá trị của hàm tại các điểm gần đó Để tính gần đúng đạo hàm, sử dụng đa thức nội suy qua một tập hợp các điểm dữ liệu và tính đạo hàm của đa thức đó.
▪ Xác định các giá trị của hàm số tại các điểm gần điểm cần tính đạo hàm;
▪ Sử dụng phương pháp nội suy để xây dựng đa thức nội suy;
▪ Tính đạo hàm của đa thức nội suy tại điểm cần tính
2.5.2 S dử ụng Python để cài đặt cho phương pháp hình thang xấp x tích ỉ phân xác định
Tích phân là một trong những công cụ quan trọng trong khoa học dữ liệu Nó giúp chúng ta tính toán các giá trị trung bình, phương sai, độ lệch chuẩn và các thống kê khác từ dữ liệu Tích phân được áp dụng để tính toán các giá trị dự đoán trong các mô hình học máy và các mô hình dự đoán khác Nó cũng được sử dụng để tính toán các giá trị đạo hàm, đạo hàm riêng của các hàm số và tính toán các giá trị xác suất, các giá trị liên quan đến phân phối xác suất Một số ví dụ cụ thể về vai trò của tích phân trong một số lĩnh vực của khoa học dữ liệu là:
▪ Trong học máy, tích phân được sử dụng để tính toán các giá trị trung bình, phương sai và các thống kê khác của các tập dữ liệu Ngoài ra, nó còn được dùng để tìm kiếm các hàm tối ưu và giải quyết các bài toán tối ưu hóa[15]
▪ Trong học sâu, tích phân được sử dụng để tính toán đạo hàm của các hàm kích hoạt và các hàm mất mát Đạo hàm này được sử dụng để cập nhật các trọng số trong mạng nơ-ron [16]
▪ Trong thống kê, tích phân được sử dụng để tính toán các giá trị trung bình, phương sai và các thống kê khác của các tập dữ liệu Nó được dùng để tính toán các phân phối xác suất và các giá trị p3
Trong phân tích dữ liệu, tích phân đóng vai trò quan trọng Nó được sử dụng để tính toán các thống kê quan trọng của tập dữ liệu, bao gồm giá trị trung bình, phương sai và các giá trị khác Ngoài ra, tích phân còn được ứng dụng trong tìm kiếm các hàm tối ưu và giải quyết các bài toán tối ưu hóa.
Phương pháp tính tích phân xác định được ưu chuộng nhất là công thức Newton-Libnitz Để tích tích phân theo công thức này, trước hết ta cần tìm nguyên hàm của hàm dưới dấu tích phân, sau đó tích phân xác định được tính bằng hiệu của giá trị nguyên hàm tại cận trên với giá trị nguyên hàm tại cận dưới Để áp dụng công thức
Newton-Libnitz, hàm dưới dấu tích phân cần phải liên tục và phải tìm được nguyên hàm của hàm số này Tuy nhiên, những điều kiện này trong thực tế nhiều khi không đảm bảo (vì không phải hàm dưới dấu tích phân nào cũng liên tục và việc tìm nguyên hàm đôi khi không thực hiện được) nên việc áp dụng công thức Newton-Libnitz trong tích tích phân xác định nhiều khi không thực hiện được Bên cạnh đó, nhiều bài toán trong kỹ thuật sẽ dẫn đến việc cần tính tích phân xác định của hàm số được cho dưới dạng các điểm dữ liệu rời rạc Do vậy, việc xây dựng các phương pháp tính gần đúng tích phân một cách ổn định và chính xác là rất cần thiết
Phương pháp tính gần đúng tích phân hoặc phương pháp số tích phân đều được cho dạng
, với 𝑥𝑖 là các nút và 𝐴𝑖là các trọng số Tùy vào từng phương pháp cụ thể mà các nút và trong số được tính khác nhau Tuy nhiên, các phương pháp số tích phân có thể cơ bản chia thành hai nhóm là các phương pháp tích phân Newton Cotes và nhóm các phương - pháp cầu phương Gaussian
Các phương pháp Newton Cotes được đặc trưng bởi các nút cách đều nhau và - được biết đến bởi một số phương pháp nổi tiếng là phương pháp hình thang và phương pháp Simpson Ý tưởng chính của phương pháp Newton Cotes là xấp xỉ hàm dưới dấu - tích phân bằng đa thức nội suy, sau đó, tích phân xác định sẽ được xấp xỉ bởi tích phân của đa thức nội suy này Các bước thực hiện phương pháp Newton-Cotes như sau:
▪ Bước 1 Chia đoạn tích phân thành n đoạn bằng nhau;
▪ Bước 2 Xác định giá trị của hàm số tại các điểm chia đoạn;
▪ Bước 3 Xây dựng đa thức xấp xỉ hàm số trên đoạn tích phân;
▪ Bước 4 Tính tích phân của đa thức xấp xỉ
S d ử ụng Python cài đặ t các thu ật toán trong chương 6 của học phần Gi i tích sả ố: Tính gần đúng nghiệ m c ủa phương trình vi phân
Giải tích số: Tính gần đúng nghiệm của phương trình vi phân
Phương trình vi phân là một phương trình toán học sử dụng để biểu diễn mối quan hệ giữa một hàm chưa được biết (một hoặc nhiều biến) với đạo hàm của nó (có bậc khác nhau)[17] Cấp của phương trình vi phân là bậc cao nhất của đạo hàm hàm số Dạng tổng quát của phương trình vi phân cấp một là
𝑦 ′ =𝑓(𝑥,𝑦) với 𝑓(𝑥,𝑦) cho trước Nghiệm của phương trình vi phân này chứa hằng số tùy ý Để xác định được hằng số này, ta phải biết được một điểm trên đường cong nghiệm Ví dụ
Một phương trình vi phân bậc 𝑛
𝑦 (𝑛) =𝑓(𝑥,𝑦,𝑦 ′ , … ,𝑦 (𝑛−1) ) luôn có thể đưa về hệ phương trình vi phân cấp một bằng cách đặt
𝑦1=𝑦; 𝑦2=𝑦 ′ , … ,𝑦 𝑛 =𝑦 (𝑛−1) Khi đó phương trình vi phân cấp 𝑛sẽ được đưa về dạng
Nếu ta biết được giá tr c a nghiị ủ ệm cũng như đạo hàm các c p c a nghi m t i cùng ấ ủ ệ ạ một điểm 𝑎
𝑦(𝑎) =𝛼1;𝑦′( ) =𝑎 𝛼2; … ;𝑦(𝑛−1)( ) =𝑎 𝛼𝑛 thì đây được gọi là điều kiện ban đầu Bài toán khi đó được gọi là bài toán giá trị ban đầu Nếu ta biết giá trị của nghiệm tại nhiều điểm khác nhau 𝑎1,𝑎2, … ,𝑎𝑛
Thì điều kiện này được gọi là điều kiện biên và bài toán khi đó được gọi là bài toán giá trị biên Trong phạm vi chương trình giải tích số, ta chỉ xét bài toán giá trị ban đầu dạng
𝒚 ′ =𝑭 𝑥,( 𝒚) (𝑎),𝒚 =𝜶 Phương trình vi phân có rất nhiều ứng dụng trong các lĩnh vực khác nhau như kỹ thuật, vật lý, hóa học, sinh học, kinh tế và một số ngành khác Trong khoa học dữ liệu, phương trình vi phân được sử dụng để giải quyết các bài toán liên quan đến dữ liệu thời gian và dữ liệu không gian Một số ứng dụng của phương trình vi phân trong một số bài toán khoa học dữ liệu là
▪ Dự đoán thời tiết: Phương trình vi phân được sử dụng để dự đoán thời tiết bằng cách phân tích các dữ liệu thời tiết hiện tại và quá khứ
▪ Phân tích tín hiệu: Phương trình vi phân được sử dụng để phân tích các tín hiệu như sóng âm thanh và sóng điện
▪ Xử lý ảnh và video: Phương trình vi phân được sử dụng để xử lý ảnh và video bằng cách phân tích các đặc trưng của ảnh và video
▪ Phát hiện giả mạo: Phương trình vi phân được sử dụng để phát hiện giả mạo bằng cách phân tích các đặc trưng của văn bản
▪ Phát hiện tín hiệu nhiễu: Phương trình vi phân được sử dụng để phát hiện tín hiệu nhiễu bằng cách phân tích các đặc trưng của tín hiệu
▪ Xử lý ngôn ngữ tự nhiên: Phương trình vi phân được sử dụng để xử lý ngôn ngữ tự nhiên bằng cách phân tích các đặc trưng của văn bản
▪ Phân tích dữ liệu y tế: Phương trình vi phân được sử dụng để phân tích dữ liệu y tế bằng cách phân tích các đặc trưng của dữ liệu y tế
▪ Phân tích tài chính: Phương trình vi phân được sử dụng để phân tích tài chính bằng cách phân tích các đặc trưng của dữ liệu tài chính
▪ Mô hình hóa và dự đoán kinh doanh: Phương trình vi phân được sử dụng để mô hình hóa và dự đoán kinh doanh bằng cách phân tích các đặc trưng của dữ liệu kinh doanh
▪ Tối ưu hóa quy trình sản xuất: Phương trình vi phân được sử dụng để tối ưu hóa quy trình sản xuất bằng cách phân tích các đặc trưng của quy trình sản xuất
2.6.1 S dử ụng Python để cài đặt cho phương pháp Euler xấp x nghi m cho ỉ ệ phương trình vi phân
Phương pháp Euler là một trong những phương pháp cổ điển giải số phương trình vi phân [18] Nó là phương pháp hiện (explicit) cơ bản nhất cho việc tính tích phân số của các phương trình vi phân thường và là phương pháp Runge Kutta đơn giản - nhất Phương pháp Euler được đặt theo tên của Leonhard Euler, người đã đề cập đến phương pháp này trong cuốn sách “Institutionum calculi integralis” của ông Phương pháp Euler sử dụng xấp xỉ của công thức khai triển Taylor
Từ công thức trên, ta thấy có thể dự đoán giá trị của y tại x+h dựa trên giá trị cơ sở của y tại x và giá trị của hàm tỷ số F tại x, y Như vậy, với giá trị ban đầu y(x0)=y0 cho trước, ta sẽ dễ dàng dự đoán giá trị của y tại các điểm x = xi + h, i = 1,2, … Các bước thực hiện phương pháp Euler như sau:
▪ Bước 1 Chọn giá tr ban đầu của 𝑥 và ị 𝒚
▪ Bước 2 Chọn độ dài bước h (số gia)
▪ Bước 4 Tính giá trị m i của 𝒚: 𝒚ớ =𝒚+𝒚′ℎ
▪ Bước 5 Tính giá trị m i của 𝑥: 𝑥ớ =𝑥+ ℎ
▪ Lặp lại các Bước 3-5 cho đến khi đạt được giá trị cần tìm
Mô đun euler sau đây sử dụng phương pháp Euler để xấp xỉ nghiệm cho bài toán giá trị ban đầu của phương trình vi phân cấp một trên đoạn [𝑥,𝑥𝑆𝑡𝑜𝑝] với số gia ℎ cho trước.
Euler’s method for solving the initial value problem {y}’ = {F(x,{y})}, where
{y} = {y[0],y[1], y[n-1]} x,y = initial conditions xStop = terminal value of x
24 h = increment of x used in integration249 7.2 Euler’s Method
F = user-supplied function that returns the array F(x,y) = {y’[0],y’[1], ,y’[n-1]}
''' import numpy np as def integrate(F,x,y,xStop,h):
Y append(y) while x < xStop: h = min (h,xStop x) - y y = + h* F(x,y) x x = + h
Y.append(y) return np array(X),np array(Y)
Mô-đun printSoln sau đây in nghiệm số của phương trình vi phân Số lượng in ra được kiểm soát bởi biến freq Ví dụ nến freq=5 thì sẽ in ra giá trị các bước 0, 5, 10,… nếu freq=0 thì chỉ in ra giá trị bước đầu và bước cuối
Prints X and Y returned from the differential equation solvers using printout frequency ’freq’ freq = n prints every nth step freq = 0 prints initial and final values only
''' def printSoln(X,Y,freq): def printHead (n): print ( " x " \n ,end =" ") for i in range (n): print ( " y[" "] " ,i, ,end =" ") print () def printLine (x,y,n):
26 print ( "{:13.4e}" format(x),end = " ") for i in range (n): print ( "{:13.4e}".format(y[i]),end=" ") print () m = len (Y) try : n = len (Y[ ]) 0 except TypeError : n = 1 freq if == 0 : freq m = printHead(n) for i in range ( ,m,freq): 0 printLine(X[i],Y[i],n) i m : printLine(X[m ],Y[m ],n) if != - 1 - 1 - 1
Sai số khi thực hiện xấp xỉ Taylor là
Tuy nhiên, quá trình tính toán được lặp lại nhiều lần nên sai số của phương pháp sẽ được tích lũy qua mỗi bước Do vậy, sai số của phương pháp là
𝐸𝑎𝑐𝑐=𝑛𝐸= Ο(ℎ). Để minh h a sai số, ta giả sử ọ 𝑦là hàm một biến Từ phương trình 𝑦 ′ =𝑓(𝑥,𝑦) ta thấy
Sử dụng công thức xấp xỉ Taylor
Do đó, sai số của phương pháp là
Theo Hình 2.12, sai s chính là ph n chênh gi a hình hang cong v i hình ch nhố ầ ữ ớ ữ ật
Rõ ràng sai s cố ủa phương pháp là rấ ớt l n, nó t l vỉ ệ ới độ ố d c c a hàm , t c là t l vủ 𝑓 ứ ỉ ệ ới 𝑦′′ Do đó, phương pháp của Euler ít khi khi được sử dụng trong thực tế vì độ chính xác thấp Để tìm được nghiệm có sai số có thể chấp nhận được thì yêu cầu h rất nhỏ, dẫn đến phải tính toán nhiều bước nên sẽ làm tăng sai số quy tròn và tính toán Ý nghĩa của phương pháp Euler chủ yếu nằm ở tính đơn giản của nó, việc thuận lợi cho việc thảo luận về một số chủ đề quan trọng, chẳng hạn như xét tính ổn định của nghiệm Phương pháp Runge Kutta là một phương pháp giải gần đúng cho các phương trình vi - phân thông thường có độ chính xác cao hơn sẽ được thảo luận trong mục sau
2.6.2 S dử ụng Python để cài đặt cho phương pháp Runge-Kutta
Phương pháp Euler là một phương pháp cổ điển bậc một vì sai số là Ο(ℎ) Ý tưởng của phương pháp Euler là sử dụng xấp xỉ khai triển Taylor