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

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 535 0

Đ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 24
Dung lượng 1,24 MB

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

Nội dung

Ở phương diện này , có thể xem Maple như là một ngôn ngữ lập trình trong đó chúng ta có thể tạo ra những chương trình và những gói package để tái sử dụng.. Một tính năng rất hay và cũng

Trang 1

ĐẠ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 2

Theo Tham Số m

Bộ môn : Lập trình Symbolic

GVHD : PGS-TS Đỗ Văn Nhơn Thực hiện : Nguyễn Khánh Ngọc

CH1001117

Thành phố Hồ Chí Minh - Tháng 1 Năm 2012

Trang 2

NHẬN XÉT CỦA GIẢNG VIÊN HƯỚNG DẪN

Trang 3

MỤC LỤC

Phần I: Giới Thiệu Lập Trình Symbolic

I Đặt vấn đề 1

II Giới thiệu về Maple 2

III Lập trình trong Maple 4

Phần II: Giải Và Biện Luận Phương Trình Bậc 2 Theo Tham Số m I Giải phương trình bậc 2 6

II Biện luận phương trình bậc 2 theo m 9

III Kết nối C# với Maple 14

1 Kết nối với Maple 14

2 Giao diện thực hiện chương trình trên C# 16

Phần 3: Kết luận Tài liệu tham khảo 21

Trang 4

Phần I: Giới Thiệu Lập Trình Symbolic

I Đặt vấn đề

Hiện nay các ngôn ngữ lập trình như C#, C++, java hay các ngôn ngữ lập trình

cấp cao khác là những ngôn ngữ đang rất thịnh hành và được lựa chọn là ngôn ngữ

phát triển cho nhiều phần mềm mới Chúng được coi là những ngôn ngữ có tính biểu

đạt cao, an toàn, thời gian phát triển nhanh, do đó làm giảm rất nhiều đi chi phí bảo trì,

phát triển phần mềm Ngôn ngữ cấp cao gần gũi hơn với ý niệm ngôn ngữ mà hầu hết

mọi người đều biết, nó bao gồm các danh từ, động từ, liên hệ và các thao tác luận lý

Các yếu tố này có thể được phối hợp, liên kết với nhau tạo thành một hình thức của

câu Các câu này được gọi là các mệnh đề của chương trình (program statement)

Chính vì những đặc điểm này, các lập trình viên dễ dàng đọc và dễ học ngôn ngữ cấp

cao hơn so với ngôn ngữ máy hoặc hợp ngữ

Nhưng hầu hết các ngôn ngữ lập trình này đều không hỗ trợ hoặc hỗ trợ rất hạn chế

lập trình tính toán hình thức, không hỗ trợ cấu trúc dữ liệu để diễn đạt các định lý,

công thức toán học, ngoài ra các ngôn ngữ lập trình này rất kém về việc tính toán chính

xác Vì vậy việc ra đời những công cụ lập trình như Maple,Matlab, Mathematica … đã

khắc phục được nhược điểm của các ngôn ngữ lập trình hiện nay

Trong đó Maple là phần mềm của hãng Waterloo Đây là một công cụ tuyệt vời hỗ

trợ cho việc học tập và nghiên cứu toán học

Không chỉ dừng lại ở việc hỗ trợ tính toán, bắt đầu từ Maple 10.0 trở đi, còn có khả

năng lập trình Ở phương diện này , có thể xem Maple như là một ngôn ngữ lập trình

trong đó chúng ta có thể tạo ra những chương trình và những gói (package) để tái sử

dụng

Một tính năng rất hay và cũng rất nổi bật là Maple có thể hợp tác với một ngôn ngữ

chủ (host language) như VB6.0,VB.Net, Java Khả năng đặc biệt này của Maple giúp

chúng ta thực hiện được những phần mềm (tính tóan , hỗ trợ dạy/học tóan ) đuợc viết

mã bằng ngôn ngữ chủ và liên kết với Maple để thực hiện các tác vụ tóan học phức tạp

mà đòi hỏi rất nhiều kĩ năng lập trình

Tuy nhiên các công cụ Maple,Matlab, Mathematica … mạnh về tính toán hình thức,

nhưng chúng lại có nhược điểm về xử lý giao diện Như vậy chúng ta có thể kết hợp

các ngôn ngữ lập trình cấp cao hiện nay như C#, VB.NET, Java để xử lý trên giao diện,

còn các xử lý về tính toán phức tạp, sẽ chuyển qua cho Maple xử lý, kết quả trả về sẽ

được C# tiếp nhận và xử lý hiển thị ra giao diện Đây cũng là mục tiêu nghiên cứu của

