Tải bản đầy đủ (.docx) (13 trang)

ỨNG DỤNG MAPLE TRONG GIẢI BÀI TOÁN HÌNH HỌC GIẢI TÍCH

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (480.32 KB, 13 trang )

ĐẠI HỌC QUỐC GIA THÀNH PHỐ HỒ CHÍ MINH
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN

BÁO CÁO MÔN HỌC
LẬP TRÌNH SYMBOLIC VÀ ỨNG DỤNG
ĐỀ TÀI:
ỨNG DỤNG MAPLE TRONG GIẢI BÀI TOÁN HÌNH HỌC
GIẢI TÍCH
Giảng viên : PGS.TS ĐỖ VĂN NHƠN
Học viên thực hiện : ĐÀM THANH LONG
Mã số học viên : CH1101020
TP.HCM 2013
CHƯƠNG I. GIỚI THIỆU
Ngày nay, cùng với những thành tựu tuyệt vời trong lĩnh vực công nghệ thông tin, người
ta đã xây dựng nhiều phần mềm để hỗ trợ cho công tác học tập và nghiên cứu. Một thực
tiễn đã được biết từ lâu là những bài toán đặt ra trong thực tiễn thường không được giải
quyết bằng những mẹo tính toán thủ công mà phải dùng đến năng lực tính toán của máy
tính điện tử. Phần mềm tính toán ra đời nhằm đáp ứng yêu cầu của thực tiễn, đưa các tính
toán phức tạp (cả phổ thông lẫn cao cấp) trở thành công cụ làm việc dễ dàng cho mọi
người.
Toán học là thống nhất nên các phần mềm tính toán cũng có cấu trúc cơ bản giống nhau.
Vì vậy, nếu biết sử dụng phần mềm toán học nào đó thì cũng dễ dàng sử dụng được các
Báo cáo môn lập trình symbolic và ứng dụng Trang 2
phần mềm khác. Phần mềm tính toán Maple đã làm cho việc giải các bài toán trở nên đơn
giản và nhanh chóng góp phần làm tăng hiệu suất làm việc của chúng ta trong học tập,
nghiên cứu và giảng dạy. Maple là phần mềm do một nhóm các nhà khoa học của Canada
thuộc trường đại học Waterloo làm ra với mục đích giải quyết mọi công việc liên quan
đến tính toán
Mục tiêu của bài viết là sử dụng tính năng mạnh mẽ của phần mềm Maple để phân tích
giải những bài toán khó và phức tạp.
CHƯƠNG II. MÔ TẢ, PHÂN TÍCH VÀ VIẾT THỦ TỤC BÀI TOÁN


1/ Bài toán
Viết phương trình đường thẳng qua một điểm vuông 1 đường thẳng (dạng tham số) và
cắt một đường thẳng là giao tuyến 2 mặt phẳng.
Yêu
cầu bài toán suy ra đường thẳng cần tìm là giao tuyến của 2 mặt phẳng được xác
định như sau. Mặt phẳng thứ nhất qua 1 điểm đề bài và chứa đường thẳng là giao tuyến
2 mặt
phẳng.
Về mặt phẳng
 Mặt phẳng phương trình chính tắc có dạng là: Ax +By + Cz +D=0
 Vector pháp tuyến của mặt phẳng và các vấn đề liên quan:
Báo cáo môn lập trình symbolic và ứng dụng Trang 3
 Là vector có giá vuông gốc với mặt phẳng.
 Cho phương trình là Ax +By + Cz +D=0 thì vector pháp tuyến là =(A, B, C)
Về đường thẳng

Xác định đường thẳng cho điểm A(x0, y0, z0) và vector chỉ phương = (a1, a2, a3)
thì

Phương trình tham số là

Phương trình đường thẳng dạng này luôn được biểu diễn bởi 3 phương trình:

Phương trình dạng chính tắc là
= =

Phương trình đường thẳng là giao của 2 mặt phẳng
d =
2/ Cơ sở lý thuyết và phương hướng giải quyết
Vector:

