Ứng dụng lập trình Symbolic để giải và biện luận phương trình và hệ phương trình theo tham số m - Pdf 26

Bài thu hoạch môn Lập trình Symbolic cho TTNT GVHD: PGS.TS. Đỗ Văn
Nhơn
LỜI MỞ ĐẦU
Trong thời đại ngày nay, toán học đã đóng góp một phần quan trọng trong
cuộc sống của chúng ta. Trước đây, khi giải một bài toán thì cần phải tốn rất nhiều
thời gian và công sức. Tuy nhiên, gần đây do sự phát triển mạnh mẽ của công nghệ
thông tin thì việc giải một bài toán trở nên khá đơn giản. Đó là nhờ sự ra đời phần
mềm Maple do một nhóm các nhà khoa học của Canada thuộc trường đại học
Waterloo xây dựng. Maple 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, có thể thực hiện được mọi điều từ những phép toán đơn giản
nhất, sơ cấp nhất cho đến những tính toán phức tạp nhất.
Chính vì lý do trên nên sau khi học xong môn “Lập trình Symbolic cho trí
tuệ nhân tạo”, em đã chọn đề tài “Ứng dụng lập trình Symbolic để giải và biện luận
phương trình và hệ phương trình theo tham số m”. Trong phạm vi bài thu hoạch
này, em sẽ phân tích cấu trúc dữ liệu, giải thuật để giải và biện luận phương trình
và hệ phương trình theo tham số m, đồng thời viết một chương trình để giải và biện
luận phương trình và hệ phương trình theo tham số m bằng phần mềm Maple 16.
Qua đây, em xin chân thành cảm ơn PGS.TS. Đỗ Văn Nhơn đã tận tình
hướng dẫn em môn học bổ ích và đầy ý nghĩa này. Em xin cảm ơn các bạn cùng
khoá và các anh chị khoá trước đã giúp đỡ em tìm tài liệu và góp ý cho em hoàn
thành tốt bài thu hoạch này!
Cao Thị Thuỳ Linh – MSHV: CH1101099 Trang 1
Bài thu hoạch môn Lập trình Symbolic cho TTNT GVHD: PGS.TS. Đỗ Văn
Nhơn
NHẬN XÉT CỦA GIẢNG VIÊN HƯỚNG DẪN

• Thực hiện các tính toán với khối lượng lớn, với thời gian nhanh và độ chính xác
cao.
• Sử dụng các gói chuyên dụng của Maple để giải quyết các bài toán cụ thể như vẽ
đồ thị, hình học giải tích, đại số tuyến tính.
• Thiết kế các đối tượng 3 chiều.
• Không chỉ dừng lại ở việc hỗ trợ tính toán, Maple còn có khả năng lập trình, 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 toán, 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ụ toán
học phức tạp mà đòi hỏi rất nhiều kỹ năng lập trình.
I.2. Một số lệnh được sử dụng trong chương trình
II.2.1. Lệnh lhs(expr) và rhs(expr)
Dùng lấy vế trái và vế phải của biểu thức expr.
Cao Thị Thuỳ Linh – MSHV: CH1101099 Trang 4
Bài thu hoạch môn Lập trình Symbolic cho TTNT GVHD: PGS.TS. Đỗ Văn
Nhơn
II.2.2. Lệnh coeff(p,x)
Dùng lấy hệ số của biến x trong biểu thức p.
II.2.3. Lệnh expand(expr)
Dùng để khai triển biểu thức đại số expr.
II.2.4. Lệnh solve(equations, variables) và lệnh linsolve(matrix, vector)
Lệnh solve dùng để tìm nghiệm của phương trình, bất phương trình.
Lệnh linsolve dùng để giải hệ phương trình đại số tuyến tính với vector
xác định vế phải.
II.2.5. Lệnh nops(e)
Dùng để chỉ số lượng phần tử trong danh sách e.
II.2.6. Lệnh convert(expr,form)

