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

SỬ DỤNG MAPLE VÀ C# XÂY DỰNG ỨNG DỤNG GIẢI VÀ BIỆN LUẬN PHƯƠNG TRÌNH, HỆ PHƯƠNG TRÌNH BẬC NHẤT

17 1,4K 8

Đ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 17
Dung lượng 160,99 KB

Nội dung

Đại Học Quốc Gia TP.HCMTrường Đại Học Công Nghệ Thông Tin TIỂU LUẬN MÔN LẬP TRÌNH SYMBOLIC Đề tài: SỬ DỤNG MAPLE VÀ C# XÂY DỰNG ỨNG DỤNG GIẢI VÀ BIỆN LUẬN PHƯƠNG TRÌNH, HỆ PHƯƠNG TRÌNH B

Trang 1

Đại Học Quốc Gia TP.HCM

Trường Đại Học Công Nghệ Thông Tin

TIỂU LUẬN MÔN LẬP TRÌNH SYMBOLIC

Đề tài:

SỬ DỤNG MAPLE VÀ C# XÂY DỰNG ỨNG DỤNG

GIẢI VÀ BIỆN LUẬN PHƯƠNG TRÌNH, HỆ

PHƯƠNG TRÌNH BẬC NHẤT

Lớp: Cao học khóa 6 Mã số: CH1101140

Trang 2

Tp Hồ Chí Minh, tháng 1 năm 2013 NHẬN XÉT CỦA GIÁO VIÊN

HƯỚNG DẪN

Trang 3

LỜI CÁM ƠN

Chúng em xin chân thành cám ơn thầy, PGS TS Đỗ Văn Nhơn đã tận tình giảng dạy chúng em trong quá trình học tập để thực hiện bài tiểu luận này

Chúng em xin chân thành cám ơn Phòng Đào tạo sau Đại học, trường Đại Học Khoa Học Công nghệ Thông tin – Đại học Quốc Gia Tp.HCM đã tạo điều kiện thuận lợi cho em trong học tập và công tác

Chúng em xin chân thành cám ơn quý Thầy Cô trong Trường đã tận tình giảng dạy, trang bị cho chúng em những kiến thức quý báu trong suốt thời gian học Xin chân thành cám ơn người thân và bạn bè đã ủng hộ, giúp đỡ tôi trong thời gian học tập và nghiên cứu

Học viên thực hiện,

Đỗ Đình Thủ

Tháng 01/ 2013

Trang 4

MỤC LỤC

Trang 5

I GIỚI THIỆU

Maple là một phần mềm tính toán hình thức (formal computation) do Đại học Waterloo của Canada phát triển từ 1980 với mong muốn giúp máy tính có thể làm việc với được với các ký hiệu toán học truyền thống của con người (đạo hàm, tích phân, ma trận, định thức, …) Ngày nay, Maple còn làm được nhiều hơn rất nhiều: hỗ trợ các tính toán hình thức, tính toán số học với độ chính xác rất lớn, giải và biện luận các phương trình, hệ phương trình, vẽ đồ thị 2 chiều, 3 chiều, …Ngoài ra, Maple cũng hỗ trợ cho việc lập trình cấp cao Cùng với Matlap, Mathematica, Maple cho người dùng thêm một sự lựa chọn tốt trong lập trình tính toán hình thức

Trong phạm vi tiểu luận môn học, do thời gian eo hẹp không phát triển nhiều thủ tục nên chỉ có thể phát triển hoàn chỉnh 1 package hỗ trơ giải và biện luận phương trình

và hệ phương trình bậc nhất Ứng dụng này sẽ là cơ sở để phát triển những package khác trong nhiều lĩnh vực áp dụng khi muốn sử dụng Maple với Net mà ở đây sử dụng C#

Trang 6

II GIẢI VÀ BIỆN LUẬN PHƯƠNG TRÌNH BẬC NHẤT

Cho phương trình (PT) bậc nhất có 1 ẩn, các hệ số có chứa 1 tham số m Hãy giải và biện luận PT đã cho theo tham số m Ví dụ với PT: (2m -1)x -2 = 4mx + m

Với bài toán trên ta có thể sử dụng Maple để giải quyết tuy nhiên trong quá trình xử lý cần lưu ý vài đặt điểm sau ngoài việc sử dụng thuật toán giải và biện luận PT bậc nhất đã biết:

- Kiểm tra chắc chắn PT nhập vào là PT bậc nhất theo x, có 1 tham số m

- Cần chuyển chương trình về dạng: ax + b = 0

- Các hệ số có thể có bậc bất kỳ

Vậy khi người dùng nhập vào PT bậc nhất 1 ẩn bất kỳ, đều có thể biện luận được

Cần tổ chức các cấu trúc dữ liệu như sau:

- pt: phương trình

- a,b: các hệ số a,b

- ma: kiểu tập hợp là nghiệm của PT a = 0, theo m

- mb: giá trị của hệ số b khi a =0

- bac: kiểm tra bậc của phương trình

Thuật giải: GiaiBienLuanPTBN(ptbn)

local variables: a,b,ma,mb,bac,mai,pt;

Begin:

Bước 0:

pt := lhs(ptbn) – rhs(ptbn) = 0

Bước 1:

bac : = bậc của PT theo ẩn x

if bac > 1 then

//PT không phải là PT bậc nhất

Trang 7

Kết thúc.

end if

Bước 2:

a:= hệ số a của PT

b:= hệ số b của PT

ma:= tập nghiệm của PT a = 0 theo ẩn m

if card(ma) > 0 then

foreach mai in ma do

mb:= giá trị của b khi thay m = mai

if mb = 0 then

//với mai PT có vô số nghiệm else

//với mai PT vô nghiệm end if

end do

Với mai không thuộc tập ma, PT đã cho có nghiệm x = -b/a

end if

end

Thủ tục được cài đặt trong package CH1101140, tên thủ tục là GiaiBienLuanPTNB(ptbn)

Ví dụ: Cho PT (2m -1)x -2 = 4mx + m

pt : = -(2m + 1)x -2-m =0

bac := 1

a := -(2m +1)

b:= -2 –m

Trang 8

ma := {-1/2}.

->mb := -3/2 Với m = -1/2 PT vô nghiệm

với m # -1/2 PT có nghiệm x =- (2 + m)/(2m +1)

Giải trong Maple

>

>

Khi tham so m la -1/2 thi phuong trinh da cho vo nghiem Khi tham so m khac -1/2 thi nghiem cua phuong trinh la x = -(-2-m)/(-2*m-1)

>

Trang 9

III GIẢI VÀ BIỆN LUẬN HỆ PHƯƠNG TRÌNH BẬC NHẤT

Cho hệ phương trình (HPT) bậc nhất 2 ẩn có dạng: {a1x + b1y + c =0, a2x + b2y + c2 = 0} Các hệ số có chứa tham số m Hãy giải và biện luận HPT trên theo m

Cũng như PT bậc nhất ta phải quy định HPT nhập vào là HPT bậc nhất 2 ẩn số Ta cần chuyển HPT về dạng vế trái là đa thức vế phải bằng 0 Sau đó ta sẽ biện luận HPT theo các định thức D,Dx,Dy

Ta cần lưu trữ các biến sau:

- pt1, pt2: các phương trình của hệ phương trình

- a1,a2,b1,b2,c1,c2: các hệ số của HTP

- D,Dx,Dy các định thức D,Dx,Dy

- bacx, bacy: bậc của từng PT theo biến x,y

- nghiem: tập nghiệm của D = 0 theo m

- valueDx,valueDy giá trị Dx,Dy tương ứng khi D = 0

Thuật giải: GiaiBienLuanHPTBN(ptbn1, ptbn2)

local a1,b1,c1,a2,b2,c2,D, Dx, Dy, nghiem, no, valueDx, valueDy, bacx, bacy;

Begin:

Bước 0:

pt1 := lhs(ptbn1) - rhs(ptbn1) = 0;

pt2 := lhs(ptbn2) - rhs(ptbn2) = 0;

Bước 1:

foreach pt in hệ phương trình do

bacx := bậc của phương trình theo biến x

bacy := bậc của phương trình theo biến y

Trang 10

if bacx > 1 or bacy > 1 then

//HPT không phải là bậc nhất theo biến x,y Kết thúc

end if

end do

Bước 2: Tính lần lượt các hệ số a1,b1,c1,a2,b2,c2 của PT pt1 và pt2

D := D := b1*a2 - a1*b2;

Dx := c1*b2 - b1*c2;

Dy :=a1*c2 - c1*a2;

nghiem := {nghiệm của PT D = 0 theo m}

if card (nghiem) > 0 then

foreach no in nghiem do

valueDx := thay m = no vào Dx valueDy := thay m = no vào Dy

if valueDx = valueDy =0 then

//HPT có vô số nghiệm else

//HPT vô nghiệm end if

if m <> no then

//HPT có nghiệm x = Dx/D, y = Dy/D

end if

end do end if

End

Thủ tục được cài đặt trong package CH1101140, tên thủ tục là

GiaiBienLuanHPTNB(ptbn1, ptbn2)

Trang 11

5 Chạy thử với dữ liệu mẫu

Ví dụ: Giải và biện luận HTP sau

>

Voi m = -I*2^(1/2) thi he phuong trinh vo nghiem Voi m =