Được tạo từ hai điểm bất kỳ không trùng nhau
Cho A(a
1
, a
2
, a
3
) và B(b
1
, b
2
, b
3
) thì = (b
1
– a
1
, b
2
– a
2
, b
3
– a
3
)
Tích hữu hướng hai vector: là một vector vuông góc với từng vector thành phần, có
phương được xác định theo nguyên tắc mở nút chai
Cho =( a
1

, a
2
, a
3
), =( b
1
, b
2
, b
3
) và =( c
1
, c
2
, c
3
) thì =
Hai vector cùng phương: khi tỷ lệ thành phần bằng nhau
Cho =( a
1
, a
2
, a
3
) và =( b
1
, b
2
, b
3

). được gọi là cùng phương nếu và chỉ nếu = = . Suy ra
hai vector không cùng phương khi và chỉ khi tồn tại một thành phần có tỉ lệ không bằng
các thành phần khác
Mặt phẳng:
Báo cáo môn lập trình symbolic và ứng dụng Trang 4
Nếu có phương trình mặt phẳng thì ta luôn lấy được 1 vector pháp tuyến và 1 điểm.
Nếu có 1 vector pháp tuyến và 1 điểm thì ta luôn viết được phương trình mặt phẳng.
Như vậy, mọi bài toán viết phương trình mặt phẳng ta đều có thể đưa về dạng bài toán
trên (1 điểm và 1 vector pháp tuyến).
Chứng minh:
 Đưa bài toán 3 điểm về bài toán 1 điểm và 1 vector pháp tuyến.
Từ 3 điểm, ta lập được 2 vector chỉ phương của mặt phẳng. Từ 2 vector chỉ phương đó ta
được vector pháp tuyến của mặt phẳng.
Lấy 1 điểm tùy ý trong 3 điểm kết hợp với vector pháp tuyến mới tìm được, ta có bài toán
1 điểm và 1 vector pháp tuyến.
 Đưa bài toán 2 điểm và 1 vector chỉ phương về bài toán 1 điểm và 1 vector pháp
tuyến.
Từ 2 điểm, ta lập được 1 vector chỉ phương . Kết hợp với vector chỉ phương đề bài, ta
được vector pháp tuyến của mặt phẳng.
Lấy tùy ý 1 trong 2 điểm kết hợp với vector pháp tuyến mới tìm được, ta được bài toán 1
điểm và 1 vector pháp tuyến.
 Đưa bài toán 1 điểm và 2 chỉ về bài toán 1 điểm và 1 vector pháp tuyến.
Từ 2 vector chỉ phương ta tìm được vector pháp tuyến của mặt phẳng. Kết hợp với điểm
đề bài ta có bài toán 1 điểm và 1 vector pháp tuyến.
Đường thẳng:
Nếu có phương trình đường thẳng thì ta luôn lấy được 1 điểm và 1 vector chỉ phương.
Nếu có 1 điểm và 1 vector chỉ phương ta luôn viết được phương trình đường thẳng hoặc
nếu có 2 điểm thì ta cũng viết được phương trình đư ờng thẳng bằng 2 cách.
Báo cáo môn lập trình symbolic và ứng dụng Trang 5
Giải quyết bài toán phương trình đường thẳng có rất nhiều cách. Tuy nhiên ta sẽ giải

quyết bài toán gọn nhẹ dễ dàng.
Mọi bài toán viết phương trình đường thẳng ta đều đưa về được dạng cơ bản là điểm và
vector chỉ phương
Như vậy, muốn viết được phương trình đường thẳng ta cần một điểm và một vector chỉ
phương
3/ Phân tích bài toán
Đ
ây là một bài toán khó và khá phức tạp, ta giải bài toán này theo các bước sau.
Yêu cầu: Nếu có phương trình đường thẳng dạng chính tắc ta cũng dễ dàng chuyển tham
số được. Do đó ta chỉ xét đối với bài toán phương trình đường thẳng có dạng phương
trình tham số.
Hàm th i

ế

t l

