Chủ Nhật, 16 tháng 2, 2014

Đường sinh thẳng của mặt hyperboloit 1 tầng

Lưu ý: Để đọc, hiểu và sử dụng được code các bạn phải biết tối thiểu các điều sau đây:
  1. Biết cài đặt một chương trình đại số máy tính lên MS Windows và biết set đường dẫn để LaTeX có thể gọi được ĐS máy tính. Trong Ubuntu Linux việc này thực hiện dễ dàng.
  2. Biết lập trình để thực hiện việc tính toán với XCAS, một ngôn ngữ giống Maple tới 99%

 \documentclass[10pt]{article}  
 \usepackage[utf8]{inputenc}  
 \usepackage[vietnam]{babel}  
 \usepackage{utopia}  
 \usepackage[utopia]{mathdesign}  
 \usepackage{amsmath}  
 \usepackage{moreverb}  
 \usepackage{graphicx}  
 \usepackage[paperwidth=14.5cm, paperheight=20.5cm, left=1.75cm,right=2.5cm,top=2.5cm,bottom=2.5cm]{geometry}  
 \newcommand{\executGiac}[1]{  
 \immediate\write18{giac <#1 } }  
 \begin{document}  
  \thispagestyle{empty}  
 \begin{verbatimwrite}{testquadric.in}  
 maple_mode(0);  
 Sortie:=fopen("testquadric.out.tex");  
 zz:=x^2/25+y^2/16-z^2/25-1;   
 Resultat:=cat("Cho mặt bậc hai có phương trình:","$$",latex(ans()),"=0$$");  
 x0:=5;  
 Resultat:=cat(Resultat,"Tọa độ điểm $M$ nằm trên mặt là"," $$x_0=",latex(ans()),"$$");  
 y0:=4;  
 Resultat:=cat(Resultat,""," $$y_0=",latex(ans()),"$$");  
 z0:=5;  
 Resultat:=cat(Resultat,""," $$z_0=",latex(ans()),"$$");  
 a:=sqrt(abs(2/diff(diff(zz,x),x)));  
 Resultat:=cat(Resultat,"Các hệ số của phương trình mặt hyperboloit 1 tầng là:"," $$a=",latex(ans()),"$$");  
 b:=sqrt(abs(2/diff(diff(zz,y),y)));  
 Resultat:=cat(Resultat,""," $$b=",latex(ans()),"$$");  
 c:=sqrt(abs(2/diff(diff(zz,z),z)));  
 Resultat:=cat(Resultat,""," $$c=",latex(ans()),"$$");  
 (x/a+z/c)*(x/a-z/c)-(1+y/b)*(1-y/b);  
 Resultat:=cat(Resultat,"Phương trình đường bậc hai có thể được viết:"," $$",latex(ans()),"=0$$");  
 pt1:=p*(x/a+z/c)-q*(1+y/b)=0;  
 Resultat:=cat(Resultat,"PT đường sinh thẳng thứ nhất:"," $$",latex(ans()),"$$");  
 pt2:=q*(x/a-z/c)-p*(1-y/b)=0;  
 Resultat:=cat(Resultat,""," $$",latex(ans()),"$$");  
 pt11:=subs(pt1,x=x0);  
 pt12:=subs(pt11,y=y0);  
 pt13:=simplify(subs(pt12,z=z0));  
 Resultat:=cat(Resultat,"Thay tọa độ diểm $A$ vào hệ phương trình ta được:"," $$",latex(ans()),"$$");  
 pt21:=subs(pt2,x=x0);  
 pt22:=subs(pt21,y=y0);  
 pt23:=simplify(subs(pt22,z=z0));  
 Resultat:=cat(Resultat,""," $$",latex(ans()),"$$");  
 pt14:=subs(pt13,p=x);  
 pt15:=subs(pt14,q=y);  
 l1:=diff(lhs(pt15),x);  
 l2:=diff(lhs(pt15),y);  
 pt24:=subs(pt23,p=x);  
 pt25:=subs(pt24,q=y);  
 L1:=diff(lhs(pt25),x);  
 L2:=diff(lhs(pt25),y);VTCP  
 [l1+L1,l2+L2];  
 Resultat:=cat(Resultat,"test"," $$",latex(ans()),"$$");  
 q:=simplify(reverse_rsolve([l1+L1,l2+L2])[1]);  
 Resultat:=cat(Resultat,"Chọn $q$"," $$q=",latex(ans()),"$$");  
 p:=simplify(reverse_rsolve([l1+L1,l2+L2])[0]);  
 Resultat:=cat(Resultat,"Suy ra $p$"," $$p=",latex(ans()),"$$");  
 dst1:=collect(getNum(simplify(p*(x/a+y/b)-q*(1+z/c))))=0;  
 Resultat:=cat(Resultat,"PT đường sinh thẳng thứ nhất:","$$",latex(ans()),"$$");  
 dst2:=collect(getNum(simplify(q*(x/a-y/b)-p*(1-z/c))))=0;  
 Resultat:=cat(Resultat,""," $$",latex(ans()),"$$");  
 vt1:=[diff(lhs(dst1),x),diff(lhs(dst1),y),diff(lhs(dst1),z)];  
 vt2:=[diff(lhs(dst2),x),diff(lhs(dst2),y),diff(lhs(dst2),z)];  
 vt:=simplify(cross(vt1,vt2));  
 ucln:=gcd(vt[0],vt[1],vt[2]);  
 vt/ucln;  
 Resultat:=cat(Resultat,"Vectơ chỉ phương: "," $$",latex(ans()),"$$");  
 pt3:=P*(x/a+z/c)-Q*(1-y/b)=0;  
 Resultat:=cat(Resultat,"PT đường sinh thẳng thứ hai:"," $$",latex(ans()),"$$");  
 pt4:=Q*(x/a-z/c)-P*(1+y/b)=0;  
 Resultat:=cat(Resultat,""," $$",latex(ans()),"$$");  
 pt31:=subs(pt3,x=x0);  
 pt32:=subs(pt31,y=y0);  
 pt33:=simplify(subs(pt32,z=z0));  
 Resultat:=cat(Resultat,"Thay tọa độ diểm $A$ vào hệ phương trình ta được:"," $$",latex(ans()),"$$");  
 pt41:=subs(pt4,x=x0);  
 pt42:=subs(pt41,y=y0);  
 pt43:=simplify(subs(pt42,z=z0));  
 Resultat:=cat(Resultat,""," $$",latex(ans()),"$$");  
 pt34:=subs(pt33,P=x);  
 pt35:=subs(pt34,Qq=y);  
 m1:=diff(lhs(pt35),x);  
 m2:=diff(lhs(pt35),y);  
 pt44:=subs(pt43,P=x);  
 pt45:=subs(pt44,Q=y);  
 M1:=diff(lhs(pt45),x);  
 M2:=diff(lhs(pt45),y);  
 [m1+M1,m2+M2];  
 Resultat:=cat(Resultat,"test"," $$",latex(ans()),"$$");  
 %Q:=simplify(reverse_rsolve([m1+M1,m2+M2])[1]);  
 %Resultat:=cat(Resultat,"Chọn $Q$"," $$P=",latex(ans()),"$$");  
 %P:=simplify(reverse_rsolve([m1+M1,m2+M2])[0]);  
 P:=0;  
 %Resultat:=cat(Resultat,"Suy ra $P$"," $$P=",latex(ans()),"$$");  
 Q:=1;  
 dst3:=collect(getNum(simplify(P*(x/a+y/b)-Q*(1-z/c))))=0;  
 Resultat:=cat(Resultat,"PT đường sinh thẳng thứ hai:","$$",latex(ans()),"$$");  
 dst4:=collect(getNum(simplify(Q*(x/a-y/b)-P*(1+z/c))))=0;  
 Resultat:=cat(Resultat,""," $$",latex(ans()),"$$");  
 vt3:=[diff(lhs(dst3),x),diff(lhs(dst3),y),diff(lhs(dst3),z)];  
 vt4:=[diff(lhs(dst4),x),diff(lhs(dst4),y),diff(lhs(dst4),z)];  
 VT:=simplify(cross(vt3,vt4));  
 UCLN:=gcd(VT[0],VT[1],VT[2]);  
 VT/UCLN;  
 Resultat:=cat(Resultat,"Vectơ chỉ phương:"," $$",latex(ans()),"$$");  
 fprint(Sortie,Unquoted,Resultat);  
 fclose(Sortie);  
 \end{verbatimwrite}  
 \executGiac{testquadric.in}  
 \input{testquadric.out}  
 \end{document}  

Biên dịch bằng pdflatex xong ta có kết quả là một file PDF như dưới đây. Lưu ý, đây là file nguồn, bằng cách thay đổi phương trình của mặt bậc hai (ở đây chỉ xét mặt hyperboloit 1 tầng, mặt yên ngựa chúng tôi sẽ viết sau) và toa độ của một điểm trên mặt bậc hai đó, các bạn sẽ có một lời giải mới. Mọi việc diễn ra không quá ... 30 giây.

Không có nhận xét nào:

Đăng nhận xét