Tìm hình chiếu của 1 đường thẳng

Một phần của tài liệu Tiểu luận LẬP TRÌNH SYMBOLIC VÀ ỨNG DỤNG (Trang 26)

Lệnh gõ Kết quả Ghi chú > Cho điểm M có tọa độ x,y,z > Cho phương trình mặt phẳng P

> Cho tạo độ vecto

đơn vị v

> > >

> Kết quả hình chiếu là x,y,z.

CHƢƠNG 3: LẬP TRÌNH MỘT SỐ ỨNG DỤNG TRONG MAPLE

Chƣơng trình xây dựng trên thƣ viện hỗ trợ tính toán Maple 16. 1.5 Giải và biện luận hệ phương trình bậc nhất hai ẩn số:

1.5.1 Đặt vấn đề bài toán

Giải phương trình bậc nhất hai ẩn có dạng như sau:

{

1.5.2 Biểu diễn bài toán

Đặt:

+ Nếu : Hệ phương trình có nghiệm duy nhất (x,y):

+ Nếu :

* hoặc : Hệ vô nghiệm

*Dx=Dy=0: Hệ có vô số nghiệm, tập nghiệm của hệ, tập nghiệm của hệ là tập nghiệm của phương trình ax+by=c.

1.5.3 Thuật toán

Input: Hệ phương trình bậc nhất hai ẩn Output: Nghiệm (x,y) của phương trình

Bước 1: Nhập hệ phương trình bậc nhất hai ẩn Bước 2: tính D, Dx, Dy

1.6 Giải bài toán hình học vectơ trong mặt phẳng hình học không gian:

1.6.1 Đặt vấn đề bài toán

Xây dựng các tính toán cho bài toán vectơ 3 chiều trong không gian

1.6.2 Biểu diễn bài toán

+ Vectơ 3 chiều trong không gian có dạng: + Các tính chất:

+ Mặt phẳng trong không gian:

1.6.3 Thuật toán

Input: Nhập giả thiết các Vectơ cho trước

Output: Các tính chất của vector đã mô tả trong mục Biểu diễn bài toán

1.6.4 Cài đặt thuật toán

> HieuVector := proc(A,B)#Hiệu 2 vector return [B[1]-A[1],B[2]-A[2],B[3]-A[3]]; end proc:

ModuleVector := proc(vector)#Chiều dài vectơ

return sqrt(vector[1] ^2+vector[2]^2+vector[3]^2); end proc:

TongVector := proc(A,B)#Tổng 2 vectơ

return [A[1]+B[1],A[2]+B[2],A[3]+B[3]]; end proc:

TichVoHuong := proc(A,B)#Tích vô hướng 2 vectơ

return A[1].B[1]+ A[2].B[2] + A[3].B[3]; end proc:

TichHuuHuong := proc(A,B)#Tích có hướng 2 vectơ

return [ A[2].B[3] - A[3].B[2], A[3].B[1]-A[1].B[3], A[1].B[2] - A[2].B[1] ]; end proc:

CosGoc := proc(A,B)#Cos của góc tạo bởi 2 vectơ

return TichVoHuong(A,B)/(ModuleVector(A)*ModuleVector(B)); end proc:

SinGoc := proc(A,B)//Sin của góc tạo bởi 2 vectơ

return ModuleVector(TichHuuHuong(A,B))/(ModuleVector(A)*ModuleVector(B)); end proc:

KiemTra2VectorCungPhuong := proc(A,B)

if(B[1]=0 and B[2] = 0 and B[3] =0) then return 1

elif (B[1]=0 or B[2]=0 or B[3] = 0) then return 0

elif (A[1]/B[1] = A[2]/B[2]) and (A[1]/B[1] = A[3]/B[3]) then return 1 else return 0 end if; end proc: KiemTra3VectorDongPhang := proc(A,B,C) if TichVoHuong(A, TichHuuHuong(B,C)) = 0 then return 1 else return 0 end if; end proc: KiemTra3DiemThangHang := proc(A,B,C)

return KiemTra2VectorCungPhuong( HieuVector(A,B),HieuVector(A,C)); end proc:

DiemTheoTiVector := proc(A,B,k)

if k=1 then return [0,0,0] else

return [(A[1] -k*B[1])/(1-k),(A[2] -k*B[2])/(1-k),(A[3] -k*[3])/(1-k) ] end if; end proc: TrungDiemC1 := proc(A,B) return DiemTheoTiVector(A,B,-1); end proc: TrungDiemC2 := proc(A,B)

return [(A[1] +B[1])/2,(A[2] +B[2])/2,(A[3] +B[3])/2 ]; end proc:

TrongTamTamGiac := proc(A,B,C)

return [(A[1] +B[1] +C[1])/3,(A[2] +B[2] +C[3])/2,(A[3] +B[3]+C[3])/3 ]; end proc: TrucTamTamGiac := proc(A,B,C) local H,pt1,pt2,pt3,vectAH,vectBC,vectBH,vectAC,vectABC,hpt; H:= [x,y,z]; vectAH:= HieuVector(A,H); vectBC:= HieuVector(B,C); vectBH:= HieuVector(B,H); vectAC:= HieuVector(A,C); vectABC:= TichHuuHuong(vectBC,vectAC); pt1:=TichVoHuong(vectAH,vectBC) = 0; pt2:= TichVoHuong(vectBH,vectAC) = 0; pt3:= TichVoHuong(vectAH, vectABC) = 0; hpt:={pt1,pt2,pt3}; return solve(hpt,{x,y,z}); end proc:

vectAB:= HieuVector(A,B); vectAC:= HieuVector(A,C); AB:= ModuleVector(vectAB); AC:= ModuleVector(vectAC); k:= -AB/AC; DiemTheoTiVector(B,C,k); end proc:

TamNoiTamGiac := proc(A,B,C)#Tâm đường tròn nội tiếp tam giác

local chanA,chanB;

chanA := ChanDuongPhanGiac(A,B,C); return ChanDuongPhanGiac(B, chanA,A); end proc: DienTich := proc(A,B,C) local vectAB,vectAC,vectHH; vectAB:= HieuVector(A,B); vectAC:= HieuVector(A,C); vectHH:= TichHuuHuong(vectAB,vectAC); return ModuleVector(vectHH)/2; end proc:

LayPhapMP := proc(P) #ex: P:= 2*x+y+z-8 = 0;

return [coeff(lhs(P),x),coeff(lhs(P),y), coeff(lhs(P),z)]; end proc:

PTMP1Diem1Phap := proc(A,n)#A la diem, n la vector phap tuyen

return n[1].(x-A[1]) + n[2].(y-A[2]) +n[3].(z-A[3]) = 0; end proc:

PTMP3Diem := proc(A,B,C)#Phương trình mặt phẳng tạo bởi 3 điểm

local vectAB,vectAC,n; vectAB := HieuVector(A,B); vectAC:= HieuVector(A,C); n:= TichHuuHuong(vectAB,vectAC); return PTMP1Diem1Phap(A,n); end proc:

PTMP2Diem1Chi := proc(A,B,a)#Hai diem A,B va n la vector chi phuong

local vectAB,n;

vectAB:= HieuVector(A,B); n:=TichHuuHuong(vectAB,a); return PTMP1Diem1Phap(A,n); end proc:

PTMP1Diem2Chi := proc(A,a,b)#Diem A va 2 vector chi phuong a,b

local n;

n:=TichHuuHuong(a,b);

return PTMP1Diem1Phap(A,n); end proc:

PTDTTS1Diem1Chi := proc (A, a) #1 diem va 1 vector chỉ phương a

return [x = A[1]+a[1]*h, y = A[2]+a[2]*h, z = A[3]+a[3]*h] end proc:

PTDTTS2Diem := proc(A,B)#2diem

local a;

a:= HieuVector(A,B);

end proc:

1.6.5 Chạy thử nghiệm

Kết quả:

KẾT LUẬN

Bài thu hoạch đã trình bày những kiến thức cơ bản để sử dụng các thư viện có sẵn của Mapple, đồng thời hướng dẫn một số công cụ cơ bản cho việc lập trình trong Mapple cũng như cách viết các thủ tục, cách gọi thực thi các thủ tục. Từ nền tảng này có thể xây dựng nên nhiều chương trình khác phục vụ cho công việc học tập, nghiên cứu khoa học và ứng dụng trong thực tiễn.

TÀI LIỆU THAM KHẢO

1. Tài liệu giảng dạy môn học Lập trình Symbolic cho Trí tuệ nhân tạo của thầy PGS. TS Đỗ Văn Nhơn – Đại học Công nghệ thông tin – Đại học Quốc gia TP.HCM.

2. Trang chủ Maple: http://mapplesoft.com 3. Tại mục Help của chương trình Mapple v.16.

4. Bài báo “Một số ứng dụng của Mapple vào các bài toán khảo sát hàm số và tích phân” trong dạy học toán ở Trung học phổ thông và cao đẳng sư phạm của Th.S Hồ Xuân Thắng.

Một phần của tài liệu Tiểu luận LẬP TRÌNH SYMBOLIC VÀ ỨNG DỤNG (Trang 26)

Tải bản đầy đủ (PDF)

(38 trang)