ập: PTMPQua1DiemChuaDTGiao2MP(điểm, mặt phẳng 1, mặt phẳng 2)
Mặt phẳng thứ 2 qua 1 điểm đề bài và vuông góc đường thẳng dạng tham số.
Hàm thiết lập: PTMPQua1DiemVuong1DTTS(điểm, phương trình 1, phương trình 2,
phương trình 3).
Chuyển phương tr
ình đư
ờng thẳng dạng giao tuyến của 2 mặt phẳng về dạng tham số.
Hàm thi

ế

t l


ập: PTDTTSGiao2MP(mặt phẳng 1, mặt phẳng 2 ).
Thử lại xem đường thẳng cần tìm có cắt đường thẳng dạng tham số hay không.
Hàm th i

ế

t l

ập: KiemTra2VectorCungPhuong(vector, vector).
• Cách l



p

m ặ

t p hẳ

ng

t h



1
Ta có mặt phẳng cần tìm chứa đường thẳng đề bài suy ra vector chỉ phương của đường
thẳng là vector chỉ phương 1 của mặt phẳng.
Ta lấy 1 điểm thuộc đường thẳng là điểm thuộc 2 mặt phẳng (LayDiemThuoc2MP)
Báo cáo môn lập trình symbolic và ứng dụng Trang 6

Cách 1: Bài toán
2

điểm
và 1 vector chỉ phương.
Cách 2: Từ điểm đề bài và điểm lấy từ đường thẳng, ta tìm được vector chỉ phương 2
của mặt phẳng.
Cách 2a: Bài toán 1 điểm và 2 vector chỉ phương.
Cách 2b: Lấy tích hữu hướng 2 vector chỉ phương ta được vector pháp tuyến của
mặt phẳng.
Đây là bài toán 1 điểm và 1 vector pháp tuyến
• Cách l



p

m ặ

t p hẳ

ng

t h



2
Ta có mặt phẳng vuông góc đường thẳng suy ra vector chỉ phương của đường thẳng là
vector pháp tuyến của mặt phẳng.

Ta có bài toán viết phương tr
ình
m

ặt phẳng qua 1 điểm và có 1vector pháp tuyến.
Như vậy ta có được phương tr
ình
đư

ờng thẳng cần tìm là giao tuyến của 2 mặt
phẳng.
Bây giờ, ta chuyển dạng phương tr
ình trên
v

ề phương tr
ình tham
s

ố.
Bài toán viết phương tr
ì
nh đường thẳng là giao tuyến 2 mặt phẳng.
 Từ mặt phẳng thứ 1 ta có được vector pháp tuyến 1 (LayPhapMP).
 Từ mặt phẳng
thứ

2
ta có được vector pháp tuyến 2 (LayPhapMP).
Lấy tích hữu hướng 2 vector pháp tuyến đó ta có vector chỉ phương của đường

thẳng cần
tìm.
Từ hệ 2 phương tr
ình m
ặt phẳng, ta chọn điểm đặc biệt thuộc đường thẳng thì thỏa hệ 2
phương tr
ình
đó
Gọi
Z

(
x
Z

,
y
Z
,

0
)

thuộc 2 mặt phẳng thì
(
x
Z

,
y

Z
)
thỏa phương trình của 2 mặt phẳng. Giải
hệ tìm được x
Z
và y
Z
. (LayDiemDTGiao2MP).
Báo cáo môn lập trình symbolic và ứng dụng Trang 7
Đây chính là bài toán viết phương trình đường thẳng qua 1 điểm và có 1 vector chỉ
phương.
T h



l ạ

i
Từ phương trình đường thẳng mới tìm được ta lấy được vector chỉ phương (laychiDTTS).
Ta cũng có vector
ch
ỉ phương của đường thẳng dạng tham số.(LayChiDTTS).
Ta kiểm tra xem 2 vector này có cùng phương không? (KiemTra2VectorCungPhuong).
 Nếu không cùng phương thì
nhận
đường thẳng mới tìm.

Ngược lại, kết luận không có đường thẳng cần tìm
4/ Viết thủ tục
> TaoVector := proc(A, B)

