1. Trang chủ
  2. » Luận Văn - Báo Cáo

Báo Cáo Môn Học Lập Trình Symbolic CHƯƠNG TRÌNH HỖ TRỢ GIẢI TOÁN NGUYÊN HÀM SỬ DỤNG CƠ SỞ TRI THỨC VÀ MAPLE

12 618 2

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 12
Dung lượng 723 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Lời Nói ĐầuTrong chương trình toán học phổ thông, bài toán tìm nguyên hàm hay tính tích phân của một hàm cho trước là một trong những dạng bài toán khó.. Để hỗ trợ các học sinh cho việc

Trang 1

ĐẠI HỌC QUỐC GIA THÀNH PHỐ HỒ CHÍ MINH TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN

Phòng Sau Đại Học



Báo Cáo Môn Học Lập Trình Symbolic CHƯƠNG TRÌNH HỖ TRỢ GIẢI TOÁN NGUYÊN HÀM

SỬ DỤNG CƠ SỞ TRI THỨC VÀ MAPLE

Giảng viên hướng dẫn: PGS.TS Đỗ Văn Nhơn

Học viên thực hiện: Đỗ Duy Phúc

Mã số học viên: CH1101122

Lớp: Cao Học K6

TP.HCM, tháng 1 năm 2013

Trang 2

M c L c ục Lục ục Lục

Lời Nói Đầu 3

Phần 1 Giới Thiệu 4

Phần 2 Phần Nhân Tính Toán Bằng Maple 4

2.1 Module các nguyên hàm cơ bản 4

2.2 Module biến đổi biểu thức 4

2.3 Module tích phân tính sẵn 5

2.4 Module đổi biến vô tỉ và lượng giác 5

Phần 3 Giao Diện Chương Trình 9

Kết Luận 11

Tài Liệu Tham Khảo 12

Trang 3

Lời Nói Đầu

Trong chương trình toán học phổ thông, bài toán tìm nguyên hàm (hay tính tích phân) của một hàm cho trước là một trong những dạng bài toán khó Để giải được ta cần phải xác định dạng của hàm cần tìm nguyên hàm Sau đó áp dụng các biện pháp biến đổi khác nhau để đưa hàm về các dạng có thể giải được Cuối cùng mới áp dụng các phương pháp giải phù hợp để tìm kết quả Đây là một quá trình nhiều bước, áp dụng nhiều kiến thức toán, cho nên nhiều học sinh phổ thông khi giải dạng bài toán này có cảm giác rất khó khăn