bài tiểu luận này

Bài tiểu luận sẽ minh họa quá trình kết nối và làm việc giữa C# và Maple để giải

quyết bài toán “Giải Và Biện Luận Phương Trình Bậc 2 Theo Tham Số m”

Trang 5

II Giới thiệu về Maple

Maple là một ngôn ngữ hỗ trợ mô phỏng toán học Kiểu tính toán của Maple được

biết dưới nhiều tên khác nhau như : Algebraic manipulation, Symbolic computation,

Computer algebra … Đặc điểm cơ bản của một ngôn ngữ như thế là nó có khả năng,

một cách ẩn hoặc hiện, tiến hành các tính toán mà các phần tử không nhất thiết phải

được gán giá trị Một đặc điểm khác là nó có khả năng hình thành các phép đơn giản,

rút gọn các biểu thức, và các phép biến đổi khác, thực hiện trên các phần tử chưa được

Ai đã từng quen với các ngôn ngữ lập trình truyền thống như Fortran, Pascal, C …

sẽ thấy rằng các ký hiệu trong ví dụ trên được dùng cho hai mục đích khác nhau : ký

hiệu f được dùng như một biến, nó được gán một giá trị, các ký hiệu x, y được dùng

như các ẩn, chưa có giá trị

Trong Maple, các câu lệnh thường được gán giá trị càng về sau nếu có thể, chẳng

sẽ làm cho x có giá trị 0 , và giá trị 0 này sẽ được gán vào biểu thức của f (lưu ý rằng

sin(0) được tự động “rút gọn” là 0 ) Và nếu như tiếp theo ta lại thực hiện câu lệnh :

b:=0 ;

g:=sin(x) ;

khi đó giá trị x sẽ là 1 và sin(1) sẽ được gán cho g (Lưu ý rằng sin(1) được xem như

một ký hiệu (symbol) hình thức, và không tự động được tính giá trị, tuy vậy ta có thể

tính giá trị số của nó dể dàng bằng lệnh evalf)

1.1 Các tính năng cơ bản của Maple

Có thể nêu vắn tắt các chức năng cơ bản của Maple như sau:

 Là một hệ thống tính toán trên các biểu thức đại số;

Trang 6

 Có thể thực hiệc được hầu hết các phép toán cơ bản trong chương trình toán đại

học và phổ thông;

 Cung cấp các công cụ minh họa hình học thuận tiện gồm: vẽ đồ thị tĩnh và động

của các đường và mặt được cho bởi các hàm tùy ý trong nhiều hệ tọa độ khác

nhau;

 Một ngôn ngữ lập trình đơn giản và mạnh mẽ có khả năng tương tác với các

ngôn ngữ lập trình khác;

 Cho phép trích xuất ra các định dạng khác nhau như LaTex, Word, HTML,

 Một công cụ biên soạn giáo án và bài giảng điện tử, thích hợp với các lớp học

tương tác trực tiếp; một trợ giáo hữu ích cho học sinh và sinh viên trong việc tự

học

1.2 Cấu trúc và giao diện

Cấu trúc tài nguyên của Maple

 Khi hởi động Maple , chương trình chỉ tự động kích hoạt nhân của Maple bao

gồm các phép toán và chức năng cơ bản nhất Phần nhân chiếm khoảng 10%

dung lượng của toàn chương trình

 Các dữ liệu và chương trình còn lại của Maple được lưu giữ trong thư viện

Maple và được chia ra 2 nhóm: nhóm các lệnh cơ bản và nhóm các gói lệnh

Maple 9.0 có khoảng 85 gói lệnh Gói lệnh có thể nạp vào bằng:

> with(plots):

Lệnh của Maple

 Lệnh được gõ vào trang làm việc ( worksheet) tại dấu nhắc lệnh " >" và theo

ngầm định được hiển thị bằng font Courier màu đỏ Một lệnh đựợc kết thúc bởi

dấu " :" hoặc dấu ";" và được ra lệnh thực hiện bằng việc nhấn Enter khi con trỏ

đang ở trên dòng lệnh

> factor(2*x^102+x^100 -2*x^3-x+60*x^2+30):

 Kết quả của lệnh được hiển thị ngay bên dưới dòng lệnh nếu dùng dấu " ;" Có

thể dễ dàng dùng chuột và bàn phím để thực hiện các chức năng bôi đen, copy,

paste, cut, delete đối với dữ liệu trên dòng lệnh hay kết quả thực hiện

Sử dụng dịch vụ trợ giúp ( Help) trong Maple Maple có dịch vụ trợ giúp khá đầy đủ