return B[1]-A[1], B[2]-A[2], B[3]-A[3]
end proc;
> LayPhapMP := proc(pt)
return Vector([coeff(lhs(pt), x, 1), coeff(lhs(pt), y, 1),
coeff(lhs(pt), z, 1)])
end proc;
> TichHuuHuong := proc(u, v)
return u[2].v[3]-u[3]*v[2], u[3]*v[1]-u[1]*v[3], u[1]*v[2]-
u[2]*v[1]
end proc;
> LayChiDTTS := proc(pt1, pt2, pt3)
return Vector([coeff(rhs(pt1), t, 1), coeff(rhs(pt2), t, 1),
coeff(rhs(pt3), t, 1)])
end proc;
> LayChiDTGiao2MP := proc(pt1, pt2)
return TichHuuHuong(LayPhapMP(pt1), LayPhapMP(pt2))
end proc;
> PTDTTS1Diem1Chi := proc(A, a)
local t;
print(Bai toan viet PTDT qua mot diem va co motVTCP);
lprint(Ta co diem ma duong thang di qua la(A[1], A[2], A[3]));
lprint(VTCP cua duong thang la(a[1], a[2], b[3]));
lprint(PTDT tham so co dang);
print(x = A[1]+a[1]*t);
print(y = A[2]+a[2]*t);
print(z = A[3]+a[3]*t);
print(voi t in R))
Báo cáo môn lập trình symbolic và ứng dụng Trang 8
end proc;
> LayDiemDTGiao2MP := proc (mp1, mp2)