Để hỗ trợ các học sinh cho việc học giải các bài toán tìm nguyên hàm một cách thú vị hơn, mục tiêu của báo cáo này là xây dựng một chương trình hỗ trợ giải các bài toán tìm nguyên hàm cho các hàm ở nhiều dạng khác nhau Chương trình có ứng dụng bộ máy tính toán của chương trình Maple để hỗ trợ tính toán và trình bày kết quả thông qua giao diện được xây dựng bằng thư viện NET (bằng ngôn ngữ C#)

Với sự thân thiện quen thuộc của giao diện window của NET và sự mạnh mẽ của bộ máy tính toán của Maple, chương trình giúp cho việc giải các bài toán tìm nguyên hàm trở nên dễ dàng, trực quan hơn rất nhiều

Trang 4

Phần 1 Giới Thiệu

Chương trình được chia làm hai phần chính: phần lõi tính toán và phần giao diện trình bày Phần lõi của chương trình được viết bằng Maple là phần quan trọng nhất, là bộ não của chương trình Trong khi phần giao diện window bằng NET lại mang đến cho người dùng sự thân thiện, trực quan dễ dàng thao tác

Phần 2 Phần Nhân Tính Toán Bằng Maple

Phần nhân tính toán này được kết hợp từ nhiều module Mỗi module được dùng để tính tích phân cho hàm số đầu vào ở một dạng cụ thể Phần này gồm có bảy module Các tập tin chứa source code Maple của các module này có thể tìm thấy trong thư mục

“Source_Code\ Module Core (Maple)\” Chi tiết các module được miêu tả sau đây

2.1 Module các nguyên hàm cơ bản

Đây là module dùng để tìm nguyên hàm của các hàm số cơ bản được liệt kê trong bản công thức tính tích phân, như: hàm đa thức, hàm lượng giác, hàm logarit, … Module này được lưu trong tập tin “Module NguyenHamCoBan.mw”

2.2 Module biến đổi biểu thức

Module này dùng để đưa biểu thức dưới dấu tích phân về dạng đơn giản hơn để có thể lấy nguyên hàm Nói một cách khác module đưa biểu thức về dạng tích phân các hàm

cơ bản Bên cạnh đó nó còn cho phép đổi biến nếu cần thiết

Module gồm hai thành phần: tập tin cơ sở tri thức Equations.txt và thủ tục

ApplyEquation trong tập tin “Module BienDoiBieuThuc.mw”.

Cấu trúc của tập tin Equations.txt bao gồm nhiều đẳng thức, mỗi đẵng thức bắt đầu

bằng dòng ‘Equation N’ với N là số thứ tự của đẳng thức đó Các đẵng thức này dùng

để so khớp dạng của hàm được input và biến đổi thành dạng đơn giản hơn để có thể tính được Mỗi đẵng thức có cấu trúc gồm:

- lhs: left hand side – biểu thức đầu vào cần so khớp

- rhs: right hand side – biểu thức đầu ra, hay biểu thức được trả về

- newVar: biến mới nếu có đổi biến Ở đây biểu diễn đẵng thức đổi biến

Trang 5

- cond: điều kiện để đạt được đẳng thức nếu có.

Ví dụ:

Equation 5 // đẳng thức thứ 5

lhs : N*(x^2+p*x+q)^m //biểu thức đầu vào so sánh

rhs : N*(u^2+a^2)^m // biểu thức đầu ra

newVar: u = x+p/2 ; a^2= q-p^2/4 // các đẳng thức đổi biến

cond : q-p^2/4>0 // điều kiện

Kỹ thuật so khớp chủ yếu sử dụng là hàm match của Maple

2.3 Module tích phân tính sẵn

Module này dùng để đưa ra lời giải cho các bài toán tính nguyên hàm không thể tính

bằng các luật đã đưa ra Module gồm một thủ tục TichPhanTinhSan trong tập tin

“Module TichPhanTinhSan.mw” Nó so khớp biểu thức đưa vào nếu có biểu thức

tương ứng thì sẽ trả về lời giải cho bài toán

2.4 Module đổi biến vô tỉ và lượng giác

Module này dùng để đổi biến cho các bài toán có chứa các hàm lượng giác và hàm vô

tỉ Trong đó:

- Các hàm lượng giác được đổi biến như ví dụ sau: t = tan(x/2)

 sin(x) = 2*t/(1+t^2)

 cos(x) = (1-t^2)/(1+t^2)

 tan(x) = 2*t/(1-t^2)

 cotan(x) (hay cot(x)) = (1-c^2)/(2*c)

- Các hàm vô tỉ:

Nếu biểu thức dưới dấu tích phân có chứa ((a*x+b)/(c*x+d))^m với m là số hữu tỉ Đặt t = ((a*x+b)/(c*x+d))^m

Module gồm một thủ tục DBVoTiVaLGiac trong tập tin “DB VoTiVaLGiac.mw”

Trang 6

2.5 Module tích phân từng phần

Giả sử ta muốn tính hàm trong trường hợp f là hàm số phức tạp, không tính trực tiếp được các nguyên hàm, thì tách f(x)dx thành 2 thành phần u và dv (f(x)dx = u*dv) bằng cách áp dụng công thức:

Đây là các dạng chính của hàm f(x) được tổng hợp từ các bài toán tích phân từng phần, khi chương trình so khớp biểu thức đúng với một trong các dạng này, áp dụng trực tiếp để tính u, v

a)

Đặt u = , dv = dx

b) trong đó f là một hàm đa thức

Đặt u = lnng(x), dv = f(x)*d(x)

c) Arctan(g(x)) hoặc f(x)*arctan(g(x))

d) G(x)*sin(n*x) hoặc g(x)*cos(n*x)

e) en*x*sin(x)

f) g(x)*ex

g) sin(ln(x)) hoặc cos(ln(x))

Với những dạng cơ bản này thì kết quả trả về (danh sách chứa các lời giải của bài toán) chỉ có 1 phần tử

2.6 Module các hàm định hướng heuristic

Các dạng cơ bản nói trên không phải là tất cả các dạng bài tập vì thực tế còn những dạng khác( thường là mở rộng của những dạng trên) có thể áp dụng tích phân từng phần nên về nguyên tắc cho việc áp dụng tích phân từng phần là tích phân mới sinh ra phải đảm bảo đơn giản hơn về tích toán so với tích phân ban đầu Song việc đưa ra một tiêu chuẩn để xác định độ phức tạp về tính toán của việc tính tích phân của một

Trang 7

hàm số khi chưa tính toán cụ thể các bước giải là khá khó khăn, vì vậy ở đây ta tiếp cận vấn đề theo một hướng khác, sát với lối tư duy và giải toán của con người hơn:

Sử dụng những định hướng tìm lời giải có tính kế thừa, những định hướng này được

áp dụng khi hàm số không thuộc các dạng cơ bản nói trên Chương trình nhận dạng một số đặc điểm đặc trưng của hàm số từ đó có cách đặt biến thích hợp Vì sử dụng những đặc trưng nên cũng có thể cho ra nhiều hướng giải khác nhau, có thể 1 trong số

đó đúng, cũng có thể không hướng nào đúng, và kết quả trả về có thể ko có phần tử nào, bằng một hoặc nhiều hơn một phần tử

2.7 Module tổng hợp

Đây là thủ tục chính của chương trình Thủ tục này chứa các luật biến đổi biểu thức tổng quát và kết hợp với tất cả module còn lại Thủ tục này có cấu trúc chính là vòng lặp chứa các luật với thứ tự như sau:

1) TQ1 (Luật tổng quát 1): Nếu tới một bước giải nào đó, ta tra ngược lại các bước giải trước nếu bước giải mới tìm được kết hợp với bước giải trước có dạng Int(f(x)) = g(Int(f(x)) thì ta giải phương trình tìm Int(f(x)) (với Int là kí hiệu bằng text của dấu tích phân) Luật này thường dùng phối hợp với tích phân từng phần để tìm kết quả Cho nên trước khi áp dụng tích phân từng phần,

ta lưu vết biểu thức trước khi áp dụng Các biểu thức này sẽ được so sánh với các bước giải con sau này

2) Tìm nguyên hàm cho các hàm số dạng cơ bản Nếu không tìm được trả về 0 3) TQ2: Nếu bài toán có dạng Int(A*f(x)) chuyển thành A*Int(f(x))

4) Ứng dụng tích phân tính sẳn Nếu không tìm được trả về 0

5) Ứng dụng biển đổi biểu thức Nếu không có đẳng tương ứng trả về 0

6) Ứng dụng tích phân từng phần cho các dạng biết trước Nếu không tìm được dạng thích hợp trả về list rỗng []

7) Ứng dụng đổi biến vô tỉ và lượng giác Nếu không có sự thay đổi trả về 0 8) TQ3: nếu biểu thức dưới dấu tích phân là tích các đa thức thì phân phối các đa thức với nhau

9) TQ4: nếu biểu thức dưới dấu tích phân có dạng tổng thì phân phối dấu tích phân vào từng hạng tử

Trang 8

10)TQ5: nếu biểu thức dưới dấu tích phân là phân thức thì biến đổi thành tổng các phân thức cơ bản (dùng hàm convert/parfrac của maple)

11)TQ6: nếu bài toán có dạng A*Int(B*f(x)) với A, B là hằng số, biến đổi biểu thức thành A*B*Int(f(x))

12)TQ7: nếu bài toán có dạng A*Int(f(x)), ta tìm nguyên hàm cho f(x) (ở đây dùng

kĩ thuật đệ quy) Khi đó ta được F(x) là nguyên hàm tìm được, tiếp theo ta có A*F(x)

13)TQ8: nếu bài toán có dạng tổng thì ta lần lượt tìm nguyên hàm cho các hạng tử còn dấu tích phân Do đó, tại đây ta có nhiều bài toán con, mỗi bài toán con sử dụng đệ quy thủ tục tổng hợp để tìm nguyên hàm Khi đã tìm được tất cả kết quả, ta lấy tổng tất cả kết quả lại

Vòng lặp trong thủ tục sẽ lặp lại cho đến khi nào biểu thức đưa vào có sự thay đổi và còn dấu tích phân (Int) trong biểu thức

Module tổng hợp gồm hai thủ tục INT (thủ tục chính) và Prim (Primitive - thủ tục này

dùng để trình bày lại lời giải đơn giản cho người dùng) nằm trong tập tin “Module TongHop.mw”.

Trang 9

Phần 3 Giao Diện Chương Trình

Giao diện của chương trình được xây dựng bằng thư viện NET, giồm có hai phần chính:

- Một là cửa sổ dùng để nhập hàm số cần tính tích phân

- Cửa sổ còn lại dùng để trình bày lời giải

Một số ví dụ dùng để làm input cho chương trình như sau:

3*x^2+5*x+1 # Hàm đa thức

x/(4*x^2+3)^2 # Đổi biến đơn giản

1/(1+x^3) # Phân thức phức tạp, đổi biến 2 lần

ln(x)*x # tptp đơn giản

exp(x)*sin(x) # Sử dụng công thức f = a+b*f => f = a/(1-b) 3*x/cos(x)^2 # tptp dùng kết quả bài trên

tan(x)/(3*cos(x)+4*sin(x)+5) # Đổi biến lượng giác đơn giản

Trang 11

Kết Luận

Chương trình xây dựng được có thể giải được phần lớn các bài toán tìm nguyên hàm của các hàm số đơn giản Chương trình kết nối đã và sử dụng được sức mạnh tính toán của Maple kết hợp với giao diện trực quan thân thiện của NET Tốc độ giải của các bài toán là tương đối nhanh (trong vòng 5-10 giây)

Hạn chế của chương trình là vẫn còn chưa thể giải hết tất cả các dạng bài toán phức tạp còn lại Cấu trúc tri thức sử dụng vẫn còn chưa rõ ràng dễ hiểu cho người dùng có thể thay đổi được

Hướng phát triển tiếp theo có thể nghiên cứu bổ sung thêm các module để giải các dạng hàm số phức tạp hơn mà hiện chưa giải được Xây dựng cơ sở tri thức rõ ràng hơn và bổ sung module tra cứu tri thức cho chương trình

Trang 12

Tài Liệu Tham Khảo

[1] Đỗ Văn Nhơn, Tài liệu môn học Lập Trình Symbolic, 2013

[2] Đỗ Văn Nhơn, Maple Guide

[3] Maple Help

Ngày đăng: 10/04/2015, 01:25

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w