và thuận lợi bao gồm cú pháp, giải thích cách dùng vàcác ví dụ đi kèm Để nhận được

trợ giúp, có thể:

 Nếu đã biết tên lệnh thì từ dấu nhắc gõ vào

> ?factor

Trang 7

 Nếu dùng một gói lệnh thì khi nạp gói lệnh, Maple sẽ hiển thị toàn bộ lệnh trong

gói đó

 Một cách thông dụng nữa là dùng trình Help|Topic Search rồi gõ vào từ khóa

cần tìm

1.3 Lưu giữ và trích xuất dữ liệu

Trang làm việc của Maple sẽ được lưu giữ bằng file có đuôi ".mws" File được lưu

giữ bằng trình File|Save Một file đã có được mở bằng File|Open

Ngoài việc lưu giữ bằng định dạng của Maple như trên, dữ liệu có thể được trích

xuất thành các định dạng khác như Word, LaTex hay HTML Tr ích xuất bằng

File|Export

1.4 Các môi trường làm việc trong Maple

Maple có 2 môi trường làm việc là toán và văn bản Sau khi 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 trên thanh 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 "[>" trên thanh công cụ hay vào Insert để chuyển sang môi

trường toán

> ifactor(58600);

III Lập trình trong Maple

Một vấn đề quan trọng nhất của hệ Maple là ngôn ngữ lập trình Maple, được dùng

để tạo ra các chương trình con, các hàm, thủ tục và các thư viện riêng (Packages)

Lưu ý:

Các chương trình viết bằng Maple có thể được soạn thảo bằng các trình soạn thảo

text khác hoặc Maple text, nhưng nếu được viết ngay trong Maple thì sau khi đánh

xong một dòng lệnh, hãy nhấn phím SHIFT+ENTER, khi đó máy sẽ không thực hiện

lệnh này mà chỉ đưa con trỏ xuống hành dưới và hiện dấu nhắc để ta viết lệnh tiếp theo

… Sau khi viết xong tất cả các lệnh cần thiết, ta nhấn ENTER, thì tất cả các lệnh trên

sẽ được thực hiện tuần tự từ trên xuống Nếu đoạn chương trình này là một thủ tục

(procedure) hay một hàm (function), thì ta có thể xử dụng liền tiếp theo Muốn lưu lại

đoạn chương trình này, ta dùnh lệnh save ngay sau khi kết thúc đoạn chương trình,

chẳng hạn muốn lưu dưới tên : vidu trong thư mục e:\maplev3\khoai ta dùng

save ` e:/maplev3/khoai/vidu `

hoặc save ` e:/maplev3/khoai/vidu.m `

và một khi muốn kêu đoạn chương trình (thủ tục, hàm) này vào xử dụng, ta dùng

lệnh :

read ` e:/maplev3/khoai/vidu `

Trang 8

hoặc read ` e:/maplev3/khoai/vidu.m `

Chú ý rằng:

Tên tập tin dạng *.m sẽ tự động được lưu ở dạng mã riêng của Maple không thể

xem được bằng các trình soạn thảo thông thường, và khi được gọi lại, (bằng lệnh

read), nội dung sẽ không được hiện thị lại khi gọi , nhưng dĩ nhiên ta có thể xử dụng

chương trình (thủ tục, hàm) đó Với các tập tin đã lưu dạng không có phần mở rộng là

.m, khi gọi lại , nội dung sẽ được hiện thị lại

Trang 9

Phần II: Giải Và Biện Luận Phương Trình Bậc 2 Theo Tham Số m

I Giải Phương Trình Bậc 2

Dạng tổng quát của phương trình bậc hai một ẩn là:

𝑎𝑥2 + 𝑏𝑥 + 𝑐 = 0 trong đó a ≠ 0, các số a, b và c là các hằng số (thực hoặc phức) được gọi là các hệ số: a

là hệ số của x², b là hệ số của x và c là hằng số hay số hạng tự do

Khi xét trên trường số thực, nghĩa là chỉ tìm các giá trị thực thỏa mãn phương trình,

phương trình có thể có hai nghiệm khác nhau (còn nói là hai nghiệm phân biệt), hai

nghiệm bằng nhau (có nghiệm kép hoặc nghiệm bội hai) hoặc không có nghiệm (vô

nghiệm)

Ta sử dụng các hàm trong Maple để giải quyết vấn đề về giải phương trình

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 2 để lấy ra các hệ số a, b, c

3 Nếu a = 0 không xét vì không còn là phương trình bậc 2

4 Ngược lại nếu a # 0

