Академический Документы
Профессиональный Документы
Культура Документы
com
Vị trí và vai trò của máy tính ngày càng trở nên quan trọng, nhất là trong lĩnh vực giáo dục và
nghiên cứu. Tuy nhiên dù quan trọng đến đâu nữa máy tính không thể thay thế được Thầy Cô
giáo nó chỉ là công cụ nhầm nâng cao chất lượng dạy và học. Ngày càng có nhiều chương trình
được viết ra nhằm phục vụ nhu cầu dạy và học, trong đó có một chương trình tính toán hình
thức(tính toán biểu thức đại số...) mà chúng tôi sẽ giới thiệu đến quý Thầy Cô đó là chương trình
tính toán Maple của trường đại học Waterloo (Canada), ra đời vào năm 1980. Cho đến nay trải
qua quá trình phát triễn Maple có phiên bản thứ 11 của mình.
Bài mở đầu:
Khi ta chạy chương trình bằng cách click chuột vào biểu tượng có hình lá Maple thì giao diện
hiện lên mục làm việc chọn và tạo trang mới (worksheet).
Trước hết, các bạn hãy mở một trang (worksheet) mới bằng cách chọn File | New. Các bạn sẽ
thấy một trang trắng với dấu [> ở đầu trang:
[>
Từ nay về sau ta sẽ gọi dấu trên là prompt. Sau dấu prompt, các bạn có thể bắt đầu gõ các phép
tính và yêu cầu Maple thực hiện chúng. Nhớ kết thúc mỗi dòng lệnh bằng dấu chấm phẩy hay
dấu hai chấm và sau đó gõ Enter. Trong trang trắng vừa mở bạn hãy thử :
[> 247*3756;
[> 210+375;
Điều gì sẽ xẩy ra nếu bạn dùng dấu hai chấm thay vì dùng dấu chấm phẩy ?
[> 247*3756:
Maple vẫn thực hiện phép tính trên nhưng không hiển thị kết quả.
Thế nếu chúng ta quên không gõ dấu chấm phẩy hay hai chấm thì sao ?
[> 247*3756
[>
[>
Warning, premature end of input
Các bạn thấy đấy, Maple chừa chỗ và nhắc để các bạn gõ thêm dấu chấm phẩy. Hãy gõ thêm dấu
chấm phẩy vào dòng trống rồi gõ Enter, các bạn sẽ thấy như sau:
[> 247*3756
[> ;
-1-
http://dayvahoc.net email: sptrung2810@yahoo.com
b) Phép tính trừ: (-)
Ví dụ : 250 - 156 cho kết quả là:
[> 250-156;
Từ đây ta có thể tính các biểu thức phức tập ví dụ như [(25623-76222 x 490)/257]^3
Nếu ta viết như trên [> [(25623-76222 x 490)/257]^3; thì sẽ xuất hiện hai lỗi đó là: phép nhân
dùng(*) không phải là (x) và dấu [] không thay thế cho phép ngoặc nó có ý nghĩa khác. Như vậy
phải viết lại là:
[>((25623-76222 x 490)/257)^3;
Cú pháp có dạng sau:+ Hàm_ số:= (Biến_số1,..) -> biểu thức của biến số ;
hoặc dạng khác + Hàm_số := unapply(biểu_thức, biến_số);
Định nghĩa hàm khác với phép gán vì nó cho kết qua trực tiếp khi biến bằng giá trị nào đó còn
biểu thức không cho ngay kết quả.
Ví dụ:
Biểu thức thì khi x= -1 ta thấy rỏ điều này:
[> g:=2*x^2+3*x+1;
[> g(-1);
-2-
http://dayvahoc.net email: sptrung2810@yahoo.com
[> g;
[> f(a);
Phần trước như chúng ta đã biết đó là các phép tính, phép gán biểu thức và phép gán hàm, chúng
ta sẽ tiếp tục phần này với một số thủ tục sau:
442
sin(x) - cos(x) = 1 - 2 cos(x)
3223
y+3yz+3yz+z
[> expand((x+2)*(y+z),(x+2));
(x + 2) y + (x + 2) z
(a + 1) (2 a + 1)
[> factor(2*a^2+3*a+1,sqrt(2));
(a + 1) (2 a + 1)
-4-
http://dayvahoc.net email: sptrung2810@yahoo.com
Ví dụ:Tìm hệ số của y trong đa thức sau:
[> 105*y*z+160*y*a+10*y^2+8*y^3;
[> coeff(105*y*z+160*y*a+10*y^2+8*y^3,y,2);
10
33
(a - 1) y + a + a
[> collect(a^3*y-y+a^3+a,a);
3
(y + 1) a + a - y
[> poly:=x*y+z*x*y+y*x^2-z*y*x^2+x+z*x:
[> collect(poly,[x,y]);
[> collect(poly,[x,y],distributed);
2
(1 - z) y x + ((1 + z) y + 1 + z) x
2
(1 + z) x + (1 + z) x y + (1 - z) y x
Chú ý :Trong lệnh này tham số là đối tương cơ bản không chứa các phép toán.
Ví dụ:
[> collect(poly,x*y);
Error, (in collect) cannot collect x*y
-5-
http://dayvahoc.net email: sptrung2810@yahoo.com
[> simplify(1/(a*(a-b)*(a-c))+1/(b*(b-a)*(b-c))+1/(c*(c-a)*(c-b)));
1
------
cab
[> normal((y^8+3*y^4+4)/(y^4+y^2+2));
42
y-y+2
[> unassign('x');
[> rem(x^3+x+1,x^2+x+1,x,'th');
2+x
[> th;
x-1
[> quo(x^3+x+1,x^2+x+1,x);
x–1
3. Giới hạn, đạo hàm, tích phân, giải phương trình, hệ phương trình
-6-
http://dayvahoc.net email: sptrung2810@yahoo.com
1) 2)
3) 4)
[>Limit((sin(2*x)^2-sin(x)*sin(4*x))/x^4,x=0)=limit((sin(2*x)^2-sin(x)*
sin(4*x))/x^4,x=0);
[> Limit((2*x+3)/(7*x+5),x=infinity)=limit((2*x+3)/(7*x+5),x=infinity);
[> Limit(abs(x-4)/(x-4),x=4,right)=limit(abs(x-4)/(x-4),x=4,right);
[> Limit(abs(x-4)/(x-4),x=4,left)=limit(abs(x-4)/(x-4),x=4,left);
-7-
http://dayvahoc.net email: sptrung2810@yahoo.com
[> diff ( Biểu_thức (x,y,..), x );
[> f := y = x^2/z;
[> implicitdiff(f,y,x);
[> implicitdiff(f,y,z);
[> f := x^2+y^3=1;
[> implicitdiff(f,y,x);
-8-
http://dayvahoc.net email: sptrung2810@yahoo.com
c) Phép tính tích phân:
Các phép biến đổi tích phân:(nằm trong Pacgket Student dùng lệnh [> with(student);)
* Phương pháp đổi biến: [> changevar( equation, integ <<, var>>);
Trong đó: equation: là liên hệ giữa biến củ và biến mới( h(x) = g(x) ).
integ: là tích phân ban đầu chưa đổi biến.
var: là biến tích phân mới.
Ví dụ:
[> with(student):
changevar(cos(x)+1=u, Int((cos(x)+1)^3*sin(x), x), u);
Cú pháp:[> intparts ( integ, expr); trong đó expr chính là biểu thức của u.
Ví dụ:
[> with(student):
intparts(Int(x^k*ln(x), x), ln(x));
-9-
http://dayvahoc.net email: sptrung2810@yahoo.com
[> solve(x^3+3*x^2-3*x-1=0,x);
Trong đó : inequation: là bất phương trình cần giải f(x) < g(x)..(<, >, <=, >= )
var : là biến của bất phương trình.
Ví dụ:
Trong đó : equations: là hệ phương trình cần giải f(x,y) = g(x,y), k(x,y) = l(x,y) ....
vars : là các biến của hệ phương trình.
Ví dụ:
[> solve({x+2*y=3, y+1/x=1}, [x,y]);
- 10 -
http://dayvahoc.net email: sptrung2810@yahoo.com
Mở đầu:
Chúng ta vẽ đồ thị hai chiều bằng lệnh plot. ví dụ ta vẽ đồ thị hàm số
bằng lệnh dưới đây:
[>plot(x^3-3*x^2+5*x-7,x=-0.5..3);
Ta cũng có thể vẽ đồ thị ba chiều bằng cách dùng plot3d. Nhưng chúng ta chú ý rằng hàm số cần
vẽ không phải là hàm theo một biến mà là hàm hai biến. Ta có thể viết ví dụ sau đây:
[>plot3d(exp(-(x^2+y^2))*sin(x*y),x=-3..3,y=-3..3);
Cú pháp:
plot -tạo một đồ thi không gian 2 chiều:
[> plot(f,x);
[> plot(f,x=x0..x1);
- 11 -
http://dayvahoc.net email: sptrung2810@yahoo.com
x0..x1 là khoảng giá trị biến x vẽ đồ thị
plot3d - tạo một đồ thi không gian 3 chiều:
Cú pháp:
[>plot3d(expr, x=a..b, y=c..d);
[>plot3d(f, a..b, c..d);
[>plot3d([exprf, exprg, exprh], s=a..b, t=c..d);
[>plot3d([f, g, h], a..b, c..d);
Tham số:
expr - biểu thức chứa x và y
f,g,h - thủ tục hoặc toán tử
exprf,exprg,exprh - biểu thức chứa hai tham số s,t.
a,b - hằng số thực, thủ tục, hoặc biểu thức chứa y
c,d - hằng số thực, thủ tục, hoặc biểu thức chứa x
x,y,s,t - tên các tham số.
- 12 -
http://dayvahoc.net email: sptrung2810@yahoo.com
ví dụ
[>plot(sin (x)+ln(x),x=-6..6,adaptive=false);
axes=f:trục
Có các loại trục như là: boxed, frame, none, hoặc normal
ví dụ :
[>plot(sin(ln(x)),x=3..9,axes=boxed);
- 13 -
http://dayvahoc.net email: sptrung2810@yahoo.com
[>plot(ln(x^2),x=3..9,axes=frame);
[>plot(sin(ln(x)),x=3..9,axes=none);
[>plot(ln(x^2),x=3..9,axes=normal);
- 14 -
http://dayvahoc.net email: sptrung2810@yahoo.com
- 15 -
http://dayvahoc.net email: sptrung2810@yahoo.com
[>plot(sin(x),x=0..Pi,filled=true);
- 16 -
http://dayvahoc.net email: sptrung2810@yahoo.com
[>plot(sin(x),x=0..6.5,filled=true);
font=I
Lựa chọn này xác định font cho test trong đồ thị.I là tập hợp [family,style,size].
Family là một trong những lựa chọn sau: Times, Courier, Helvetica, hoặc Sympol
- 17 -
http://dayvahoc.net email: sptrung2810@yahoo.com
Đối với family= Times, style có thể là ROMANCE, BOLD, ITALIC, hoặc BOLDITALIC
Đối với family= Courier và Helvetica, style có thể là BOLD, OBLIQUE, hoặc BOLDOBLIQUE.
Đối với family= Sympol không chấp nhận bất cứ loại style nao.
Cuối cùng size thì tùy vào mục đích mong muốn
- 18 -
http://dayvahoc.net email: sptrung2810@yahoo.com
Kết quả ta thấy có _C1 chính là hằng số phụ thuộc vào điều kiện ban đầu. Nếu ta chọn điều kiện
ban đầu là t = 0, N(0) = 0, đó chính là điều kiện ban đầu.
[> kq:=dsolve({E1,N(0)=No},N(t));
Như vậy ta được nghiệm của phương trình vi phân với điều kiện ban đầu. Nếu chọn No = 5 và ,
lambda = 3. ta vẽ đồ thị kết quả trên như sau:
[> No := 5;lambda:=3;plot(rhs(kq),t=0..3);
Với điều kiện ban đầu y(0) = yo, v(0) = vo. Ta giải phương trình trên kết hợp với điều kiện ta
được.
[> S2:=dsolve({E2,y(0)=y[0],D(y)(0)=v[0]},y(t));
- 19 -
http://dayvahoc.net email: sptrung2810@yahoo.com
Vậy nếu yo = 10m, g = 10 m/s^2, vo = 2 m/s. Thì thay vào phương trình trên ta thử vẽ đồ thị
y(t).
[> y[0]:=10:g:=10:v[0]:=2:plot(rhs(S2),t=0..1.7);
Ta xét phương trình vi phân bậc 2 của dạng dao động điều hòa:
[> restart;E3:=diff(y(t),t$2)=-omega^2*y(t);
- 20 -
http://dayvahoc.net email: sptrung2810@yahoo.com
Chúng ta vẽ nghiệm s:
[> plot(y(t),t=0..5);
[> y(t);
Ta xét điều kiện đối với bài toán dao động có lực cản tỷ lệ với bậc nhất vận tốc:
[> restart:with(DEtools):
[> Eq:=diff(y(t),t$2) + diff(y(t),t)/tau + omega^2*y(t)=0;
[> Y:=dsolve({Eq,y(0)=1,D(y)(0)=0},y(t));
- 21 -
http://dayvahoc.net email: sptrung2810@yahoo.com
[> plot(rhs(Y),t=0..6);
[> restart:with(DEtools):
[> Eq1:=diff(v(t),t)=-omega^2*x(t);Eq2:=diff(x(t),t)=v(t);
[> dsolve({Eq1,Eq2,x(0)=x[0],v(0)=v[0]},{x(t),v(t)});
- 22 -
http://dayvahoc.net email: sptrung2810@yahoo.com
Trong các phần trước chúng ta đã có dịp tìm hiểu về các cấu trúc lệnh cơ bản của Maple. Trong
phần này, tôi xin giới thiệu với các bạn một số ứng dụng của chương trình Maple vào giải quyết
một số bài toán cơ bản trong vật lý.
Bài toán dao động tắt dần, dao động cưỡng bức và hiện tượng cộng hưởng:
- 23 -
http://dayvahoc.net email: sptrung2810@yahoo.com
> plot(rhs(%),t=0..20);
> dsolve(eqn,psi(t));
Ta thấy có hai thành phần: Thành phần (1) là nghiệm chính tắc của phương trình vi phần trên,
thành phần (2) là nghiệm riêng. Như vậy thành phần (1) có dạng tắt dần rất nhanh, thành phần
(2) chính là dao động dạng hình sin. Ta thử làm với omega= 2, Q=10;omega1 = 5.
> omega:= 2: Q:=10:omega1 := 5:Fo:=2:
> inc:=psi(0)=0,D(psi)(0)=0:
> dsolve({eqn,inc},psi(t));
- 24 -
http://dayvahoc.net email: sptrung2810@yahoo.com
> plot(rhs(%),t=0..20);
Từ đồ thị cho ta thấy có thành phần dao động kết hợp (phách) giữa dao động riêng của hệ với
dao động của bên ngoài, sau đó một khoảng thời gian rất ngắn hệ dao động với tần số bằng tần
số của lực cưỡng bức.
III. Hiện tượng cộng hưởng:
Dùng phương trình vi phân trên với dạng tiếp cận khác như sau: Giả sử nghiệm riêng có
> eqn:=diff(psi(t),t$2)+omega1/Q*diff(psi(t),t)+omega1^2*psi(t)=Fo*exp(I*omega*t);
> solve(eqn,A);
> biendo:=Re(abs(%));
> Fo:=2:omega1:=5:
> plot([seq(subs(Q=p,biendo),p=[5,10,15,1000])],omega=0..10,0..0.8,
color=[yellow,green,blue,red],legend=["Q=5","Q=10","Q=15","Khong co can"]);
- 25 -
http://dayvahoc.net email: sptrung2810@yahoo.com
>
Từ đồ thị ta rút ra kết luận khi tần số của lực cưỡng bức bằng tần số dao động riêng của hệ thì
biên độ dao động đạt giá trị cực đại, hiện tượng đó chính là hiện tượng cộng
> dsol(1);
- 26 -
http://dayvahoc.net email: sptrung2810@yahoo.com
> with(plots):
> odeplot(dsol,view=[-5..5,0..3],color=blue);
Lệnh thứ 2:
Cú pháp:
DEtools[DEplot](deqns, vars, trange, inits, xrange,yrange,option);
Tham số:
dequns: phương trình vi phân, hệ phương trình vi phân bậc nhất.
vars: các biến phụ thuộc cần vẽ.
trange: miền thay đổi biến độc lập.
inits: các điều kiện
xrange: miền thay đổi của biến phụ thuộc thứ nhất.
yrange: miền thay đổi của biến phụ thuộc thứ hai.
>DEtools[DEplot]({diff(x(t),t)=x(t)*(1-y(t)),diff(y(t),t)=0.5*y(t)*(x(t)-1)},
[x(t),y(t)],t=-7..7,[[x(0)=0.2,y(0)=1],[x(0)=1,y(0)=1.2]],stepsize=0.2,title="Lotka- Voterra
model");
- 27 -
http://dayvahoc.net email: sptrung2810@yahoo.com
Ta hãy khảo sát bài toán: Con lắc vật lý gồm một vật khối lượng m, gắn vào một thanh có chiều
dài l = 1m, khối lượng thanh rất nhỏ so với vật. Hãy so sánh giữa chuyển động góc nhỏ và khi
góc phi lơn của con lắc đó.
> restart;g:=10:l:=1:eqn:=diff(phi(t),t$2)=-g/l*sin(phi(t));
(1)
> ints1:=D(phi)(0)=0,phi(0)=Pi/4;
> nghiem:=dsolve({eqn,ints},numeric):
h1:=plots[odeplot](nghiem,0..4,legend="Phi=Pi/4"):h1;
- 28 -
http://dayvahoc.net email: sptrung2810@yahoo.com
> ints2:=D(phi)(0)=0,phi(0)=Pi/12;
- 29 -
http://dayvahoc.net email: sptrung2810@yahoo.com
Kết luận: Khi góc nhỏ con lắc dao động dưới dạng là một dao động điều hòa. Khi góc lớn thì dao
động được xem như dao động tuần hoàn và có chu kỳ khác so với góc nhỏ.
Lệnh plots[display]()
Cú pháp:
plots[display](a,b,c...,insequence=true(false),options);
plots[display](L,insequence=true(false),options);
plots[display](A,options);
plots[display](P,options);
- 30 -
http://dayvahoc.net email: sptrung2810@yahoo.com
> c:=plottools[circle]([0,0],1,color=blue):
Lệnh vẽ point([x,y],options): là lệnh vẽ điểm có tọa độ [x,y].
> vat:=t->plottools[point]([cos(omega*t),sin(omega*t)], color=red, symbolsize=30,
symbol=circle):
Lệnh seq(f(i),i=0..n); trong đó n là số nguyên dương. Kết quả cho dãy: f(0),f(1),f(2)...f(n).
> hinh:=seq(vat(i/100),i=0..100):
Hiện từng hình trong dãy trên cùng chung một hệ trục theo trình tự của dãy:
> h:=plots[display](hinh,insequence=true,scaling=constrained):
Gọp hai hình đó là đường tròn C và vật chuyển động tròn:
>cdt:=plots[display](c,h,view=[-1.2..1.2,-1.2..1.2],scaling=constrained,tickmarks=[ default,[-
1="-A",1="A"]]):cdt;
Bây giờ ta xét dao động điều hòa: (Biểu diễn ly độ theo thời gian).
Kết hợp hai dạng trên cho ta kết quả: hình chiếu của chuyển động tròn đều lên một trục qua tâm
là dạng dao động điều hòa:
- 31 -
http://dayvahoc.net email: sptrung2810@yahoo.com
> A:=array(1..2,[cdt,dddh]):
> plots[display](A);
Cú pháp:
plottools[translate](p,a,b); "dịch chuyển tịnh tiến trong 2D"
plottools[translate](q,a,b,c); "dịch chuyển tịnh tiến trong 3D"
Ví dụ :
- 32 -
http://dayvahoc.net email: sptrung2810@yahoo.com
Ta xét lệnh này trong trường hợp tịnh tiến trong không gian:
> q := plot3d(1, theta=0..2*Pi, phi = 0..Pi, coords=spherical):
> plots[display]([q,plottools[translate](q, 1, 2, 3)], lightmodel=light3, orientation=[20,70],
scaling=constrained);
- 33 -
http://dayvahoc.net email: sptrung2810@yahoo.com
- 34 -
http://dayvahoc.net email: sptrung2810@yahoo.com
pt_2d: tọa độ điểm làm gốc.
alpha,beta,gamma:gốc quay quanh trục x,y,z.
[pt_3d1,pt_3d2]:
Ví dụ:
> restart;
> p := plot([sin(x), x, x=0..2*Pi]):p;
- 35 -
http://dayvahoc.net email: sptrung2810@yahoo.com
Vẽ một loạt các hình của p quay quanh điểm A(0,Pi) và hiện tất cả chúng:
Cú pháp:
plottools[scale](p,a,b,pt_2d);
plottools[scale](p,a,b,c,pt_3d);
- 36 -
http://dayvahoc.net email: sptrung2810@yahoo.com
Các tham số:
a,b,c: là hệ số co giãn theo các trục x,y,z.
pt_2d,pt_3d: tâm co giãn.
Ví dụ:
Vẽ đường tròn C(O,R) với O(0,0), R=1:
> c := plottools[circle]([0,0],1):plots[display](c,color=blue, scaling=constrained);
Dùng phép biến hình và vẽ cùng chung với hình C cùng hệ trục:
- 37 -
http://dayvahoc.net email: sptrung2810@yahoo.com
Từ nay trở đi chúng tôi sẽ hướng dẫn độc giả các lệnh của Maple thông qua các ví dụ cụ thể. Từ
những ví dụ này đọc giả chỉnh lí cho phù hợp với nội dung cần mô tả, trình bày hay các mô
phỏng mà độc giả cần. Nếu có những ý kiến đóng góp xin các đọc giả gửi email:
sptrung2810@yahoo.com
Ví dụ 1: Quá trình truyền sóng ngang:
>restart;
Xây dựng hàm truyền sóng:
> hamsong:=(x,t)->piecewise(x<=5*t,0.7*sin(2*Pi*(t-x/5)),0):
Tạo hạt vật chất của môi trường truyền sóng:
> dia:=(x,t,cl)->plottools[disk]([x,hamsong(x,t)],0.2,color=cl):
> hinh:=t->seq(dia(i/2,t,cyan),i=0..24):
> hc:=t->plots[display](dia(6,t,red),hinh(t)):
> day:=seq(hc(i/25),i=0..75):
> plots[display](day,insequence=true);
- 38 -
http://dayvahoc.net email: sptrung2810@yahoo.com
>plottools[arrow]([0,0],[A1*cos(omega1*t+phi1),A1*sin(omega1*t+phi1)],.2,.4,.1,color=red
):
> u2:=t-
>plottools[arrow]([0,0],[A2*cos(omega2*t+phi2),A2*sin(omega2*t+phi2)],.2,.4,.1,color=gre
en):
>u:=t-
>plottools[arrow]([0,0],[A1*cos(omega1*t+phi1)+A2*cos(omega2*t+phi2),A1*sin(omega1*
t+phi1)+
A2*sin(omega2*t+phi2)],.2,.4,.1,color=blue):
> dia:=t-
>plottools[disk]([0,A1*sin(omega1*t+phi1)+A2*sin(omega2*t+phi2)],0.5,color=blue):
>d:=t-
>plottools[line]([0,A1*sin(omega1*t+phi1)+A2*sin(omega2*t+phi2)],[A1*cos(omega1*t+ph
i1)
+A2*cos(omega2*t+phi2),A1*sin(omega1*t+phi1)+A2*sin(omega2*t+phi2)],color=blue,lin
estyle=3):
> hinh:=t->plots[display](u1(t),u2(t),u(t),dia(t),d(t)):
> dayhinh:=seq(hinh(Pi/4*i/20),i=0..150):
> plots[display](dayhinh,insequence=true);
- 39 -