Input: phương trình bậc nhất 1 ẩn số theo tham số m.
Output: giải và biện luận phương trình.
Bước 1: Đưa phương trình về dạng ax + b=0
Bước 2: Biện luận phương trình theo a và b:
- Trường hợp 1: phương trình không có tham số m:
+ Nếu a <>0 thì phương trình có nghiệm x:=-b/a,
Ngược lại, nếu b=0 thì phương trình vô số nghiệm,
Ngược lại phương trình vô nghiệm.
- Trường hợp 2: phương trình có tham số m:
+ Nếu a <>0: tính giá trị m ứng với trường hợp a<>0,
khi đó phương trình có nghiệm x:=-b/a.
+ Nếu a=0: tính giá trị m ứng với trường hợp a=0 (m có thể có 1
hoặc nhiều giá trị).
Cao Thị Thuỳ Linh – MSHV: CH1101099 Trang 6
Bài thu hoạch môn Lập trình Symbolic cho TTNT GVHD: PGS.TS. Đỗ Văn
Nhơn
Xét từng giá trị của m, tính b dựa vào m.
Nếu b=0 thì phương trình vô số nghiệm,
Ngược lại phương trình vô nghiệm.
Bước 3: Kết luận nghiệm của phương trình.
II.1.4. Thủ tục
giaiptbac1:=proc(pt)
local f,a,b,listm,i,t;
#B1: đưa pt về dạng ax +b =0
f:=lhs(pt)- rhs(pt); a:=coeff(f,x); b:=expand(f-a*x);
#B2: Biện luận pt theo a và b
#TH 1:phương trình không có tham số m
if type(a,'numeric') then
if a<> 0 then
printf("%s %s" , "phương trình có nghiệm x=",convert(-b/a,string));

Nhơn
Nếu m <> {5} thì phương trình có nghiệm x= -(-4*m+2)/(m-5)
Nếu m= 5 , thế b= -18 thì phương trình vô nghiệm
> giaiptbac1(m^2 *x +2=x+2*m);
Nếu m <> {-1, 1} thì phương trình có nghiệm x= -(2-2*m)/(m^2-1)
Nếu m= -1 , thế b= 4 thì phương trình vô nghiệm
Nếu m= 1 , thế b= 0 thì phương trình vô số nghiệm
II.2. Giải và biện luận phương trình bậc hai 1 ẩn số theo tham số m
II.2.1. Phân tích yêu cầu
Cho phương trình bậc hai 1 ẩn số có dạng ax
2
+ bx + c =0 theo tham số m.
Yêu cầu: Giải và biện luận phương trình bậc hai trên.
II.2.2. Cấu trúc dữ liệu
- Phương trình bậc hai được lưu trữ dưới dạng hàm số f:= ax
2
+ bx + c
- Dùng cấu trúc rẽ nhánh if, cấu trúc lặp for để giải và biện luận phương
trình.
- Dùng danh sách tập hợp để lưu trữ danh sách nghiệm.
II.2.3. Thuật giải
Input: phương trình bậc hai 1 ẩn số theo tham số m.
Output: giải và biện luận phương trình.
Bước 1: Đưa phương trình về dạng ax
2
+ bx + c=0
Bước 2: Biện luận phương trình theo a, b và c:
- Trường hợp 1: phương trình không có tham số m theo a:
- Nếu a =0 thì trở về phương trình bậc 1.
- Ngược lại (tức a <>0) thì:

giaiptbac1(pt); #trở về pt bậc 1
else
d:=b*b - 4*a*c;
if type(d,'numeric') then #xét TH delta có tham số m không?
#TH 1a: phương trình không có tham số m ở delta=>pt không có tham số m
if d>0 then
x1:=(-b+sqrt(d))/(2*a);
x2:=(-b-sqrt(d))/(2*a);
printf("%s %s %s %s","Phương trình có 2 nghiệm phân biệt
là",convert(x1,string),",",convert(x2,string));
else
if d=0 then
x1:=-b/(2*a);
printf("%s %s","Phương trình có nghiệm kép là",convert(x1,string));
else
Cao Thị Thuỳ Linh – MSHV: CH1101099 Trang 9
Bài thu hoạch môn Lập trình Symbolic cho TTNT GVHD: PGS.TS. Đỗ Văn
Nhơn
printf("Phương trình vô nghiệm");
end if;
end if;
else #TH 1b: phương trình có tham số m ở delta =>biện luận pt theo delta
xetdelta(d,a,b,c); # thủ tục tính từng giá trị nghiệm m của delta
else #TH2: phương trình có tham số m ở a
#TH a=0
listm:={solve(a)};
for i from 1 to nops(listm)do
f1:=subs(m = listm[i],pt); #thế giá trị m vào phương trình
printf("%s %s %s %s %s","Khi ",convert(a,string),"=0 =>
m=",convert(listm[i],string),": ");

II.3.3. Thuật giải
Dùng phương pháp Cramer để giải và biện luận hệ phương trình.
Input: hệ phương trình bậc nhất có 2 hoặc 3 ẩn số theo tham số m.
Output: giải và biện luận hệ phương trình.
Bước 1: Đưa hệ phương trình về dạng
hoặc
Bước 2: Biện luận hệ phương trình:
- Tính ma trận hệ số A, tính định thức detA, nếu det A>0 thì dùng
phương pháp Cramer để giải và biện luận phương trình, ngược lại thì dừng chương
trình.
- Tính ma trận Aj (A1, A2, A3) bằng cách thay cột thứ j bởi cột các hệ
số tự do, tính định thức detA1, detA2, detA3 (trường hợp hệ phương trình 2 ẩn số
thì không tính detA3).
- Tính giá trị m theo detA (m có thể có nhiều giá trị).
- Xét từng giá trị m:
+ Nếu detA <>0: tính nghiệm x, y, z tùy theo hệ phương trình có 2
hoặc 3 ẩn số. Nghiệm được tính theo công thức sau:
x:=detA1/detA
y:=detA2/detA
z:=detA3/detA
Cao Thị Thuỳ Linh – MSHV: CH1101099 Trang 11
Bài thu hoạch môn Lập trình Symbolic cho TTNT GVHD: PGS.TS. Đỗ Văn
Nhơn
+ Nếu detA=0:
Thế giá trị m vào detA1.
Nếu detA1<>0 thì kết luận vô nghiệm
Ngược lại nếu detA2=detA3=0 thì tính nghiệm.
Bước 3: Kết luận nghiệm của hệ phương trình.
Hạn chế của giải thuật này là chỉ giải và biện luận hệ phương trình bậc
nhất có 2 hoặc 3 ẩn số, chưa giải được hệ phương trình có nhiều hơn 3 ẩn số và hệ

he1:=he2; i:=searchtext(";", he1);
od;
#số cột hiện tại =4;
c:=4;
Cao Thị Thuỳ Linh – MSHV: CH1101099 Trang 12
Bài thu hoạch môn Lập trình Symbolic cho TTNT GVHD: PGS.TS. Đỗ Văn
Nhơn
#Bước 2:
#Đổ mảng 2 chiều vào ma trận
mt:=Matrix(d-1,4,mang);
matran:=Matrix(d-1,4,mang);#TH không xóa cột nào
#để ma trận vuông:kiểm tra nếu cột nào toàn 0 hết thì xóa cột đó ra (trừ cột cuối)
if dx=d-1 then
matran:=DeleteColumn(mt,[1]);
c:=c-1;
end if;
if dy=d-1 then
matran:=DeleteColumn(mt,[2]);
c:=c-1;
end if;
if dz=d-1 then
matran:=DeleteColumn(mt,[3]);
c:=c-1;
end if;
#Tính ma trận A, A1, A2, A3 dựa vào ma trận
#A: xoá cột tự do d (cột cuối):
A:=DeleteColumn(matran, c);
DetA:=Determinant(A); #ma trận vuông thì mới tính được
#A1: hoán vị cột hệ số tự do vào cột x, xóa cột x(cột cuối),
A1:=DeleteColumn(swapcol(matran,1,c), c);

#TH detaA=0, thế nghiệm m vào detA1
if subs(m = listm[i],DetA1) <>0 then #Khác 0 thì vô nghiệm
printf("%s %s %s %s %s","Khi Det(A)=",convert(listm[i],string),",thế vào
tính DetA1=",convert(subs(m = listm[i],DetA1),string),"thì phương trình vô nghiệm");
else #Th =0 thì thế vào DetA2 và DetA3 để kiểm tra, nếu =0 thì tính nghiệm
if subs(m = listm[i],DetA2) =0 and subs(m = listm[i],DetA3) =0 then
#tính nghiệm
if c=4 then
j:=vector(3,q);
else
j:=vector(2,q);
end if;
#thế m vào ma trận A
printf("%s %s %s","Khi Det(A)=",convert(listm[i],string),",thế vào tính
DetA1=DetA2=DetA3=0, khi đó nghiệm của hệ là:");
linsolve(subs(m=listm[i],A),j);
end if;
end if;
od;
end proc:
II.3.5. Dữ liệu thử nghiệm
> giaiheptbac1("(m-1)*x+2*y=2*m+1;m*x-3*y=0;");
Khi Det(A)<> 3/5 : phương trình có nghiệm:
x= (-6*m-3)/(-5*m+3)
y= -(2*m+1)*m/(-5*m+3)
Khi Det(A)= 3/5 ,thế vào tính DetA1= -33/5 thì phương trình vô nghiệm
> giaiheptbac1("1*x+2*y+2*z=0;-2*x+(m-2)*y+(m-5)*z=2;m*x+1*y+(m+1)*z=-2;");
Khi Det(A)<> 1 : phương trình có nghiệm:
x= (12-4*m)/(m^2-4*m+3)
y= 0

Demarco. Maple 9 – Introductory Programming Guide. Waterloo Maple
Inc. (2003).
6. Heck .A, Introduction to Maple,Springer – Verlag, New York, Inc. 1996.
Cao Thị Thuỳ Linh – MSHV: CH1101099 Trang 16


Nhờ tải bản gốc

Tài liệu, ebook tham khảo khác

Music ♫

Copyright: Tài liệu đại học © DMCA.com Protection Status