delta = b*b - 4*a*c

- Nếu delta < 0 thì phương trình vô nghiệm

- Ngược lại nếu delta = 0 thì Phương trình có nghiệm kép: x1 = x2 = -b/2a

- Ngược lại nếu delta > 0 thì phương trình có hai nghiệm phân biệt:

Trang 10

c := simplify(tam - a*bien^2 - b*bien);

delta := b^2-4*a*c;

return a,b,c,delta;

end proc:

Hàm LayHeSo sẽ trả về hệ số a,b,c và delta

2 Xây dựng thủ tục giải phương trình bậc 2

print("Delta <0, Phuong trinh vo nghiem\n");

elif (delta =0) then

printf("Delta=0 Phuong trinh co nghiem kep:\n");

Trang 11

Hình minh họa giải và tìm nghiệm của phương trình bậc 2

Trang 12

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 2 để lấy ra các hệ số a, b, c

3 Nếu a = 0 không xét vì không còn là phương trình bậc 2

4 Ngược lại nếu a # 0

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 > 0 với mọi m thì phương trình 𝑎𝑥2 + 𝑏𝑥 + 𝑐 = 0 luôn có 2

nghiệm phân biệt

- Xét delta < 0 với mọi m thì phương trình 𝑎𝑥2 + 𝑏𝑥 + 𝑐 = 0 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

Trang 13

1 Xây dựng thủ tục TimNghiemThuc := proc(expr)

Với tham số expr là một phương trình theo biến m, đây là biểu thức của Delta

Bởi vì với expr là phương trình bậc 2 theo m thì hàm solve(expr) của Maple sẽ trả

về 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

Trang 14

if(not type(a,'numeric')) then

# Neu bieu thuc theo delta vo nghiem -> delta > 0 voi moi m

# Hoac delta<0 voi moi m

if( nops(nghiemDelta)=0) then

#the so vao tinh xem delta dương hay âm

# The m = 0

giatriDelta := subs({m=0},delta);

if(giatriDelta < 0) then #delta >0 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 2 nghiem voi moi m: \n");

printf("Voi m = %a thi Delta=0 => Phuong trinh co

nghiem kep\n", i);

# xet dau tam thuc bac 2

# neu truong hop nghiem cua delta la nghiệm đơn (nghiệm

Trang 15

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 2 nghiem phan biet\n",bienM);

delta = simplify(delta):

sqrt(delta))/(2*a),bien=(-b+sqrt(delta))/(2*a));

elif (giatritamthucphai<0 and giatritamthuctrai<0) then

printf("m != %a thi Delta < 0 => phuong trinh vo nghiem \n",m);

elif (giatritamthucphai >0 and giatritamthuctrai<0) then

printf("m < %a thi Delta < 0 => phuong trinh vo nghiem \n",m);

printf("m > %a thi Delta > 0 =>phuong trinh co 2 nghiem phan biệt\n",bienM);

delta = simplify(delta):

sqrt(delta))/(2*a),bien=(-b+sqrt(delta))/(2*a));

elif (giatritamthucphai <0 and giatritamthuctrai>0) then

printf("m > %a thi Delta<0 => phuong trinh vo nghiem \n",m);

printf("m < %a thi Delta>0=> phuong trinh co 2 nghiem phan biet\n",bienM);

delta = simplify(delta):

sqrt(delta))/(2*a),bien=(-b+sqrt(delta))/(2*a));

printf("m != %a thi Delta > 0 => phuong trinh co

2 nghiem phan biet\n",m1);

Trang 16

sqrt(delta))/(2*a),bien=(-b+sqrt(delta))/(2*a));

else

printf("Voi m < %a hoac m > %a phuong trinh co 2

nghiem phan biet\n",m1,m2);

sqrt(delta))/(2*a),bien=(-b+sqrt(delta))/(2*a));

print(Delta=simplify(delta),bien=(-b-printf("Voi %a < m < %a phuong trinh vo

Trang 17

Ả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

Trong C#, xây dựng lớp Maple và MapleEngine để kết nối đến Maple, và gọi các

hàm của Maple chạy

Để kết nối với Maple chúng ta cần sử dụng component của Maple là

maplec.dll

C# sẽ nhận kết quả trả về và hiển thị lên giao diện và sử dụng component

mintext.dll để đọc chuỗi Latex của công thức toán học, và hiển thị chúng trên

giao diện

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

HÌNH ẢNH LIÊN QUAN

Hình minh họa giải và tìm nghiệm của phương trình bậc 2 - 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
Hình minh họa giải và tìm nghiệm của phương trình bậc 2 (Trang 11)

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