I*2^(1/2) thi he phuong trinh vo nghiem Khi gia tri cua m khac: -I*2^(1/2), I*2^(1/2), nghiem cua he phuong trinh la x = 1/(2+m^2) va y = (m*(m-1)+2)/(2+m^2)

Trang 12

IV XÂY DỰNG ỨNG DỤNG TRÊN C#

Để kết nối với Maple ta sử dụng lớp MapleEngine.cs

{

{

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,

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);

}

}

Trang 13

2 Cấu trúc dữ liệu

Ta sử dụng 2 textBox để nhận hai phương trình do người dùng nhập vào Mỗi textBox

là 1 phương trình

Để hiển thị kết quả từ maple ra giao diện trên C# ta dùng 1 richTextBox, cho phép hiển thị nhiều dòng

- Chương trình sẽ tạo liên kết tới maple ngay trước khi khởi tạo form Bước liên kết này sẽ nạp luôn package cần dùng vào chương trình

- {

-

- //Tạo liên kết tới Mpale ngay khi khởi tạo form

- MapleEngine MapleCallbacks cb;

- byte [] err = new byte [2048];

- IntPtr kv;

Trang 14

- String [] argv = new String [2];

- argv[0] = "maple" ;

- argv[1] = "-A2" ;

- cb.textCallBack = cbText;

- cb.errorCallBack = cbError;

- cb.statusCallBack = cbStatus;

- cb.readlineCallBack = null ;

- cb.redirectCallBack = null ;

- cb.streamCallBack = null ;

- cb.queryInterrupt = null ;

- cb.callbackCallBack = null ;

try

- {

- kv = MapleEngine StartMaple(2, argv, ref cb, IntPtr Zero,

IntPtr Zero, err);

- }

- catch ( DllNotFoundException )

- {

- return ;

- }

- catch ( EntryPointNotFoundException )

- {

- return ;

- }

if (kv.ToInt64() == 0)

- {

- MessageBox Show( "Fatal Error, could not start Maple: "

- + System.Text Encoding ASCII.GetString(err, 0,

Array IndexOf(err, ( byte )0)), "Lỗi" , MessageBoxButtons OK);

- return ;

- }

- //Thực hiện load package cần dùng: CH1101140

- try

- {

- MapleEngine EvalMapleStatement(kv,

Encoding ASCII.GetBytes( "with(CH1101140):" ));

- }

- catch ( Exception )

- {

- }

- InitializeComponent();

- }

Trang 15

- Nếu người dùng chỉ nhập 1 phương trình thì sẽ gọi thủ tục

GiaiBienLuanPTBN(pt) với phương trình lấy từ 1 trong 2 textBox có dữ liệu

- Nếu người dùng nhập vào cả hai phương trình trong 2 textBox thì lấy cả 2 phương trình làm tham số cho thủ tục GiaiBienLuanHPTBN(pt1,pt2)

String expr = "" ;

if (txtInput1.Text != "" && txtInput2.Text != "" )

{

expr = "GiaiBienLuanHPTBN(" ;

expr += txtInput1.Text;

expr += "," ;

expr += txtInput2.Text;

expr += ");" ;

}

else

{

if (txtInput1.Text != "" )

{

expr = "GiaiBienLuanPTBN(" ;

expr += txtInput1.Text;

expr += ");" ;

}

if (txtInput2.Text != "" )

{

expr = "GiaiBienLuanPTBN(" ;

expr += txtInput2.Text;

expr += ");" ;

}

5 Demo

Giải và biện luận PT (2-m)*x – 2m = 0

Trang 16

Giải và biện luận HPT {m*x – m + y = 0, m*x – y + 8 = 0}

Trang 17

V KẾT LUẬN

Việc sử dụng công cụ mạnh như Maple kết hơp tốt với môi trường net hứa hẹn sẽ giúp ích rất nhiều cho những ứng dụng trí tuệ nhân tạo Việc lập trình sẽ dễ hơn nếu chỉ dùng ngôn ngữ lập trình để giải quyết với số lớn (ví dụ về mã hóa) Ứng dụng này em sẽ

mở rộng cho bài giải tam giác hay giải toán hình học sắp tới vì thời gian hạn hẹp không cho phép em hoàn thành nhiều chức năng cho dù có nhiều tham vọng từ ban đầu

Xin chân thành cảm ơn Thầy đã giới thiệu và truyền đạt những kiến thức nền tảng, gợi cho chúng em những ý tưởng, những hướng phát triển lý thú, bổ ích giúp cho chúng

em có thể tạo ra những sản phẩm có ích phục vụ cho xã hội tốt hơn

TP.HCM, ngày 01 tháng 02 năm 2013

Học viên thực hiện

Đỗ Đình Thủ

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

TỪ KHÓA LIÊN QUAN

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

TÀI LIỆU LIÊN QUAN

w