return rhs(subs(z = 0, solve({mp1, mp2}, {x, y})[1])), rhs(subs(z
= 0, solve({mp1, mp2}, {x, y})[2])), 0
end proc;
> LayDiemThuoc2MP := proc(mp1, mp2)
lprint(Chon Z(k, 1, 0)mat phang Ta co);
lprint(subs(y = 1, subs(x = k, subs(z = 0, mp1)))); lprint(subs(x
= k, subs(y = 1, sub(z = 0, mp2))));
lprint(`Suy ra`);
lprint(subs(x = k, subs(z = 0, solve({mp1, mp2}, {x, y})[1])));
lprint(subs(y = 1, subs(z = 0, solve({mp1, mp2}, {x, y})[2])));
lprint(Vay diem mat phang la(rhs(subs(z = 0, solve({mp1, mp2}, {x,
y})[1])), rhs(subs(z = 0, solve({mp1, mp2}, {x, y})[2])), 0));
return rhs(subs(z = 0, solve({mp1, mp2}, {x, y})[1])), rhs(subs(z
= 0, solve({mp1, mp2}, {x, y})[2])), 0);
end proc;
> PTMP1Diem1Phap := proc(A, n)
local ptmp;
print(Bai toan PTMP qua mot diem va co mot VTPT);
lprint(Ta co VTPT cua mat phang la(n[1], n[2], n[3]));
lprint(PTMP co dang);
print(n[1]*x+n[2]*y+n[3]*z+d = 0);
lprint(Ta co diem(A[1], A[2], A[3]));
lprint(Vi diem thuoc mat phang nen d =(-n[1]*A[1]-n[2]*A[2]-
n[3]*A[3]);
lprint(Nen PTMP la);
print(n[1]*x+n[2]*y+n[3]*z-n[1]*A[1]-n[2]*A[2]-n[3]*A[3] = 0);
return n[1]*x+n[2]*y+n[3]*z-n[1]*A[1]-n[2]*A[2]-n[3]*A[3] = 0:
end proc;
> PTMP1Diem2Chi := proc(A, n, m)
print(Baitoan PTMP Diem va co VTCP);

lprint(Ta co VTCP1 la(n[1], n[2], n[3]));
lprint(Ta co VTCP2 la(m[1], m[2], m[3]));
lprint(Suy ra VTPT cua mat phang la(TichHuuHuong(n, m)[1],
TichHuuHuong(n, m)[2], TichHuuHuong(n, m)[3]));
lprint(Bai toan tro thanh);
PTMP1Diem1Phap(A, TichHuuHuong(n, m))
end proc;
> PTMP2Diem1Chi := proc(A, B, a)
print(Bai toan PTMP qua hai Diem va co mot VTCP);
lprint(Ta co diem mot(A[1], A[2], A[3]);
lprint(`diem 2`(B[1], B[1], B[3]));
lprint(Suy ra VTCP2 cua mat phang la(TaoVector(A, B)[1],
TaoVector(A, B)[2], TaoVector(A, B)[3]));
lprint(Ta co VTCP1 cua mat phang la(a[1], [2], [33])); lprint(Bai
toan tro thanh);
PTMP1Diem2Chi(A, a, TaoVector(A, B))
Báo cáo môn lập trình symbolic và ứng dụng Trang 9
end proc;
# Mặt phẳng thứ nhất qua một điểm đề bài và chứa đường thẳng là giao tuyến 2 mặt
phẳng
> PTMPQua1DiemChua1DTGiao2MP := proc(A, mp1, mp2)
print(Bai toan viet PTMP qua mot diem va chua duong thang la giao
tuyen hai mat phang);
lprint(Ta co Phuong trinh duong thang la giao tuyen hai mat
phang);
lprint(mp1);lprint(mp2);
lprint(Vector phap tuyen mat phang thu nhat la(LayPhapMP(mp1)[1],
LayPhapMP(mp1)[2], LayPhapMP(mp1)[3]));
lprint(Vector phap tuyen mat phang thu hai la(LayPhapMP(mp2)[1],
LayPhapMP(mp2)[2], LayPhapMP(mp2)[3]));

lprint(Vector huu huong hai mat phang la(LayChiDTGiao2MP(mp1, mp2)
[1], LayChiDTGiao2MP(mp1, mp2)[2], LayChiDTGiao2MP(mp1, mp2)[3]));
lprint(Suy ra Vector chi Phuong cua duong thang la
(LayChiDTGiao2MP(mp1, mp2)[1], LayChiDTGiao2MP(mp1, mp2)[2],
LayChiDTGiao2MP(mp1, mp2)[3]));
lprint(Suy ra VTCP1 cua mat phang la(LayChiDTGiao2MP(mp1, mp2)[1],
LayChiDTGiao2MP(mp1, mp2)[2], LayChiDTGiao2MP(mp1, mp2)[3]));
LayDiemThuoc2MP(mp1, mp2);
lprint(Taco diem ban dau la(A[1], A[2], A[3]));
lprint(Bai toan tro thanh);
PTMP2Diem1Chi(A, LayDiemThuoc2MP(mp1, mp2), LayChiDTGiao2MP(mp1,
mp2))
end proc;
# Mặt phẳng thứ 2 qua 1 điểm đề bài và vuông góc đường thẳng dạng tham số.
Báo cáo môn lập trình symbolic và ứng dụng Trang 10
> PTMPQua1DiemVuong1DTTS := proc(A, pt1, pt2, pt3)
print(Bai toan viet PTMP qua mot diem va vuong goc mot duong
thang);
lprint(Ta co phuong trinh duong thang la);
lprint(pt1);
lprint(pt2);
lprint(pt3);
lprint(Suy ra VTPT cua duong thang la(LayChiDTTS(pt1, pt2, pt3)
[1], LayChiDTTS(pt1, pt2, pt3)[2], LayChiDTTS(pt1, pt2, pt3)[3]));
lprint(Bai toan tro thanh);
PTMP1Diem1Phap(A, LayChiDTTS(pt1, pt2, pt3))
end proc;
# Chuyển phương trình đường thẳng dạng giao tuyến của 2 mặt phẳng về dạng tham số.
> PTDTTSGiao2MP := proc(mp1, mp2)
local t, a, b, c, m, n, p, X, Y, T;

print(Bai toan viet ptdt la giao cua hai mat phang);
lprint(Ta co phuong trinh hai mat phang la);
lprint(mp1);
lprint(mp2);
a := coeff(lhs(mp1), x, 1);
b := coeff(lhs(mp1), y, 1);
c := coeff(lhs(mp1), z, 1);
m := coeff(lhs(mp2), x, 1);
n := coeff(lhs(mp2), y, 1);
p := coeff(lhs(mp2), z, 1);
X := Vector([a, b, c]);
Y := Vector([m, n, p]);
lprint(Ta co VTPT cua mat phang mot la(a, b, c));
lprint(Ta co VTPT cua mat phang hai la(m, n, p));
lprint(Suy ra vector huu huong la(TichHuuHuong(X, Y)[1],
TichHuuHuong(X, Y)[2], TichHuuHuong(X, Y)[3]));
lprint(Suy ra vector VTCP cua duong thang la(TichHuuHuong(X, Y)
[1], TichHuuHuong(X, Y)[2], TichHuuHuong(X, Y)[3])); lprint(Bai
toan tro thanh);
T := LayDiemThuoc2MP(mp1, mp2);
lprint(Bai toan tro thanh);
PTDTTS1Diem1Chi(T, TichHuuHuong(X, Y))
end proc;
# Thử lại xem đường thẳng cần tìm có cắt đường thẳng dạng tham số hay không?
Báo cáo môn lập trình symbolic và ứng dụng Trang 11
> KiemTra2VectorCungPhuong := proc(u, v)
local T, m, n, p;
print(Bai toan kiem tra hai vector cung phuong);
print(Vector thu nhat la(u[1], u[2], u[3]));
print(Vector thu hai la(v[1], v[2], v[3]));

m := u[1]*v[2]-u[2]*v[1];
n := u[2]*v[3]-u[3]*v[2];
p := u[1]*v[3]-u[3]*v[1];
if m = n and n = p then
lprint(Ta co cac thanh phan cua hai vector bang nhau);
lprint(Suy ra hai vector cung phuong);
return 1
else
lprint(Ta co cac ty le thanh phan cua hai vector khong bang
nhau);
lprint(Suy ra hai vector khong cung phuong)
end if
end proc;
5/ Dữ liệu thử nghiệm
> PTMPQua1DiemChua1DTGiao2MP([30, 15, 6], x+2*y+2*z+30 = 0, x+y+6*z-43 = 0)
> PTMPQua1DiemVuong1DTTS([30, 15, 6], (x=30+2*t, y=15+1*t, z=6 +3*t), (x=30+9*t,
y=15+1*t, z=6 +3*t), (x=30+2*t, y=15+5*t, z=6 +2*t)
> PTDTTSGiao2MP(1*x+2*y+5*z+30 = 0, 3*x+1*y+6*z-43 = 0)
> KiemTra2VectorCungPhuong([2, 4, 3], [2, 4, 3])
CHƯƠNG III.TỔNG KẾT VÀ HƯỚNG PHÁT TRIỂN
Bài viết này sử dụng các hàm có sẳn và một số hàm người viết định nghĩa trong Maple,
cách viết các thủ tục và từ đó có thể xây dựng nhiều chương trình khác phục vụ cho việc
giải những bài toán phổ thông, việc vận dụng giải bài toán là nhằm mục đích giúp chúng
ta có những suy luận trong hướng tiếp cận lập trình symbolic mà sử dụng công cụ lập
trình Maple.
Vấn đề ở đây không phải là đi giải một bài toán, mà là làm thế nào để xây dựng một công
cụ trên máy tính để có hướng tư duy để giải quyết bài toán như thế nào chủ động hơn và
Báo cáo môn lập trình symbolic và ứng dụng Trang 12
phát huy tối ta khả năng của công cụ để từ đó nâng lên một tầm cao hơn trong thời đại
cộng nghệ mới ngày nay.

TÀI LIỆU THAM KHẢO
[1] PGS.TS Đỗ Văn Nhơn, Bài giảng lập trình symbolic, ĐHCNTT, 2012.
[2]. J J O’Connor and A P Naughton, Symbolic computation, 2009.
Báo cáo môn lập trình symbolic và ứng dụng Trang 13

×