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

Ứ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

18 1K 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 18
Dung lượng 77,56 KB

Nội dung

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ìn

Trang 1

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!

Trang 2

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

Trang 3

MỤC LỤC

LỜI MỞ ĐẦU 1

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

MỤC LỤC 3

NỘI DUNG 5

CHƯƠNG I: GIỚI THIỆU VỀ MAPLE VÀ MỘT SỐ LỆNH ĐƯỢC SỬ DỤNG TRONG CHƯƠNG TRÌNH 5

I.1 Giới thiệu về Maple 5

I.2 Một số lệnh được sử dụng trong chương trình 5

II.2.1 Lệnh lhs(expr) và rhs(expr) 5

II.2.2 Lệnh coeff(p,x) 6

II.2.3 Lệnh expand(expr) 6

II.2.4 Lệnh solve(equations, variables) và lệnh linsolve(matrix, vector) 6

II.2.5 Lệnh nops(e) 6

II.2.6 Lệnh convert(expr,form) 6

II.2.7 Lệnh subs(x=a,expr) 6

II.2.8 Lệnh parse(string) 6

II.2.9 Cách lệnh về chuỗi 6

II.2.10 Các lệnh về ma trận 6

CHƯƠNG II: GIẢI VÀ BIỆN LUẬN PHƯƠNG TRÌNH VÀ HỆ PHƯƠNG TRÌNH THEO THAM SỐ M 7

II.1 Giải và biện luận phương trình bậc nhất 1 ẩn số theo tham số m 7

II.1.1 Phân tích yêu cầu 7

II.1.2 Cấu trúc dữ liệu 7

II.1.3 Thuật giải 7

II.1.4 Thủ tục 8

Trang 4

II.1.5 Dữ liệu thử nghiệm 8

II.2 Giải và biện luận phương trình bậc hai 1 ẩn số theo tham số m 9

II.2.1 Phân tích yêu cầu 9

II.2.2 Cấu trúc dữ liệu 9

II.2.3 Thuật giải 9

II.2.4 Thủ tục 10

II.2.5 Dữ liệu thử nghiệm 11

II.3 Giải và biện luận hệ phương trình bậc nhất có 2 hoặc 3 ẩn số theo tham số m 11

II.3.1 Phân tích yêu cầu 11

II.3.2 Cấu trúc dữ liệu 11

II.3.3 Thuật giải 12

II.3.4 Thủ tục 13

II.3.5 Dữ liệu thử nghiệm 15

KẾT LUẬN 16

TÀI LIỆU THAM KHẢO 17

Trang 5

NỘI DUNG

CHƯƠNG I: GIỚI THIỆU VỀ MAPLE VÀ MỘT SỐ LỆNH

ĐƯỢC SỬ DỤNG TRONG CHƯƠNG TRÌNH

I.1 Giới thiệu về Maple

Maple là một hệ thống tính toán trên các biểu thức đại số Cho đến nay, Maple đã được phát triển qua nhiều phiên bản khác nhau và ngày càng hoàn thiện Phần mềm Maple có thể thực hiện các công việc sau:

 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

Trang 6

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)

Dùng để chuyển biểu thức sang kiểu dữ liệu bất kỳ

II.2.7 Lệnh subs(x=a,expr)

Dùng để giải biểu thức expr với biến x có giá trị là a

II.2.8 Lệnh parse(string)

Dùng chuyển chuỗi sang biểu thức

II.2.9 Cách lệnh về chuỗi

- Lệnh searchtext (pattern, string): Dùng tìm chuỗi con pattern trong chuỗi string

- Lệnh substring (string, range):Dùng copy chuỗi string theo giới hạn range

II.2.10.Các lệnh về ma trận

- Lệnh Matrix(m, n, L): Dùng tạo ma trận cấp m x n từ bảng liệt kê các phần tử của ma trận L theo thứ tự từ trái sang phải và từ trên xuống dưới

- Lệnh Determinant(A): Tính định thức của ma trận A

- Lệnh DeleteColumn(A,L): xóa cột của ma trận A theo giới hạn L

Trang 7

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

PHƯƠNG TRÌNH THEO THAM SỐ M

II.1 Giải và biện luận phương trình bậc nhất 1 ẩn số theo tham số m

II.1.1 Phân tích yêu cầu

Cho phương trình bậc nhất 1 ẩn số có dạng ax + b =0 theo tham số m

Yêu cầu: Giải và biện luận phương trình bậc nhất trên

II.1.2 Cấu trúc dữ liệu

- Phương trình bậc nhất được lưu trữ dưới dạng hàm số f:=ax+b

- 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.1.3 Thuật giải

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

Trang 8

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

else

if b=0 then printf("phương trình vô số nghiệm");

else printf("phương trình vô nghiệm") ; end if

end if

#TH 2: phương trình có tham số m else

listm:={solve(a)}; #danh sách chứa nghiệm của m #TH a<>0

printf("%s %s %s %s" , "Nếu m <>",convert(listm,string),"thì phương trình có nghiệm x=",convert(-b/a,string));

#TH a=0 for i from 1 to nops(listm)do t:=subs(m = listm[i], b);

printf("%s %s %s %s","Nếu m=",convert(listm[i],string),", thế b=",convert(t,string));

if t = 0 then printf(" thì phương trình vô số nghiệm");

