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
Trang 1ĐẠ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
Trang 2CHƯƠNG I.GIỚI THIỆU 1
CHƯƠNG II.MÔ TẢ, PHÂN TÍCH VÀ VIẾT THỦ TỤC BÀI TOÁN 2
1/ Bài toán 2
2/ Cơ sở lý thuyết và phương hướng giải quyết 4
3/ Phân tích bài toán 5
4/ Viết thủ tục 8
5/ Dữ liệu thử nghiệm 13
CHƯƠNG III.TỔNG KẾT VÀ HƯỚNG PHÁT TRIỂN 13
TÀI LIỆU THAM KHẢO 14
CHƯƠNG I. GIỚI THIỆU
Trang 3Ngà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 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
Trang 4Yê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:
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à n⃗=(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 a⃗ = (a1, a2, a3) thì
Phương trình tham số là {x=x0+a1t
y= y0+a2t z=z0+a3t
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à x−x 0 a 1 = y− y 0 a2 = z−z 0 a 3
Phương trình đường thẳng là giao của 2 mặt phẳng
Trang 5d ={Phươngtrình mặt phẳng thứ 1 Phươngtrình mặt phẳng thứ 2
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(a1, a2, a3) và B(b1, b2, b3) thì ⃗AB= (b1 – a1, b2 – a2, b3 – a3)
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⃗=( a1, a2, a3), b⃗=( b1, b2, b3) và c⃗=( c1, c2, c3) thì ⌈⃗
a , ⃗b ⌉= (a2b3−a3b2, a3−a1b3, a1b2−a2b1,)
Hai vector cùng phương: khi tỷ lệ thành phần bằng nhau
Cho a⃗=( a1, a2, a3) và b⃗=( b1, b2, b3) ⃗a , b⃗ được gọi là cùng phương nếu và chỉ nếu a b1
1 = a b2
2
=a b3
3 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:
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.
Trang 6Từ 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
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
Trang 7Đâ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)
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
Trang 8Đâ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 xZ , yZ , 0 thuộc 2 mặt phẳng thì xZ , yZ thỏa phương trình của 2 mặt phẳng Giải hệ tìm được xZ và yZ (LayDiemDTGiao2MP).
Đâ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).
Trang 9 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))
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,
Trang 10return 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))
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],
Trang 11LayPhapMP(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ố
> 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);
Trang 12X := 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?
> 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])
Trang 13CHƯƠ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à 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.