TÌM HIỂU LẬP TRÌNH SYBOLIC XÂY DỰNG ỨNG DỤNG DEMO Giải Và Biện Luận Phƣơng Trình Bậc 2 Theo Tham Số m

24 534 0
TÌM HIỂU LẬP TRÌNH SYBOLIC XÂY DỰNG ỨNG DỤNG DEMO Giải Và Biện Luận Phƣơng Trình Bậc 2 Theo Tham Số m

Đ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

ĐẠI HỌC QUỐC GIA THÀNH PHỐ HỒ CHÍ MINH CHƢƠNG TRÌNH ĐÀO TẠO THẠC SĨ CNTT QUA MẠNG -  - TÌM HIỂU LẬP TRÌNH SYBOLIC XÂY DỰNG ỨNG DỤNG DEMO Giải Và Biện Luận Phƣơng Trình Bậc Theo Tham Số m Bộ môn : Lập trình Symbolic GVHD : PGS-TS Đỗ Văn Nhơn Thực : Nguyễn Khánh Ngọc CH1001117 Thành phố Hồ Chí Minh - Tháng Năm 2012 NHẬN XÉT CỦA GIẢNG VIÊN HƢỚNG DẪN MỤC LỤC Phần I: Giới Thiệu Lập Trình Symbolic I Đặt vấn đề II Giới thiệu Maple III Lập trình Maple Phần II: Giải Và Biện Luận Phƣơng Trình Bậc Theo Tham Số m I Giải phương trình bậc II Biện luận phương trình bậc theo m III Kết nối C# với Maple 14 Kết nối với Maple 14 Giao diện thực chương trình C# 16 Phần 3: Kết luận Tài liệu tham khảo 21 GVHD: PGS.Ts Đỗ Văn Nhơn Họ Tên: Nguyễn Khánh Ngọc MSHV: CH1001117 Phần I: Giới Thiệu Lập Trình Symbolic I Đặt vấn đề Hiện ngôn ngữ lập trình C#, C++, java hay ngôn ngữ lập trình cấp cao khác ngôn ngữ thịnh hành lựa chọn ngôn ngữ phát triển cho nhiều phần mềm Chúng coi ngôn ngữ có tính biểu đạt cao, an toàn, thời gian phát triển nhanh, làm giảm nhiều chi phí bảo trì, phát triển phần mềm Ngôn ngữ cấp cao gần gũi với ý niệm ngôn ngữ mà hầu hết người biết, bao gồm danh từ, động từ, liên hệ thao tác luận lý Các yếu tố phối hợp, liên kết với tạo thành hình thức câu Các câu gọi mệnh đề chương trình (program statement) Chính đặc điểm này, lập trình viên dễ dàng đọc dễ học ngôn ngữ cấp cao so với ngôn ngữ máy hợp ngữ Nhưng hầu hết ngôn ngữ lập trình không hỗ trợ hỗ trợ hạn chế lập trình tính toán hình thức, không hỗ trợ cấu trúc liệu để diễn đạt định lý, công thức toán học, ngôn ngữ lập trình việc tính toán xác Vì việc đời công cụ lập trình Maple,Matlab, Mathematica … khắc phục nhược điểm ngôn ngữ lập trình Trong Maple phần mềm hãng Waterloo Đây công cụ tuyệt vời hỗ trợ cho việc học tập nghiên cứu toán học Không dừng lại việc hỗ trợ tính toán, Maple 10.0 trở đi, có khả lập trình Ở phương diện , xem Maple ngôn ngữ lập trình tạo chương trình gói (package) để tái sử dụng Một tính hay bật Maple hợp tác với ngôn ngữ chủ (host language) VB6.0,VB.Net, Java Khả đặc biệt Maple giúp thực phần mềm (tính tóan , hỗ trợ dạy/học tóan ) đuợc viết mã ngôn ngữ chủ liên kết với Maple để thực tác vụ tóan học phức tạp mà đòi hỏi nhiều kĩ lập trình Tuy nhiên công cụ Maple,Matlab, Mathematica … mạnh tính toán hình thức, chúng lại có nhược điểm xử lý giao diện Như kết hợp ngôn ngữ lập trình cấp cao C#, VB.NET, Java để xử lý giao diện, xử lý tính toán phức tạp, chuyển qua cho Maple xử lý, kết trả C# tiếp nhận xử lý hiển thị giao diện Đây mục tiêu nghiên cứu tiểu luận Bài tiểu luận minh họa trình kết nối làm việc C# Maple để giải toán “Giải Và Biện Luận Phương Trình Bậc Theo Tham Số m” Trang GVHD: PGS.Ts Đỗ Văn Nhơn Họ Tên: Nguyễn Khánh Ngọc MSHV: CH1001117 II Giới thiệu Maple Maple ngôn ngữ hỗ trợ mô toán học Kiểu tính toán Maple biết nhiều tên khác : Algebraic manipulation, Symbolic computation, Computer algebra … Đặc điểm ngôn ngữ có khả năng, cách ẩn hiện, tiến hành tính toán mà phần tử không thiết phải gán giá trị Một đặc điểm khác có khả hình thành phép đơn giản, rút gọn biểu thức, phép biến đổi khác, thực phần tử chưa gán giá trị Chẳng hạn, > f:=x^3-y^3 ; 𝑓 ≔ 𝑥3 − 𝑦3 > factor(f) ; 𝑓 ≔ 𝑥 − 𝑦 (𝑥 + 𝑥𝑦 + 𝑦 ) Ai quen với ngôn ngữ lập trình truyền thống Fortran, Pascal, C … thấy ký hiệu ví dụ dùng cho hai mục đích khác : ký hiệu f dùng biến, gán giá trị, ký hiệu x, y dùng ẩn, chưa có giá trị Trong Maple, câu lệnh thường gán giá trị sau có thể, chẳng hạn, câu lệnh : a:=1 ; gán giá trị cho a Nếu câu lệnh sau : x:= a + b ; giá trị 1+b gán cho tên x, : b:=-1 ; f:= sin(x) ; làm cho x có giá trị , giá trị gán vào biểu thức f (lưu ý sin(0) tự động “rút gọn” ) Và ta lại thực câu lệnh : b:=0 ; g:=sin(x) ; giá trị x sin(1) gán cho g (Lưu ý sin(1) xem ký hiệu (symbol) hình thức, không tự động tính giá trị, ta tính giá trị số dể dàng lệnh evalf) 1.1 Các tính Maple Có thể nêu vắn tắt chức Maple sau:  Là hệ thống tính toán biểu thức đại số; Trang GVHD: PGS.Ts Đỗ Văn Nhơn Họ Tên: Nguyễn Khánh Ngọc MSHV: CH1001117  Có thể thực hiệc hầu hết phép toán chương trình toán đại học phổ thông;  Cung cấp công cụ minh họa hình học thuận tiện gồm: vẽ đồ thị tĩnh động đường mặt cho hàm tùy ý nhiều hệ tọa độ khác nhau;  Một ngôn ngữ lập trình đơn giản mạnh mẽ có khả tương tác với ngôn ngữ lập trình khác;  Cho phép trích xuất định dạng khác LaTex, Word, HTML,  Một công cụ biên soạn giáo án giảng điện tử, thích hợp với lớp học tương tác trực tiếp; trợ giáo hữu ích cho học sinh sinh viên việc tự học 1.2 Cấu trúc giao diện Cấu trúc tài nguyên Maple  Khi hởi động Maple , chương trình tự động kích hoạt nhân Maple bao gồm phép toán chức Phần nhân chiếm khoảng 10% dung lượng toàn chương trình  Các liệu chương trình lại Maple lưu giữ thư viện Maple chia nhóm: nhóm lệnh nhóm gói lệnh Maple 9.0 có khoảng 85 gói lệnh Gói lệnh nạp vào bằng: > with(plots): Lệnh Maple  Lệnh gõ vào trang làm việc ( worksheet) dấu nhắc lệnh " >" theo ngầm định hiển thị font Courier màu đỏ Một lệnh đựợc kết thúc dấu " :" dấu ";" lệnh thực việc nhấn Enter trỏ dòng lệnh > factor(2*x^102+x^100 -2*x^3-x+60*x^2+30):  Kết lệnh hiển thị bên dòng lệnh dùng dấu " ;" Có thể dễ dàng dùng chuột bàn phím để thực chức bôi đen, copy, paste, cut, delete liệu dòng lệnh hay kết thực Sử dụng dịch vụ trợ giúp ( Help) Maple Maple có dịch vụ trợ giúp đầy đủ thuận lợi bao gồm cú pháp, giải thích cách dùng vàcác ví dụ kèm Để nhận trợ giúp, có thể:  Nếu biết tên lệnh từ dấu nhắc gõ vào > ?factor Trang GVHD: PGS.Ts Đỗ Văn Nhơn Họ Tên: Nguyễn Khánh Ngọc MSHV: CH1001117  Nếu dùng gói lệnh nạp gói lệnh, Maple hiển thị toàn lệnh gói  Một cách thông dụng dùng trình Help|Topic Search gõ vào từ khóa cần tìm 1.3 Lưu giữ trích xuất liệu Trang làm việc Maple lưu giữ file có đuôi ".mws" File lưu giữ trình File|Save Một file có mở File|Open Ngoài việc lưu giữ định dạng Maple trên, liệu trích xuất thành định dạng khác Word, LaTex hay HTML Tr ích xuất File|Export 1.4 Các môi trường làm việc Maple Maple có môi trường làm việc toán văn Sau khởi động, Maple tự động bật môi trường toán Muốn chuyển sang môi trường văn bản, kích chuột vào biểu tượng T công cụ hay vào trình Insert->Text Ngược lại, từ môi trường văn bản, kích chuột vào dấu "[>" công cụ hay vào Insert để chuyển sang môi trường toán > ifactor(58600); III Lập trình Maple Một vấn đề quan trọng hệ Maple ngôn ngữ lập trình Maple, dùng để tạo chương trình con, hàm, thủ tục thư viện riêng (Packages) Lưu ý: Các chương trình viết Maple soạn thảo trình soạn thảo text khác Maple text, viết Maple sau đánh xong dòng lệnh, nhấn phím SHIFT+ENTER, máy không thực lệnh mà đưa trỏ xuống hành dấu nhắc để ta viết lệnh … Sau viết xong tất lệnh cần thiết, ta nhấn ENTER, tất lệnh thực từ xuống Nếu đoạn chương trình thủ tục (procedure) hay hàm (function), ta xử dụng liền Muốn lưu lại đoạn chương trình này, ta dùnh lệnh save sau kết thúc đoạn chương trình, chẳng hạn muốn lưu tên : vidu thư mục e:\maplev3\khoai ta dùng save ` e:/maplev3/khoai/vidu ` save ` e:/maplev3/khoai/vidu.m ` muốn kêu đoạn chương trình (thủ tục, hàm) vào xử dụng, ta dùng lệnh : read ` e:/maplev3/khoai/vidu ` Trang GVHD: PGS.Ts Đỗ Văn Nhơn Họ Tên: Nguyễn Khánh Ngọc MSHV: CH1001117 read ` e:/maplev3/khoai/vidu.m ` Chú ý rằng: Tên tập tin dạng *.m tự động lưu dạng mã riêng Maple xem trình soạn thảo thông thường, gọi lại, (bằng lệnh read), nội dung không thị lại gọi , dĩ nhiên ta xử dụng chương trình (thủ tục, hàm) Với tập tin lưu dạng phần mở rộng m, gọi lại , nội dung thị lại Trang GVHD: PGS.Ts Đỗ Văn Nhơn Họ Tên: Nguyễn Khánh Ngọc MSHV: CH1001117 Phần II: Giải Và Biện Luận Phƣơng Trình Bậc Theo Tham Số m I Giải Phƣơng Trình Bậc Dạng tổng quát phương trình bậc hai ẩn là: 𝑎𝑥 + 𝑏𝑥 + 𝑐 = a ≠ 0, số a, b c số (thực phức) gọi hệ số: a hệ số x², b hệ số x c số hay số hạng tự Khi xét trường số thực, nghĩa tìm giá trị thực thỏa mãn phương trình, phương trình có hai nghiệm khác (còn nói hai nghiệm phân biệt), hai nghiệm (có nghiệm kép nghiệm bội hai) nghiệm (vô nghiệm) Ta sử dụng hàm Maple để giải vấn đề giải phƣơng trình Thuật giải: Nhận vào phương bậc 2 Phân tích phương trình bậc để lấy hệ số a, b, c Nếu a = không xét không phương trình bậc Ngược lại a # delta = b*b - 4*a*c - Nếu delta < phương trình vô nghiệm - Ngược lại delta = Phương trình có nghiệm kép: x1 = x2 = -b/2a - Ngược lại delta > phương trình có hai nghiệm phân biệt:  𝑥1 = −𝑏− ∆  𝑥2 = −𝑏+ ∆ 2𝑎 2𝑎 Cài đặt: Xây dựng thủ tục LayHeSo := proc(expr,bien) với tham số:  expr: tam thức bậc  bien: tên biến tam thức bậc LayHeSo := proc(expr,bien) local tam,a,b,c,delta; tam := op(1,expr)-op(2,expr); a := coeff(tam,bien^2); b := coeff(tam,bien^1); Trang GVHD: PGS.Ts Đỗ Văn Nhơn Họ Tên: Nguyễn Khánh Ngọc MSHV: CH1001117 c := simplify(tam - a*bien^2 - b*bien); delta := b^2-4*a*c; return a,b,c,delta; end proc: Hàm LayHeSo trả hệ số a,b,c delta Xây dựng thủ tục giải phương trình bậc GiaiPtSo := proc(A,B,C,delta,bien) if(A 0) then printf("Tinh Delta:\n"); print(`b^2 - 4*a*c`=B^2 - 4*A*C); if (delta < 0) then print("Delta 0 Phuong trinh co nghiem\n"); print(bien=(-b + sqrt(Delta))/(2*a),bien=(-B + sqrt(delta))/(2*A),bien =(-b- sqrt(Delta))/(2*a), bien=(-B - sqrt(delta))/(2*A)); end if; KhaoSatHamSo(A,B,C,bien); else printf("Day khong phai la phuong trinh bac 2"); end if; end proc: Trang GVHD: PGS.Ts Đỗ Văn Nhơn Họ Tên: Nguyễn Khánh Ngọc MSHV: CH1001117 Hình minh họa giải tìm nghiệm phương trình bậc Khảo sát hàm số bậc KhaoSatHamSo := proc(a,b,c,bien) local expr,dh1,nghiem; expr := a*bien^2 + b*bien + c; dh1 := diff(expr,bien); nghiem := solve(dh1=0,bien); if(a>0) then printf("Ham so nghich bien tren khoang:\n"): printf("(-infinity,%a)\n",nghiem); printf("Ham so dong bien tren khoang:\n"); printf("(%a,infinity)\n",nghiem); printf("Ham so dat cuc tieu tai:\n"); printf("%a(%a,%a)",bien,nghiem,(subs({bien=nghiem},expr))); else printf("Ham so đong bien tren khoang:\n"); Trang GVHD: PGS.Ts Đỗ Văn Nhơn Họ Tên: Nguyễn Khánh Ngọc MSHV: CH1001117 printf("(%a,infinity)\n",nghiem); printf("Ham so dong bien tren khoang:\n"); printf("(-infinity,%a)",nghiem); printf("Ham so dat cuc dai tai:\n"); printf("%a(%a,%a)",bien,nghiem,(subs({bien=nghiem},expr))); end if; end proc: Thủ tục KhaoSatHamSo thực kiểm tra tính toán khoảng đồng biến nghịch biến hàm số II Biện luận phƣơng trình bậc theo m Thuật giải tương tự giải phương trình phức tạp phần xét Delta, Delta phương trình theo m, nên ta phải xét dấu Delta Thuật giải: Nhận vào phương bậc 2 Phân tích phương trình bậc để lấy hệ số a, b, c Nếu a = không xét không phương trình bậc Ngược lại a # delta = b*b - 4*a*c  Trường hợp đặc biệt : biểu thức delta = b*b - 4*a*c theo m vô nghiệm - Xét delta > với m phương trình 𝑎𝑥 + 𝑏𝑥 + 𝑐 = có nghiệm phân biệt - Xét delta < với m phương trình 𝑎𝑥 + 𝑏𝑥 + 𝑐 = vô nghiệm  Trường hợp bình thường: biểu thức delta = b*b - 4*a*c theo m có nghiệm Xét dấu Delta - Nếu delta < phương trình vô nghiệm Giải bất phương trình 𝑏2 − 4𝑎𝑐 < 𝑡ℎ𝑒𝑜 𝑏𝑖ế𝑛 𝑚 Kết luận với m thuộc khoảng nghiệm bất phương trình pt 𝑎𝑥 + 𝑏𝑥 + 𝑐 = vô nghiệm - Ngược lại delta = Phương trình có nghiệm kép: Giải phương trình 𝑏2 − 4𝑎𝑐 = 𝑡ℎ𝑒𝑜 𝑏𝑖ế𝑛 𝑚 Sau tìm m, m vào phương trình 𝑏2 − 4𝑎𝑐 để tính nghiệm x1 = x2 = -b/2a - Ngược lại delta > phương trình có hai nghiệm phân biệt: Trang GVHD: PGS.Ts Đỗ Văn Nhơn Họ Tên: Nguyễn Khánh Ngọc MSHV: CH1001117 Giải bất phương trình 𝑏2 − 4𝑎𝑐 > 𝑡ℎ𝑒𝑜 𝑏𝑖ế𝑛 𝑚 Kết luận với m thuộc khoảng nghiệm bất phương trình phương trình 𝑎𝑥 + 𝑏𝑥 + 𝑐 = Có nghiệm phân biệt  𝑥1 = −𝑏− ∆  𝑥2 = −𝑏+ ∆ 2𝑎 2𝑎 theo m theo m Cài đặt Xây dựng thủ tục TimNghiemThuc := proc(expr) Với tham số expr phương trình theo biến m, biểu thức Delta TimNghiemThuc := proc(expr) local Kq,Nghiem, temp,t; Nghiem := {solve(expr)}; Kq := {}; for temp in Nghiem t := convert(temp, string); if SearchText("I", t) = and SearchText("RootOf", t) = then # them nghiem vao Kq Kq := {temp, op(Kq)}; end if; end do; return Kq; end proc: Bởi với expr phương trình bậc theo m hàm solve(expr) Maple trả nghiệm phương trình bậc này, hàm solve(expr) trả nghiệm ảo phương trình vô nghiệm Vì thủ tục TimNgiemThuc có nhiệm vụ loại bỏ nghiệm ảo, thông qua hàm SearchText, nghiệm có chứa “I” nghiệm ảo, loại bỏ nghiệm ảo Biện luận phương trình bậc theo m BienLuanPt := proc(a,b,c,delta,bien) Local nghiemDelta, i, giatriDelta, nghiemPtTheom,temp, bienM, giatritamthuc; Local m1,m2,tempPhai,tempTrai, giatritamthucphai, tapxacdinh, giatritamthuctrai; nghiemDelta := TimNghiemThuc(delta); Trang 10 GVHD: PGS.Ts Đỗ Văn Nhơn Họ Tên: Nguyễn Khánh Ngọc MSHV: CH1001117 if(not type(a,'numeric')) then # Tập xác định printf("Dieu kien đe phuong trinh tren la phuong trinh bac 2:\n"); tapxacdinh := {solve(a=0,m)}; printf("%a != => m != %a\n",a,op(1,tapxacdinh)); end if; # Neu bieu thuc theo delta vo nghiem -> delta > voi moi m # Hoac delta0 voi moi m printf("Phuong trinh vo nghiem voi moi m \n"); else print(Delta=simplify(delta)); printf("Delta >0 voi moi m \n"); printf("Phuong trinh co nghiem voi moi m: \n"); print(bien=(-b-sqrt(delta))/(2*a), bien=(-b+sqrt(delta))/(2*a)); end if; else #delta co nghiem # print(Delta=simplify(delta)); for i in nghiemDelta printf("Voi m = %a thi Delta=0 => Phuong trinh co nghiem kep\n", i); giatriDelta := subs({m=i},delta): nghiemPtTheom := simplify((-b)/(2*a)): print(bien=nghiemPtTheom); printf("The m = %a vao\n",i); print(bien =subs({m=i},nghiemPtTheom)); end do; # xet dau tam thuc bac # neu truong hop nghiem cua delta la nghiệm đơn (nghiệm pt bậc 1) if(nops(nghiemDelta)=1) then #co the la nghiem kép, hoac la nghiem đơn, neu đay la pt bac bienM := op(1,nghiemDelta); #dung de xet dau tam thuc ben phải nghiem M tempPhai := bienM+1; #dung de xet dau tam thuc ben trái nghiem M tempTrai := bienM-1; Trang 11 GVHD: PGS.Ts Đỗ Văn Nhơn Họ Tên: Nguyễn Khánh Ngọc MSHV: CH1001117 giatritamthucphai := subs({m=tempPhai},delta); giatritamthuctrai := subs({m=tempTrai},delta); if(giatritamthucphai >0 and giatritamthuctrai>0) then printf("m != %a thi Delta>0 => phuong trinh co nghiem phan biet\n",bienM); delta = simplify(delta): print(Delta=simplify(delta),bien=(-bsqrt(delta))/(2*a),bien=(-b+sqrt(delta))/(2*a)); elif (giatritamthucphai0 and giatritamthuctrai0) then printf("m != %a thi Delta > => phuong trinh co nghiem phan biet\n",m1); Trang 12 GVHD: PGS.Ts Đỗ Văn Nhơn Họ Tên: Nguyễn Khánh Ngọc MSHV: CH1001117 print(Delta=simplify(delta),bien=(-bsqrt(delta))/(2*a),bien=(-b+sqrt(delta))/(2*a)); else printf("m != %a thi Delta > => phuong trinh vo nghiem\n",m1); end if; else # 2nghiem phan biệt temp := (m1+m2)/2; giatritamthuc := subs({m=temp},delta); if(giatritamthuc>0) then printf("Voi m < %a hoac m > %a phuong trinh vo nghiem\n",m1,m2); printf("Voi %a < m < %a phuong trinh co nghiem phan biet\n",m1,m2); print(Delta=simplify(delta),bien=(-bsqrt(delta))/(2*a),bien=(-b+sqrt(delta))/(2*a)); else printf("Voi m < %a hoac m > %a phuong trinh co nghiem phan biet\n",m1,m2); print(Delta=simplify(delta),bien=(-bsqrt(delta))/(2*a),bien=(-b+sqrt(delta))/(2*a)); printf("Voi %a < m < %a phuong trinh vo nghiem\n",m1,m2); end if; end if; end if; end if; end proc: Trang 13 GVHD: PGS.Ts Đỗ Văn Nhơn Họ Tên: Nguyễn Khánh Ngọc MSHV: CH1001117 Ảnh minh họa chạy chương trình giải biện luận pt bậc tren Maple III Kết nối C# với Maple Kết nối với Maple Trong C#, xây dựng lớp Maple MapleEngine để kết nối đến Maple, gọi hàm Maple chạy Để kết nối với Maple cần sử dụng component Maple maplec.dll C# nhận kết trả hiển thị lên giao diện sử dụng component mintext.dll để đọc chuỗi Latex công thức toán học, hiển thị chúng giao diện Trang 14 GVHD: PGS.Ts Đỗ Văn Nhơn Họ Tên: Nguyễn Khánh Ngọc MSHV: CH1001117 static class MapleEngine { public delegate void TextCallBack(IntPtr data, int tag, IntPtr output); public delegate void ErrorCallBack(IntPtr data, IntPtr offset, IntPtr msg); public delegate void StatusCallBack(IntPtr data, IntPtr used, IntPtr alloc, double time); public delegate IntPtr ReadLineCallBack(IntPtr data, IntPtr debug); public delegate long RedirectCallBack(IntPtr data, IntPtr name, IntPtr mode); public delegate IntPtr StreamCallBack(IntPtr data, IntPtr stream, int nargs, IntPtr args); public delegate long QueryInterrupt(IntPtr data); public delegate IntPtr CallBackCallBack(IntPtr data, IntPtr output); public struct MapleCallbacks { public TextCallBack textCallBack; public ErrorCallBack errorCallBack; public StatusCallBack statusCallBack; public ReadLineCallBack readlineCallBack; public RedirectCallBack redirectCallBack; public StreamCallBack streamCallBack; public QueryInterrupt queryInterrupt; public CallBackCallBack callbackCallBack; } [DllImport(@"maplec.dll")] public static extern IntPtr StartMaple(int argc, String[] argv, ref MapleCallbacks cb, IntPtr data, IntPtr info, byte[] err); [DllImport(@"maplec.dll")] public static extern IntPtr EvalMapleStatement(IntPtr kv, byte[] statement); [DllImport(@"maplec.dll")] public static extern IntPtr IsMapleStop(IntPtr kv, IntPtr obj); [DllImport(@"maplec.dll")] public static extern void StopMaple(IntPtr kv); } public class Maple { IntPtr kv; public Maple(IntPtr _kv) { kv = _kv; } public void EvalStatement(string expr) { expr = expr + ";"; MapleEngine.EvalMapleStatement(kv, Encoding.ASCII.GetBytes(expr)); } public void Stop() { MapleEngine.StopMaple(kv); } } [System.Security.SuppressUnmanagedCodeSecurity()] internal class NativeMethods { private NativeMethods(){} [System.Runtime.InteropServices.DllImport("MimeTex.dll")] internal static extern int CreateGifFromEq(string expr, string fileName); [System.Runtime.InteropServices.DllImport("kernel32.dll")] internal extern static IntPtr GetModuleHandle(string lpModuleName); [System.Runtime.InteropServices.DllImport("kernel32.dll")] [return: System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropSer vices.UnmanagedType.Bool)] internal extern static bool FreeLibrary(IntPtr hLibModule); } Trang 15 GVHD: PGS.Ts Đỗ Văn Nhơn Họ Tên: Nguyễn Khánh Ngọc MSHV: CH1001117 Giao diện thực chƣơng trình C# Các hàm giải biện luận phương trình bậc đóng gói thành thư viện cho phép C# gọi đến savelib('LayHeSo', "D:/BienLuanPtBac2.mla"); savelib('GiaiPtSo', "D:/BienLuanPtBac2.mla"); savelib('KhaoSatHamSo', "D:/BienLuanPtBac2.mla"); savelib('TimNghiemThuc', "D:/BienLuanPtBac2.mla"); savelib('BienLuanPt', "D:/BienLuanPtBac2.mla"); savelib('GiaiPtBac2', "D:/BienLuanPtBac2.mla"); a Trường hợp phương trình bậc vô nghiệm Trang 16 GVHD: PGS.Ts Đỗ Văn Nhơn Họ Tên: Nguyễn Khánh Ngọc MSHV: CH1001117 b Trường hợp phương trình bậc có nghiệm kép Trang 17 GVHD: PGS.Ts Đỗ Văn Nhơn Họ Tên: Nguyễn Khánh Ngọc MSHV: CH1001117 c Trường hợp phương trình bậc có nghiệm phân biệt Trang 18 GVHD: PGS.Ts Đỗ Văn Nhơn Họ Tên: Nguyễn Khánh Ngọc MSHV: CH1001117 b Trường hợp biện luận phương trình bậc theo m Trang 19 GVHD: PGS.Ts Đỗ Văn Nhơn Họ Tên: Nguyễn Khánh Ngọc MSHV: CH1001117 Phần III: Kết Luận Maple thật công cụ hữu ích không với người chuyên toán học, mà có ý nghĩa lập trình viên, làm giảm thiểu phức tạp việc tính toán, hỗ trợ hàm tính toán hình thức hạn chế ngôn ngữ lập trình C#, VB.NET, Java … Không thế, sử dụng Maple để lập trình trí tuệ nhân tạo Việc cài đặt thủ tục trí tuệ nhân tạo Maple đơn giản, cài đặt dễ dàng ngôn ngữ lập trình Chương trình demo “Giải biện luận phương trình bậc theo m” cho thấy kết hợp C# Maple để giải toán Chương trình thể số chức sau: o Kết nối ngôn ngữ lập trình C# Maple việc tính toán hình thức o Đóng gói thủ tục thành “thư viện” để ngôn ngữ C# gọi đến o Sử dụng Minetex để xử lý chuỗi Latex thành công thức toán học thể lên giao diện người dùng Trang 20 GVHD: PGS.Ts Đỗ Văn Nhơn Họ Tên: Nguyễn Khánh Ngọc MSHV: CH1001117 Tài liệu tham khảo Bài giảng Lập trình Symbolic Trí tuệ nhân tạo – TS Đỗ Văn Nhơn Giáo trình Lập Trình Tính Toán Hình Thức – Nguyễn Chánh Tú – Khoa Toán, ĐHSP Huế http://www.maplesoft.com Trang 21 [...]... printf("%a(%a,%a)",bien,nghiem,(subs({bien=nghiem},expr))); end if; end proc: Thủ tục KhaoSatHamSo thực hiện ki m tra và tính toán các khoảng đồng biến và nghịch biến của h m số II Biện luận phƣơng trình bậc 2 theo m Thuật giải tương tự như giải phương trình nhưng phức tạp hơn ở phần xét Delta, bởi vì Delta cũng là m t phương trình theo m, nên ta phải xét dấu Delta Thuật giải: 1 Nhận vào phương bậc 2 2 Phân tích phương trình bậc. .. nghiem\n" ,m1 ); end if; else # 2nghiem phan biệt temp := (m1 +m2 ) /2; giatritamthuc := subs( {m= temp},delta); if(giatritamthuc>0) then printf("Voi m < %a hoac m > %a phuong trinh vo nghiem\n" ,m1 ,m2 ); printf("Voi %a < m < %a phuong trinh co 2 nghiem phan biet\n" ,m1 ,m2 ); print(Delta=simplify(delta),bien=(-bsqrt(delta))/ (2* a),bien=(-b+sqrt(delta))/ (2* a)); else printf("Voi m < %a hoac m > %a phuong trinh co 2. .. nghi m của phương trình bậc 2 này, h m solve(expr) sẽ trả về nghi m ảo nếu phương trình vô nghi m Vì vậy thủ tục TimNgiemThuc sẽ có nhi m vụ loại bỏ các nghi m ảo, thông qua h m SearchText, nếu nghi m đó có chứa “I” thì đó là nghi m ảo, chúng ta sẽ loại bỏ nghi m ảo này 2 Biện luận phương trình bậc 2 theo m BienLuanPt := proc(a,b,c,delta,bien) Local nghiemDelta, i, giatriDelta, nghiemPtTheom,temp, bienM,... phương trình có hai nghi m phân biệt: Trang 9 GVHD: PGS.Ts Đỗ Văn Nhơn Họ và Tên: Nguyễn Khánh Ngọc MSHV: CH1001117 Giải bất phương trình 2 − 4𝑎𝑐 > 0 𝑡ℎ𝑒𝑜 𝑏𝑖ế𝑛 𝑚 Kết luận với m thuộc khoảng nghi m của bất phương trình trên thì phương trình 𝑎𝑥 2 + 𝑏𝑥 + 𝑐 = 0 Có 2 nghi m phân biệt  𝑥1 = −𝑏− ∆  2 = −𝑏+ ∆ 2 2 theo m theo m Cài đặt 1 Xây dựng thủ tục TimNghiemThuc := proc(expr) Với tham số expr là m t... 4*a*c theo m có nghi m Xét dấu Delta - Nếu delta < 0 thì phương trình vô nghi m Giải bất phương trình 2 − 4𝑎𝑐 < 0 𝑡ℎ𝑒𝑜 𝑏𝑖ế𝑛 𝑚 Kết luận với m thuộc khoảng nghi m của bất phương trình trên thì pt 𝑎𝑥 2 + 𝑏𝑥 + 𝑐 = 0 vô nghi m - Ngược lại nếu delta = 0 thì Phương trình có nghi m kép: Giải phương trình 2 − 4𝑎𝑐 = 0 𝑡ℎ𝑒𝑜 𝑏𝑖ế𝑛 𝑚 Sau khi t m được m, thế m vào phương trình 2 − 4𝑎𝑐 để tính nghi m x1 = x2 = -b/2a... dàng hơn là trên các ngôn ngữ lập trình hiện nay Chương trình demo Giải và biện luận phương trình bậc 2 theo m đã cho thấy sự kết hợp giữa C# và Maple để giải bài toán Chương trình thể hiện m t số chức năng cơ bản như sau: o Kết nối ngôn ngữ lập trình C# và Maple trong việc tính toán hình thức o Đóng gói các thủ tục thành “thư viện” để ngôn ngữ C# gọi đến o Sử dụng Minetex để xử lý chuỗi Latex thành... "D:/BienLuanPtBac2.mla"); savelib('KhaoSatHamSo', "D:/BienLuanPtBac2.mla"); savelib('TimNghiemThuc', "D:/BienLuanPtBac2.mla"); savelib('BienLuanPt', "D:/BienLuanPtBac2.mla"); savelib('GiaiPtBac2', "D:/BienLuanPtBac2.mla"); a Trường hợp phương trình bậc 2 vô nghi m Trang 16 GVHD: PGS.Ts Đỗ Văn Nhơn Họ và Tên: Nguyễn Khánh Ngọc MSHV: CH1001117 b Trường hợp phương trình bậc 2 có nghi m kép Trang 17 GVHD:... nghiem phan biet\n" ,m1 ,m2 ); print(Delta=simplify(delta),bien=(-bsqrt(delta))/ (2* a),bien=(-b+sqrt(delta))/ (2* a)); printf("Voi %a < m < %a phuong trinh vo nghiem\n" ,m1 ,m2 ); end if; end if; end if; end if; end proc: Trang 13 GVHD: PGS.Ts Đỗ Văn Nhơn Họ và Tên: Nguyễn Khánh Ngọc MSHV: CH1001117 Ảnh minh họa chạy chương trình giải và biện luận pt bậc 2 tren Maple III Kết nối C# với Maple 1 Kết nối với Maple... vo nghiem \n" ,m) ; printf( "m < %a thi Delta>0=> phuong trinh co 2 nghiem phan biet\n",bienM); delta = simplify(delta): print(Delta=simplify(delta),bien=(-bsqrt(delta))/ (2* a),bien=(-b+sqrt(delta))/ (2* a)); end if; else #bieu thu delta la tam thuc bac 2, co 2 nghiem phan biet # Sap xep cac nghiem theo thu tu nho den lon nghiemDelta := sort(nghiemDelta); m1 := op(1,nghiemDelta); m2 := op (2, nghiemDelta);... print(bien=(-b-sqrt(delta))/ (2* a), bien=(-b+sqrt(delta))/ (2* a)); end if; else #delta co nghiem # print(Delta=simplify(delta)); for i in nghiemDelta do printf("Voi m = %a thi Delta=0 => Phuong trinh co nghiem kep\n", i); giatriDelta := subs( {m= i},delta): nghiemPtTheom := simplify((-b)/ (2* a)): print(bien=nghiemPtTheom); printf("The m = %a vao\n",i); print(bien =subs( {m= i},nghiemPtTheom)); end do; # xet dau tam thuc bac 2 # neu

Ngày đăng: 30/12/2015, 18:41

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan