Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 52 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
52
Dung lượng
159,5 KB
Nội dung
Luận Văn Tốt Nghiệp Đại Học TìmĐạoHàm Lời cảm ơn Xin trân trọng cảm ơn Trờng ĐH Vinh và khoa CNTT Trờng Đại Học Vinh đã tạo điều kiện tổ chức cho chúng em đợc thực hiện làm luận văn tốt nghiệp này. Cảm ơn tất cả các giáo viên đã từng giảng dạy em trong suốt thời gian học tại trờng để em có đợc kiến thức nh ngày hôm nay và cảm ơn sự động viên góp ý nhiệt tình của các bạn trong và ngoài lớp. Đặc biệt cảm ơn thầy giáo Tiến sỹ Nguyễn Trung Hòa trởng khoa CNTT đã tận tình hớng dẫn và giúp đỡ cho em trong suốt thời gian chuẩn bị và làm luận văn tốt nghiệp. Nếu không có thầy em khó có thể hoàn thành đợc tốt luận văn này. Trong quá trình làm luận văn mặc dù bản thân em đã rất cố gắng để hoàn thành tốt chơng trình trong khoảng thời gian cho phép, nhng không thể tránh đ- ợc những thiếu sót. Vì vậy, em rất mong đợc sự góp ý của các thầy cô và các bạn để chơng trình đợc hoàn thiện hơn. Vinh, ngày tháng năm 2005 Sinh viên: Lê Thị Thanh Hơng. Lê Thị Thanh Hơng. Lớp 41E4 Tin Khoa CNTT - Trờng ĐH Vinh. - 1 - Luận Văn Tốt Nghiệp Đại Học TìmĐạoHàm I- Đặt vấn đề: Lĩnh vực tin học mặc dù ra đời muộn hơn những lĩnh vực khác, song tốc độ phát triển của nó lại rất nhanh và ngày càng phát triển mạnh mẽ. Có thể nói rằng, ngày này công nghệ tin học đã xâm nhập vào tất cả các ngành tạo ra cho đời sống xã hội với một phơng thức hoạt động hoàn toàn mới mẻ, sáng tạo, nhanh chóng mà không làm mất đi sự chính xác. Đặc biệt đó là ứng dụng tin học vào lĩnh vực toán học để xử lý các bài toán nhanh chóng đa đến kết quả. Trong toán học, khái niệm đạohàm đã quen thuộc với chúng ta khi còn học phổ thông và chúng còn thờng xuyên đợc sử dụng. 1.1 - Vai trò củađạo hàm: 1.1.1 Trong thực tiễn , đạohàm có vai trò tơng đối quan trọng, bởi có một số vấn đề nếu không sử dụng đạohàm thì rất khó để giải quyết nh: Đối với chuyển động thẳng xác định bởi phơng trình S = f(t), thì vận tốc tức thời của một chất điểm tại thời điểm t 0 chính bằng đạohàmcủahàm số S = f(t) tại t 0 . V(t 0 ) = S(t 0 ) Gia tốc tức thời tại thời điểm t 0 của chuyển động thẳng lại chính là đạohàmcủahàm số biểu thị vận tốc tại thời điểm t 0 . a(t 0 ) = V(t 0 ) Hoặc khi ta cần tìm cờng độ dòng điện tức thời của dòng điện tại thời điểm t 0 ta chỉ cần tính đạohàmcủa điện lợng Q tại t 0 . I(t 0 ) = Q(t 0 ) Còn có nhiều ứng dụng khác sử dụng đến đạo hàm. Từ đó, ta có thể thấy đạohàm có thể giúp chúng ta giải quyết một số vấn đề trong cuộc sống 1.1.2 Trong lĩnh vực toán học khái niệm đạohàm rất quen thuộc. Phép tính đạohàm bắt nguồn từ bài toán tiếp tuyến. Bài toán này đợc đặt ra một cách tự Lê Thị Thanh Hơng. Lớp 41E4 Tin Khoa CNTT - Trờng ĐH Vinh. - 2 - Luận Văn Tốt Nghiệp Đại Học TìmĐạoHàm nhiên sau khi Đề các đã phát minh ra sự biểu diễn của các hàm số bằng đồ thị mà chúng ta đã đợc học ở chơng trình sơ cấp (xác định cực trị, điểm uốn). Khi lên đến chơng trình toán cao cấp ta vấn phải sử dụng đạohàm để giải một số các bài toán khác nh: giải gần đúng phơng trình một ẩn (phơng pháp Niu-tơn trong phơng pháp tính hay công thức Taylo). Nhng việc tìmđạohàm bằng ph- ơng pháp thủ công lại rất phức tạp. Vì vậy, chơng trình tìmđạohàmcủa một biểuthức tồn tại dới dạng chuỗi có thể giúp ngời sử dụng nhanh chóng tìm đợc đạohàm nhờ u điểm về tốc độ của máy tính. 1.2 - Các phơng pháp tính đạo hàm. 1.2.1 Phơng pháp tính gần đúng bằng số. + Ưu điểm: có thuật toán để tính nhanh, khai thác đợc khả năng của máy tính. + Nhợc điểm: sai số lớn và sai số càng bị tích lũy khi phải tính đạohàm cấp cao. 1.2.2 Phơng pháp tính đúng. + Ưu điểm: không có sai số phơng pháp, bởi cho đạohàm nh là một biểuthứccủahàm số và tận dụng đợc các kết quả lý thuyết về các phép toán củađạo hàm. + Nhợc điểm: khó xây dựng giải thuật và khó cài đặt. 1.3 Các tài liệu: 1.3.1 Hiện tại đã có một số phần mềm thể hiện việc tính biểuthứcđạohàm (Mathematica, Mathlab, Maple, ). Tuy nhiên, những phần mềm này là các hộp đen dới dạng tệp chơng trình EXE, nó chỉ giúp chúng ta thực hiện các yêu cầu nhng lại không cho chúng ta biết để làm đợc nh vậy thì phải sử dụng giải thuật nào. 1.3.2 Ngoài các phần mềm trên thì hiện nay cha có tài liệu nào trình bày về thuật toán và chơng trình nguồn thể hiện việc tính biểuthứcđạohàm đợc phổ biến ở Việt Nam. Lê Thị Thanh Hơng. Lớp 41E4 Tin Khoa CNTT - Trờng ĐH Vinh. - 3 - Luận Văn Tốt Nghiệp Đại Học TìmĐạoHàm Vì vậy, việc viết một chơng trình nguồn để tính đúng đạohàm dới dạng một biểuthức là có ích. Đây cũng là lý do em chọn đề tài này. II- Nội dung luận văn. 2.1- Bài toán đặt ra: Đầu vào là ngời sử dụng nhập một biểuthức và kết quả đầu ra là một biểuthứcđạohàmcủabiểuthức nhập vào. 2.2- Ph ơng pháp chung : Giải quyết bài toán đặt ra đạt đợc những yêu cầu sau: - Kết quả thu đợc chính xác và gọn nên khi tính đạohàm phải sử dụng kết quả đạohàmcủa tổng, hiệu, tích, thơng của các biểu thức, đạohàmcủa các hàm số cơ bản và của các hàm hợp. - Trong một số trờng hợp phức tạp phải khai thác đợc một số giải thuật có u thế có trong lập trình, đặc biệt là giải thuật đệ quy để có thể hình dung thuật toán rõ ràng. Từ đó, giải thuật đa ra sơ bộ nh sau: B ớc 1 : Nếu trong biểuthức cần tính đạohàm có chứa: - Các ký tự kiểu chữ hoa thì đổi ký tự đó sang chữ thờng. - Ký tự cách trống thì loại bỏ ra khỏi biểu thức. - Kiểm tra biểuthức đa vào có đúng là biểuthức toán học không (tức toán hạng, phép toán và các ký hiệu có đúng với quy tắc đã đặt ra). B ớc2 : Xét trong biểuthức cần tính đạohàm phép toán nào đợc thực hiện sau cùng (tức phép toán này sẽ dùng để tách thành các toán hạng tơng ứng với nó). B ớc 3 : Tách biểuthức đầu vào thành một hoặc hai biểuthức con và phép toán để thực hiện tính đạohàm tơng ứng với phép toán vừa tách. B ớc 4 : Khi biểuthức con là: + Các hàm số cơ bản thì đạohàm đợc gán kết quả (tức đệ quy ở mức cơ sở). + Các biểuthức con nhỏ hơn thì ta sử dụng giải thuật đệ quy để tính đạohàmcủabiểuthức con nhỏ hơn đó. Lê Thị Thanh Hơng. Lớp 41E4 Tin Khoa CNTT - Trờng ĐH Vinh. - 4 - Luận Văn Tốt Nghiệp Đại Học TìmĐạoHàm 2.3- Các giải thuật cụ thể: Khi thực hiện xử lý biểuthức cần tính đạohàm chúng ta phải tìm phép toán nào đợc thực hiện tìmđạohàm trớc để tiến hành tách biểuthức con (toán hạng) tơng ứng với phép toán đó: Nếu phép toán cần thực hiện là hai ngôi nh: + , - , / , ^ , log( , can( thì tách ra hai biểuthức con và một phép toán. + Biểuthức con đứng trớc phép toán gọi là toán hạng thứ nhất (bieuthuc1). + Biểuthức con đứng sau phép toán gọi là toán hạng thứ hai (bieuthuc2). Nếu phép toán đó là một ngôi nh là: sin( , cos( , tg( ,thì tách ra một biểuthức con (bieuthuc1) và một phép toán. Giải thuật khi xử lý mà chúng ta sử dụng là giải thuật đệ quy. Bởi các biểuthức con (toán hạng) đợc tách ra đó có thể rơi vào các trờng hợp là biến, hằng số (biểu thức số) hoặc biểuthức con có chứa biến. - Nếu là biến, hằng số hay biểuthức số. (Ví dụ: biểuthức số là (12-6/2) cũng đợc xem là hằng số tơng đơng với 9 nhờ vào hàm value) thì ta đa ra kết quả đạohàm trực tiếp (trờng hợp đệ quy ở mức cơ sở). - Nếu là biểuthức con chứa biến thì ta phải sử dụng đệ quy để tìmđạohàmcủabiểuthức con này. Ví dụ: Giả sử thủ tục tìmđạohàm là một hàm có tên dham và kết quả trả về là một chuỗi. a) Cho biểu thức: 12-x Ta tách đợc toán hạng thứ nhất là hằng số 12, toán hạng thứ hai là biến x và phép toán hai ngôi là dấu trừ thì kết quả trực tiếp là: dham(12-x)=-1. b) Cho biểu thức: (12*sin(2)+8/4)-x Ta tách đợc toán hạng thứ nhất là biểuthức số (12*sin(2)+8/4) và xem nó nh một hằng số, toán hạng thứ hai là biến x, phép toán là dấu trừ thì kết quả là: dham((12*sin(2)+8/4)-x)=-1. Lê Thị Thanh Hơng. Lớp 41E4 Tin Khoa CNTT - Trờng ĐH Vinh. - 5 - Luận Văn Tốt Nghiệp Đại Học TìmĐạoHàm c) Cho biểu thức: (12*sin(x)+8/4)-x Ta tách biểuthức thứ nhất là biểuthức con biến (12*sin(x)+8/4), biểuthức thứ hai là biến x và phép toán là dấu trừ thì ta phải sử dụng đệ quy để tìmđạohàmcủabiểuthức con có chứa biến. Khi đó, dham((12*sin(x)+8/4)-x)=dham((12*sin(x)+8/4)) + -1 2.3.1 - Giải thuật tách biểuthức thành phép toán và toán hạng. B ớc 1 : Xét lần lợt từng ký tự từ trái sang phải củabiểu thức, bắt đầu từ ký tự đầu tiên. Các khả năng xảy ra với ký tự đang xét: a) Chữ số từ 0-9, chữ cái từ a-z hoặc dấu chấm (.) thì ta ghép ký tự đó vào cuối chuỗi đợc cất trong biến trung gian tu. b) Dấu chấm than (!) và nội dung của biến trung gian là chuỗi số thì ta ghép dấu ! vào cuối chuỗi cất trong biến trung gian. Còn nếu nội dung của biến trung gian đó khác biểuthức số thì thông báo Phải nhập giai thừa của một số. c) Ngoặc mở ( - Ghép ký tự đó vào cuối chuỗi đợc cất trong biến trung gian tu. - Tăng biến đếm số lần xuất hiện ngoặc lên 1. - Nếu nội dung trong biến trung gian tu mà không thuộc dạng: sin(, cos(, can(, và biến đếm ngoặc mở bằng 1 (ngoac=1) ta kiểm tra: Nếu trong biến trung gian không có sự xuất hiện các phép toán: +,- ,*,/,^,! thì thông báo Hàm nhập vào sai. - Nếu nội dung trong biến trung gian tu mà có dạng: sin(, cos(, can(, biến đếm ngoặc mở bằng 1 (ngoac=1) và dau bằng rỗng thì ta gán giá trị của biến trung gian cho biến cất phép toán là dau và xóa biến trung gian về rỗng. d) Dấu phẩy (,) - Nếu biến đếm ngoặc bằng 0 thì thông báo Dấu phẩy nhấp không đúng. - Nếu biến đếm ngoặc bằng 1 ta kiểm tra biến dấu (phép toán): + Phép toán có dạng can( hoặc log( thì Lê Thị Thanh Hơng. Lớp 41E4 Tin Khoa CNTT - Trờng ĐH Vinh. - 6 - Luận Văn Tốt Nghiệp Đại Học TìmĐạoHàm Gán nội dung trung gian trong biến tu cho biến bieuthuc1 lu toán hạng thứ nhất. Xóa biến trung gian tu về rỗng. + Phép toán có dạng hàm một ngôi nh: sin(, cos(, arctan(, thì thông báo Hàm sơ cấp này không có dấu phẩy. + Phép toán có dạng + , - , * , / , ^ thì ghép ký tự , vào sau biến vào cuối chuỗi đợc cất trong biến trung gian tu. - Nếu biến đếm ngoặc khác 1 thì ghép ký tự , vào sau biến vào cuối chuỗi đợc cất trong biến trung gian tu. e) Ngoặc đóng ) - Nếu phép toán là can( hoặc log(, biến trung gian khác rỗng, bieuthuc1, bieuthuc2 đều bằng rỗng và biến đếm ngoặc bằng 1 thì thông báo Hàm căn hoặc log nhập sai. - Nếu ký tự đang xét là ký tự cuối cùng, biến đếm ngoặc 1, biến dau chứa phép toán là các hàm cơ bản dạng sin(, cos( ,can(, log(, và toán hạng thứ nhất (bieuthuc1) khác rỗng thì ta chỉ cần giảm biến đếm ngoặc đi 1. - Ngợc lại, ghép ký tự ) vào cuối chuỗi cất trong biến trung gian tu và giảm biến đếm ngoặc đi 1. f) Phép toán hai ngôi + , - , * , / , ^ : - Nếu biến đếm ngoặc là 0. + Phép toán sau cùng củabiểuthức ở thời điểm hiện tại (cất trong biến dau) là phép toán một ngôi dạng sin(, cos(, tg(,thì ghép chuỗi (phép toán) trong biến dau vào đầu chuỗi cất trong biến trung gian tu tạo thành toán hạng thứ nhất (bieuthuc1), phép toán sau cùng bây giờ sẽ là ký tự đang xét, xóa biến tu về rỗng. + Phép toán sau cùng củabiểuthức đang xét ở thời điểm hiện tại (cất trong biến dau) là phép toán hai ngôi dạng can( hoặc log( thì ta nối chuỗi (phép toán) trong biến dau vào đầu nội dung trong biến bieuthuc1, còn ký tự ,, nội Lê Thị Thanh Hơng. Lớp 41E4 Tin Khoa CNTT - Trờng ĐH Vinh. - 7 - Luận Văn Tốt Nghiệp Đại Học TìmĐạoHàm dung trong biến trung gian tu tạo thành biểuthức một (toán hạng) và ) vào cuối. Phép toán cần tìmđạohàm sẽ là ký tự đang xét và xóa biến trung gian tu về rỗng. Ví dụ: dau=can( bieuthc1=4 tu=x+1 Kết quả sau khi nối biethuc1=can(4,x+1). + Phép toán lu trong biến dau cũng là phép toán hai ngôi + , - , * , / , ^ thì xét thứ tự u tiên giữa phép toán là ký tự đang xét và phép toán đợc cất trong biến dau: Thứ tự u tiên của phép toán trong biến dau lớn hơn hoặc bằng thứ tự u tiên của phép toán là ký tự đang xét thì Ta nối phép toán trong biến dau cùng với nội dung cất trong biến trung gian tu vào sau toán hạng thứ nhất cất trong biến bieuthuc1. Phép toán cần tìmđạohàm bây giờ sẽ là ký tự đang xét. Xóa biến trung gian tu về rỗng. Ngợc lại, nối ký tự đang xét vào cuối chuỗi cất trong biến trung gian tu. + Phép toán trong biến dau là xâu rỗng thì Phép toán cần tìmđạohàm sẽ chính là ký tự đang xét. Ta cất ký tự đang xét vào trong biến dau, toán hạng thứ nhất (bieuthuc1) sẽ là nội dung cất trong biến trung gian tu. Xóa tu về rỗng. - Nếu biến đếm ngoặc bằng 1 thì ghép ký tự đang xét vào cuối chuỗi cất trong biến trung gian tu. B ớc 2 : Khi đã xét xong ký tự cuối cùng thì kiểm tra phép toán trong biến dau: Lê Thị Thanh Hơng. Lớp 41E4 Tin Khoa CNTT - Trờng ĐH Vinh. - 8 - Luận Văn Tốt Nghiệp Đại Học TìmĐạoHàm - Nếu phép toán trong biến dau là phép toán một ngôi nh sin(, cos(, hoặc biến dau chứa xâu rỗng thì toán hạng thứ nhất bằng nội dung trong biến trung gian tu. Ví dụ: Tìmđạohàmcủabiểu thức: A= x thì khi tách bieuthuc1=x còn phép toán bằng rỗng và bieuthuc2 cũng bằng rỗng. - Phép toán trong biến dau là phép toán hai ngôi nh can(, log(, + , - , * , / , ^ thì ta gán biểuthức hai (toán hạng) bằng nội dung trong biến trung gian tu. Các ví dụ sau khi tách chuỗi biểu thức: a) Cho biểu thức: sin(x+1) thì sau khi tách dau=sin( bieuthuc1=x+1 bieuthuc2= b) Cho biểu thức: can(2,x+5) thì sau khi tách dau=can( bieuthuc1=2 bieuthuc2=x+5 c) Cho biểu thức: 25+x^2-8*x thì sau khi tách dau=+ bieuthuc1=25 bieuthuc2=x^2-8*x d) Cho biểu thức: 25+x^2+8*x thì sau khi tách dau=+ bieuthuc1=25+x^2 bieuthuc2=8*x 2.3.2 - Giải thuật xử lý biểuthức cần tính đạo hàm. Tách biểuthức cần tính đạohàm thành phép toán và toán hạng: 2.3.2.1 Phép toán không ngôi (kết quả sau khi tách không có phép toán chỉ có một toán hạng). 2.3.2.1.1 Toán hạng là biến thì kết quả đạohàm là 1. Ví dụ: x thì đạohàm sẽ là 1. Lê Thị Thanh Hơng. Lớp 41E4 Tin Khoa CNTT - Trờng ĐH Vinh. - 9 - Luận Văn Tốt Nghiệp Đại Học TìmĐạoHàm 2.3.2.1.2 Toán hạng là hằng số thì kết quả đạohàm là 0. Ví dụ: 204 đạohàm sẽ bằng 0. 2.3.2.1.3 Toán hạng là biểuthức con chứa biến mà hai đầu là cặp dấu ngoặc đơn đóng một biểuthức con nhỏ hơn thì ta thực hiện loại bỏ cặp dấu ngoặc đơn ở hai đầu. Sau đó, tách biểuthức đã loại bỏ cặp dấu ngoặc đơn và tiếp tục kiểm tra cho đến khi gặp trờng hợp đệ quy ở mức cơ sở hoặc tồn tại phép toán một hoặc phép toán hai ngôi. 2.3.2.2 Phép toán một ngôi (kết quả sau khi tách là một toán hạng và một phép toán). 2.3.2.2.1 Toán hạng (bieuthuc1) là biến. Ta xét từng trờng hợp cụ thể của phép toán có các dạng sau: - sin( thì đạohàm tơng ứng với nó là cos(+ bieuthuc1 +) - cos( thì đạohàm tơng ứng với nó là -sin(+ bieuthuc1 +) - arctan( thì đạohàm tơng ứng với nó là '1/(1+' + bieuthuc1 + '^2)' - arcotg( thì đạohàm tơng ứng với nó là '-1/(1+'+bieuthuc1+'^2)' - arccos( thì đạohàm tơng ứng với nó là '-1/can(2,1-'+bieuthuc1+'^2)' - arcsin( thì đạohàm tơng ứng với nó là '1/can(2,1-'+bieuthuc1+'^2)' - sqr( thì đạohàm tơng ứng với nó là '2*'+bieuthuc1 - ln( thì đạohàm tơng ứng với nó là '1/'+bieuthuc1 - exp( thì đạohàm tơng ứng với nó là 'exp('+bieuthuc1+')' - sqrt( thì đạohàm tơng ứng với nó là '1/(2*can(2,'+bieuthuc1+'))' - tg( thì đạohàm tơng ứng với nó là '1/cos('+bieuthuc1+')^2' - cotg( thì đạohàm tơng ứng với nó là '1/sin('+bieuthuc1+')^2' - log( thì đạohàm tơng ứng với nó là '1/('+bieuthuc1+'*ln(10))' 2.3.2.2.2 Toán hạng (bieuthuc1) là hằng số hoặc biểuthức số thì đạohàm sẽ là 0 (trừ trờng hợp hàm cotg() là vô nghĩa). 2.3.2.2.3 Toán hạng là (bieuthuc1) là biểuthức con chứa biến thì Lê Thị Thanh Hơng. Lớp 41E4 Tin Khoa CNTT - Trờng ĐH Vinh. - 10 -