ời Cảm ƠnThông qua môn học lập trình tính toán hình thực symbolic, em xin gởi lời cám ơn chân thành đến thầy Đỗ Văn Nhơn, thầy đã giới thiệu môn học vô cùng thú vị,với việc tiếp cận kiến
Trang 1Mục Lục
Trang 2ời Cảm Ơn
Thông qua môn học lập trình tính toán hình thực (symbolic), em xin gởi lời cám
ơn chân thành đến thầy Đỗ Văn Nhơn, thầy đã giới thiệu môn học vô cùng thú vị,với việc tiếp cận kiến thức mới về việc lập trình thôn minh trên mô hình rất phứctạp và khó khăn với ngôn ngữ khác, nhưng lại đơn giả hơn với cách tiếp cận nàyThông qua bài tiểu luận này, em mong được xem như hệ thống hoá kiến thức vàmột số điểm tìm hiểu vấn đề trong môn học cũng như nêu lên ứng dụng cụ thề chongôn ngữ lập trình hình thức này Tuy nhiên, do một số hạn chế về thời gian, chonên bài báo cáo chắc chắn còn nhiều thiếu sót Rất mong được sự hướng dẫn vàgiúp đỡ của các thầy và các bạn
Một lần nữa xin cảm ơn thầy hướng dẫn chúng em tận tình trong môn học lậptrình tính toán hình thức vừa qua
Xin cảm ơn !
Trang 3Lời Mở Đầu
Ngày nay, bài toán giải quyết công việc, nghiệp vụ ngày càng phức tạp Cácchương trình đòi hỏi ngày càng phải xử lý thông minh hơn, suy luận được nhiềuvấn đề hơn, nhưng đòi hỏi công việc lập trình phải nhanh hơn, linh hoạt hơn đểđáp ứng nhu cầu bài toán đặt ra Và một trong những cách tiếp cận đó là sử dụngngôn ngữ tính toán hình thức để lập trình (còn gọi là lập trình Symbolic)
Lập trình Symbolic là khái niệm về phát triển thuật toán dựa trên ý tưởngrằng công thức và các thành phần của chương trình có thể được thao tác nhưchính là những dữ liệu Trong ngôn ngữ lập trình chuyên về toán học, vật lý học,hóa học… và các chuyên ngành hẹp, các ngôn ngữ như Maple, Matlab,Mathematica, … ngày nay được sử dụng rất nhiều như công cụ phát triển nhanhứng dụng theo cách thông minh và dễ dàng hơn
Trong báo cáo này, ta cùng tìm hiểu lập trình Symbolic và ứng dụng của nótrong việc áp dụng giải một bài toán học bằng phương pháp giải và biện luận khảosát hàm số bậc 3 Thông qua báo cáo này, em mong hệ thống hóa kiến thức cũngnhư tiếp cận cách giải quyết vấn đề toán học qua việc sử dụng ngôn ngữ này
Trang 4I Tổng Quan Về Lập Trình Symbolic và ngôn ngữ Maple
1 Tổng quan về lập trình Symbolic
Phát triển sau này cùng với các ngôn ngữ hiện đại, ngôn ngữ Symbolic mang đến cách tiếp cận mới về cách lập trình tính toán chuyên sâu lĩnh vực về toán học thông qua các gói tích hợp chuyên dụng của ngôn ngữ Symbolic cung cấp như: Maple, Matlab, Mathematica
Ba điểm nổi bật khiến người ta chú ý tới lập trình Symbolic gồm: giảm thờigian phát triển chương trình, tăng độ chính xác của mô hình, và dễ dàng chuyển phần tính toán sang các ứng dụng khác thông qua tích hợp tương tác rất tiện dụng
a Giảm thời gian phát triển chương trình
Ngôn ngữ Symbolic cung cấp cho chúng ta dạng ngôn ngữ lập trình bậc caođồng nhất và linh hoạt cho phép người sử dụng tập trung vào các vấn đề tài chính
và lược bỏ thời gian dành cho các đoạn mã chương trình dài dòng Bất kể người sửdụng đã quen thuộc với VBA, C/C++ hoặc một ngôn ngữ lập trình nào khác thì việc tiếp cận vẫn có thể giúp giảm đáng kể thời gian và chi phí phát triển chương trình tính toán
Ngoài ra, ngôn ngữ Symbolic mang lại một phương thức mới trong việc lắpghép các macro tự phát triển, các add-in thương mại cung cấp, những nhân tố cần thiết để xây dựng việc mô phỏng toán học với công cụ đồ họa có thể truy cập vào bên trong các các hàm trong package của hệ thống Do ngôn ngữ Symbolic chứa khả năng gắn kết rất lớn các công thức tính toán và hàm, nó có thể xử lý các đồng thời các vận hành phức tạp mà người sử dụng phải mất nhiều sức lực, khả năng, thời gian để phát triển và sửa lỗi Nếu hàm cần sử dụng không được dựng sẵn, việcxây dựng một hàm mới với dạng ngôn ngữ bậc cao và có tính trực quan của như vậy sẽ nhanh và đơn giản hơn nhiều lần so với việc lập trình lại từ đầu
Không giống như các ngôn ngữ cấp cao đơn thuần khác, ngôn ngữ
Symbolic hướng tới việc hổ trợ lập trình chuyên sâu các lĩnh vực đặc thù nào đó Mỗi ngôn ngữ Symbolic cũng tập trung thế mạnh riêng của nó không giống nhau Các ngôn ngữ hình thức sau chú trong việc giải và mô phỏng các vấn đề toán học như Maple, Matlab, Mathematica Maple tập trung thế mạnh vào nền tảng giải phương trình tích hợp và cơ sở Groebner, dễ dàng tương tác sâu vào hệ thống cũngnhư khả năng code mở của nó, Matlab cũng dạng như Maple nhưng mạnh về biểu diễn ouput trực quan sinh động hơn Mathematica chú trọng tới hạ tầng lập trình cho người sử dụng bằng việc cung cấp các cấu trúc như lọc, tìm kiếm, xử lý file,
xử lý số liệu như Excel, bảng
Trang 5b Tăng độ chính xác mô hình
Lập trình Symbolic kết hợp các công cụ tính toán tiên tiến, các tham số chính xác và mã chương trình dễ đọc và tùy biến Sai số toán học trước khi quá trình tính toán tự động được thực hiện, sai số trong quá trình tính toán, chênh lệch
do làm tròn số, và sai sót của người sử dụng do không hiểu rõ mô hình tính toán đều được ngôn ngữ hình thức hổ trợ
Nếu các xấp xỉ số thường được các ngôn ngữ lập trình khác sử dụng, thì ngôn ngữ Symbolic sử dụng tính toán chính xác ở mức độ vượt trội so với các phần mềm toán học hiện tại Logic và cú pháp của nó đã hỗ trợ thuận tiện tối đa cho người sử dụng trong quá trình viết, sửa, hiểu tác dụng của mã lập trình- ngay
cả khi do người khác phát triển
c Dễ dàng chuyển các ứng dụng sang tích hợp với các ngôn ngữ khác
Giao thức kết nối độc đáo các ngôn ngữ Symbolic cho phép chuyển các chương trình của nó sang ứng dụng cực kỳ linh hoạt như xây dựng giao diện riêng,kết nối với ứng dụng C++ có sẵn, các tài nguyên khác như link với Java, Microsoft.NET giúp phát triển thêm các chức năng và các giao diện khác dễ dàng Ngoài ra, cũng rất dễ dàn g tìm hiểu phát triển và chia sẽ cho nhiểu người khác
2 Giới thiệu về ngôn ngữ Maple
a Lịch sử hình thành
Khái niệm đầu tiên về Maple xuất phát từ một cuộc họp vào tháng 11 năm
1980 tại Đại học Waterloo Những nhà nghiên cứu tại đại học muốn mua một máytính đủ mạnh để chạy Macsyma Thay vào đó, người ta quyết định họ sẽ phát triển
hệ thống đại số máy tính riêng để có thể chạy được những máy tính có giá thànhhợp lý hơn Do đó, dự án bắt đầu với mục tiêu là tạo ra một hệ thống đại số hìnhthức mà các nhà nghiên cứu và sinh viên có thể truy cập được Maple lấy hìnhtượng Lá phong trên Quốc kỳ Canada làm icon cho mình
Sự phát triển đầu tiên của Maple được tiến hành rất nhanh, với phiên bảnhạn chế đầu tiên xuất hiện vào tháng 12 năm 1980 Những nhà nghiên cứu đã thửnghiệm và loại bỏ nhiều ý tưởng khác nhau để tạo ra một hệ thống liên tục cải tiến.Maple được trình diễn đầu tiên tại những hội nghị bắt đầu vào năm 1982
Đến cuối năm 1983, trên 50 trường đại học đã cài Maple trên máy của họ
Do số lượng hỗ trợ và yêu cầu giấy phép lớn, vào năm 1984, nhóm nghiên cứu đãsắp xếp với WATCOM Products Inc để cấp phép và phân phối Maple
Vào năm 1988, do số lượng hỗ trợ ngày càng tăng, Waterloo Maple Inc.được thành lập Mục tiêu đầu tiên của công ty là quản lý những bản phân phối
Trang 6phần mềm Cuối cùng, công ty cũng phải mở ra phòng R&D ở đó khá nhiều sựphát triển cho Maple được thực hiện đến ngày nay Sự phát triển đáng kể củaMaple tiếp tục diễn rại những phòng thí nghiệm trường đại học, bao gồm: Phòngthí nghiệm Tính toán hình thức tại Đại học Waterloo; Trung tâm nghiên cứu Tínhtoán hình thức Ontario tại Đại học Tây Ontario; và những phòng thí nghiệm khắpnơi trên thế giới.
Vào năm 1989, giao diện đồ họa người dùng đầu tiên của Maple được pháttriển và bao gồm trong bản 4.3 dành cho Macintosh Những phiên bản trước củaMaple chỉ gồm giao diện dòng lệnh với ngõ ra hai chiều Bản X11 và Windowsvới giao diện mới tiếp bước vào năm 1980 với Maple V
Vào năm 1999, với việc phát hành Maple 6, Maple đã đưa vào một số Thưviện Số học NAG, được mở rộng độ chính xác ngẫu nhiên
Vào năm 2003, giao diện “chuẩn” hiện nay được giới thiệu trong Maple 9.Giao diện này được viết chủ yếu bằng Java (mặc dù có nhiều phần, nhưng luật choviệc gõ công thức toán học, được viết bằng ngôn ngữ Maple) và giao diện Java bịphê phán là chậm không còn được bảo trì
Giữa 1995 và 2005 Maple đã mất khá nhiều thị phần vào tay đối thủ do cógiao diện người dùng yếu hơn Nhưng vào năm 2005, Maple 10 giới thiệu một
“chế độ văn bản” mới, như một phần của giao diện chuẩn Tính năng chính củachế độ này là phép toán được đưa vào bằng ngõ nhập hai chiều, do đó nó xuất hiệntương tự như công thức trong sách Vào năm 2008, Maple 12 đã thêm những tínhnăn giao diện người dùng giống như Mathematica, gồm có những kiểu trình bàytheo mục đích đặc biệt, quản lý phần đầu và cuối trang, so trùng mở đóng ngoặc,vùng thực hiện tự động, mẫu hoàn thành lệnh, kiểm tra cú pháp và vùng tự độngkhởi tạo Những tính năng khác được thêm để làm cho Maple dễ dùng hơn vớimột hộp công cụ Maple và các tùy biến GUI của nó
Tháng 9 năm 2009, Maple và Maplesoft đã được mua lại bởi phần mềm hệthống cửa hàng bán lẻ Nhật Bản CyberNet Maple có các tính năng tính toán nềnrất mạnh so với Matlab biểu diễn báo cáo, biểu đồ và giao diện hoàn hảo hơn.Nhiều cải tiến hiệu suất của Maple16 đã thực sự tốt hơn nhiều hơn so vớiMathematica Wolfram Môi trường đồ họa của Maple 16 được cải thiện nhiều sovới quá khứ Maple version mới nhất đến thời điểm này là Maple 16
b Kiến trúc và chức năng
Phần lớn chức năng toán học của Maple được viết bằng ngôn ngữ Maple,
và được thông dịch bởi nhân Maple cho nên Maple là ngôn ngữ thông dịch NhânMaple được viết bằng C Maple chạy được trên tất cả các hệ điều hành Ngôn ngữlập trình Maple là một ngôn ngữ kiểu động Cũng giống như các hệ thống đại sốmáy tính, các biểu thức hình thức được lưu trữ trong bộ nhớ theo đồ thị không chutrình có hướng (DAG) Ngôn ngữ cho phép các biến có phạm vi nhất định (lexical
Trang 7scoping) Ngôn ngữ có hình thức lập trình hàm, nhưng cũng có hỗ trợ đầy đủ cholập trình truyền thống, theo kiểu mệnh lệnh Một điều mới đối với chương trìnhthương mại, đa số mã nguồn maple đều có thể xem tự do.
Với các chức năng cốt lõi, người dùng có thể nhập biểu thức toán học theocác ký hiệu toán học truyền thống Có thể dễ dàng tạo ra những giao diện ngườidùng tùy chọn Maple hỗ trợ cho cả tính toán số và tính toán hình thức, cũng nhưhiển thị Nhiều phép tính số học được thực hiện dựa trên thư viện số học NAG;trong Maple, các chương trình con NAG đã được mở rộng để cho phép độ chínhxác ngẫu nhiên lớn Các ví dụ về tính toán hình thức sẽ được trình bày trong phầnsau Maple cũng có một ngôn ngữ lập trình cấp cao đầy đủ Maple cũng cung cấpgiao tiếp cho những ngôn ngữ khác (C, Java, MatLab, Visual Basic, …)
Trang 8II Ứng dụng chương trình
1 Mô tả yêu cầu bài toán lập trình
Bài toán đặt ra là giải khảo sát hàm số của phương trình bậc 3 và phải nêucác kết quả của nó như chiều biến thiên, tính cực trị, tính lồi lõm, tính giới hạn
Các bước cơ bản của bài toán khảo sát hàm số y=f(x)=ax3 + bx2 + cx + dnhư sau:
2 Cấu trúc dữ liệu và hàm sử dụng trên công cụ maple
Để xét việc khảo sát hàm số, ta dùng một số hàm cung cấp sẵn của Maple như sau:
− Ngoài các kiểu hàm số, kiểu biến, còn sử dụng kiểu -infinity và (+)infinity
như kiểu -∞ và +∞
− Hàm diff tính đạo hàm cho một hàm số
− Hàm factor để phân tích biểu thức tổng thành tích các thừa số, biểu diễn rút
gọn cho người dùng để quan sát mô phỏng qua trình tính toàn
− Hàm solve để giải phương trình các bậc
− Hàm max, min cho hàm solve để tìm nghiệm lớn nhất và nhỏ nhất của
− Ngoài ra, còn dùng hàm plot để vẽ đồ thị hàm số của một biểu thức đại số
và quy định được độ lớn của trục tung và trục hoành
3 Thuật giải
Các bước của giải thuật việc khảo sát hàm số giống như yêu cầu bài toán đưa ra gồm cá bước như sau:
a Tìm miền xác định của hàm số, thường D=R
b Xét sự biến thiên của hàm số
Trang 9- Chiều biến thiên: tính đạo hàm y', xét dấu y' để suy ra chiều biến thiên đồthị hàm số.
- Cực trị: dựa vào chiều biến thiên tìm các điểm cực trị (nếu có) của đồ thịhàm số
- Tính lồi, lõm và điểm uốn: tính đạo hàm y'' và xét dấu y'' để tìm điểm uốncủa đồ thị hàm số (nếu có)
- Tính giới hạn: tính các giới hạn hàm số, tìm các điểm tiệm cận của hàm số(nếu có)
Trang 10c Vẽ đồ thị hàm số
- Vẽ các đường tiệm cận của hàm số (nếu có)
- Xác định các điểm đặc biệt của đồ thị hàm số: cực trị, các giao điểm của
độ thị với trục tọa độ (nếu có)
- Vẽ đồ thị hàm số
Trang 114 Viết đoạn code thủ tục.
Hàm khaoSatHamSo để khảo sát hàm số bậc 3 với 4 thông số a, b, c, d cho hàm số
y=f(x)=ax3 + bx2 + cx + d như sau:
>
Trang 145 Dữ liệu thử nghiệm
>
Trang 15>
Trang 17>
Trang 18>
Trang 19Kết Luận
Thông qua việc tìm hiểu môn học lập trình Symbolic này, em tìm hiểu cáchlập trình tính toán mới có thể giải quyết bài toán chuyên về lĩnh vực toán học cách nhanh chóng và hiệu quả thông qua ngôn ngữ Maple
Thông qua bài thu hoạch này, em mong muốn trình bày một ứng dụng Maple mô phỏng việc giải và biện luận toán của các chương trình máy tính như con người thông qua lập trình ngôn ngữ hình thức Và nếu khai thác tốt Maple, ta có được một công cụ mạnh mẽ trong việc dạy và học, nghiên cứu khoa học trong lĩnh vực toán học và có thể áp dụng nhiều lĩnh vực khác
Trang 20Tài Liệu Tham Khảo
1 Bài giảng PGS TS Đỗ Văn Nhơn
2 Problem Solving with Maple A Handbook, Carl Eberhart, Department ofMathematics University of Kentucky
3 Maple 16 User Guide và Maple 16 Programming Guide (download tại
Trang 21Nhận Xét Của Giáo Viên