else printf(" thì phương trình vô nghiệm") ; end if

end do;

end if;

end proc:

Trang 9

II.1.5 Dữ liệu thử nghiệm

> giaiptbac1(m*(x-4)=5*x-2);

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 ax2 + 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:= ax2 + 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 ax2 + 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ì:

+ Tính delta:=b2 -4ac + Trường hợp 1a: Nếu delta không có tham số m thì xét dấu delta:

Nếu delta>0 thì x1,2=−b±delta

2a ,

Trang 10

Ngược lại (delta<0) thì phương trình vô nghiệm

+ Trường hợp 1b: delta có tham số m thì biện luận delta theo m: Tính giá trị m theo delta (m có thể có nhiều giá trị)

Xét từng giá trị của m:

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

Nếu m=0: tính nghiệm kép x1=x2=−b 2 a

Nếu m>0: tính 2 nghiệm phân biệt: x1,2=−b±delta

2a

- Trường hợp 2: phương trình có tham số m theo a:

- Nếu a=0:

Tính giá trị m theo a (m có thể có nhiều giá trị)

Thế từng giá trị của m vào phương trình, trở về phương trình bậc 1

- Nếu a <>0 thì biện luận delta theo tham số m (giống trường hợp 1b) Bước 3: Kết luận nghiệm của phương trình

II.2.4 Thủ tục

giaiptbac2:=proc(pt)

local f,a,b,c,d,x1,x2,t,listm,i,f1;

#B1: đưa pt về dạng ax^2 +bx +c =0

f:=lhs(pt)- rhs(pt); a:=coeff(f,x^2); b:=coeff(f,x); c:=expand(f-a*x^2 - b*x); #B2: Biện luận pt theo a, b và c

if type(a,'numeric') then #TH 1 phương trình không có tham số m ở a

if a=0 then

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

Trang 11

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

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),": ");

giaiptbac1(f1);

end do;

#TH a<>0: tính delta, xét dấu delta xetdelta(d,a,b,c); # thủ tục tính từng giá trị nghiệm m của delta end if;

end proc:

II.2.5 Dữ liệu thử nghiệm

> giaiptbac2(x^2-1=2*m*x-2*m);

Khi m< 1 : phương trình vô nghiệm

Khi m= 1 : phương trình có nghiệm kép x= 1

Khi m> 1 : phương trình có 2 nghiệm phân biệt

> giaiptbac2((m-2)*x^2-2*(m+1)*x=5-m);

Khi m-2 =0 => m= 2 : phương trình có nghiệm x= -1/2

Khi m< 1 : phương trình vô nghiệm

Khi m= 1 : phương trình có nghiệm kép x= -2

Khi m> 1 : phương trình có 2 nghiệm phân biệt

Trang 12

số m

II.3.1 Phân tích yêu cầu

Cho hệ phương trình bậc nhất có 2 hoặc 3 ẩn số theo tham số m

Yêu cầu: Giải và biện luận phương trình bậc nhất trên

II.3.2 Cấu trúc dữ liệu

- Hệ phương trình bậc nhất được lưu trữ dưới dạng chuỗi

- Sử dụng mảng 2 chiều để lưu trữ các ma trận hệ số

- 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.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

{a1x+b1y=d1

a2x+b2y=d2

hoặc

{a1x+b1y+c1z=d1

a2x+b2y+c2z=d2

a3x+b3y+c3z=d3

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

Trang 13

- 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

+ 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ệ phương trình bậc hai, bậc ba, …

II.3.4 Thủ tục

giaiheptbac1:=proc(hept)

local he1,he2,i,j,k,l,o,pt,f,x,y,z,t,dx,dy,dz,mang,d,c,mt,matran, A,A1,A2,A3,DetA,

DetA1, DetA2,DetA3,listm,q;

#Bước 1: Đưa hệ phương trình về đúng dạng theo yêu cầu

d:=1; he1:=hept; i:=searchtext(";",he1); dx:=0;dy:=0;dz:=0;

while i>0 do

pt:=substring(he1,1 i-1); j:=searchtext("x",pt);

if j=0 then mang[d,1]:=0; dx:=dx+1; #để ktra nếu tất cả cột x=0 thì xóa else

mang[d,1]:=parse(substring(pt,1 j-2));

end if;

Trang 14

mang[d,2]:=0; dy:=dy+1;

else mang[d,2]:=parse(substring(pt,(j+1) (k-2)));

end if;

l:=searchtext("z",pt);

if l=0 then mang[d,3]:=0; dz:=dz+1;

else mang[d,3]:=parse(substring(pt,(k+1) (l-2)));

end if;

o:=searchtext("=",pt); mang[d,4]:=parse(substring(pt,(o+1) length(pt))); d:=d+1; #tăng số dòng, tức là số lượng phương trình

#xóa phương trình trước đó he2:= Delete(he1,1 i); #xóa từ đầu đến dấu ; he1:=he2; i:=searchtext(";", he1);

od;

#số cột hiện tại =4;

c:=4;

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

DetA1:=Determinant(A1);

#A2: hoán vị cột hệ số tự do vào cột y, xóa cột y(cột cuối),

Ngày đăng: 10/04/2015, 00:50

TỪ KHÓA LIÊN QUAN

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

TÀI LIỆU LIÊN QUAN

w