Вы находитесь на странице: 1из 39

http://dayvahoc.net email: sptrung2810@yahoo.

com

1. Bài mở đầu cho ứng dụng Maple

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
[> ;

Ta sẽ đi cụ thể vào các phép toán hình thức:


a) Phép tính cộng: (+)
ví dụ: 25 + 36 cho kết quả như sau:
[> 25+36;

-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;

c) phép tính nhân: (*)


Ví dụ: 2.25 x 4 cho kết qua qua phép tính sau:
[> 2.25*4;

d) Phép chia: (/)


[>2/3;
e) phép lấy mũ: (^)
Ví dụ: cho kết qua qua phép tính sau:
> 2^4;

f) Phép tính giai thừa: (!)


Ví dụ: 6! cho kết qua qua phép tính sau:
[> 6!;

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;

Phép gán và phép định nghĩa hàm:


a) Phép gán( :=)
Ta có một biểu thức cồng kềnh mà trong lúc tính toán cần nó rất nhiều thì ta gán cho nó một cái
tên nào đó theo phép gán có cấu trúc sau:
[> tên_gán:= biểu thức;
Ví dụ ta có biểu thức ta gán tên là M ta làm như sau:

b) Định nghĩa hàm số:

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 từng khúc:


+ Hàm_số := Biến_số -> piecewise( Điều_kiện 1, biểu_thức 1,....);

Ví dụ: Ta định nghĩa hàm số như sau:


[> f:=x->2*x^2+3*x+1;

Đị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);

Nếu ta thay thế x=-1 phải có dạng sau:


[> x:=-1;

-2-
http://dayvahoc.net email: sptrung2810@yahoo.com

[> g;

Còn trong khi đó hàm số :


[> f(-1);

[> f(a);

c. Các hàm cơ bản của Maple:


Hàm chuẩn cách viết thường cách viết trong Maple
Hàm e mũ exp(x)
Hàm logarit tự nhiên lnx ln(x)
Hàm logarit thập phân lgx log10(x)
Hàm logarit cơ số a log[a](x)
Hàm số sin,cos sinx,cosx sin(x),cos(x)
Hàm số tang, cotang tgx, cotgx tan(x),cot(x)

2. Các phép toán trên biểu thức

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:

A. Các thủ tục tác dụng lên biến và biểu thức:

a)Thủ tục unassign():


Đây là lệnh hủy các giá trị của phép gán.
Ví dụ như sau:
[> x:=7;
[>unassign(x);
sẽ cho kết quả là thông báo lỗi
Error, (in unassign) cannot unassign `7' (argument must be assignable)
Còn nếu ta đánh lệnh như sau:
[>unassign('x');
# ký hiệu ' là ký hiệu nằm gần phím Enter
Lúc này ta gọi lại giá trị x: [> x; kết quả sẽ là chữ x;
b)Thủ tục subs(): Lệnh thay thế tham số vào trong biểu thức:
Cú pháp:[> subs(tham số= biểu thức 1 ,biểu thức chứa tham số cần thay thế);
Ví dụ như sau: y := x^2+2*a+b, thay x=a+b vào biểu thức ta làm như sau
[>subs(x=a+b,y);
Kết quả: (a+b)^2+2*a+b.
c)Thủ tục eval(): Định giá một biểu thức
Cú pháp: [> eval(biểu thức cần định giá, tham số = biểu thức hay giá trị);
Ta thấy kết quả của lệnh subs và eval ngần như giống nhau đối với một phép tính đại số như thật
sự hay lệnh này khác nhau về ý nghĩa. Để hiểu rõ vấn đề ta làm thí dụ sau:
[>y:=sin(x)/cos(x);
# Bây giờ ta tính kết quả y khi x=0;
[>subs(x=0,y);
Kết quả: sin(0)/cos(0);
-3-
http://dayvahoc.net email: sptrung2810@yahoo.com
Nhưng nếu ta dùng:
[>eval(y,x=0);
kết quả là 0;
Như vậy ta kết luận là lệnh subs() là lệnh yêu cầu máy thay thế biểu thức một cách thuần túy,
trong khi đó lệnh eval() nó mang ý nghĩa là thay thế và định giá trị của biểu thức cần thay thế.
d)Thủ tục assume(biến, tính chất): Lệnh gán cho tính chất của biến.
Ví dụ x là số thực dương
[>assume(x>0); hay [>assume(x,positive);
Ví dụ: x là số thực nằm trong đoạn từ 0 đến 1
[>assume(0<=x,x<=1);

e)Thủ tục simplify(biểu thức):Tối giản biểu thức.


Ví dụ: Tối giản biểu thức: sin(x)^4-cos(x)^4
[>sin(x)^4-cos(x)^4=simplify(sin(x)^4-cos(x)^4);

442
sin(x) - cos(x) = 1 - 2 cos(x)

B. Các phép toán trên biểu thức:

a) Khai triển biểu thức:


Cú pháp:[> expand( Biểu_thức );
[> expand( Biểu_thức1, biểu thức 2 );
Trong đó biểu thức 2 là biểu thức con của biểu thức 1.
Ví dụ:Khai triển biểu thức sau:
[> (z+y)^3; ta được:
[> expand((z+y)^3);

3223
y+3yz+3yz+z

[> expand((x+2)*(y+z),(x+2));

(x + 2) y + (x + 2) z

b) Phân tích đa thức thành nhân tử:


Cú pháp : [>factor(Biểu_thức);
hoặc [>factor(Biểu_thức,{ các giá trị});
Ví dụ phân tích đa thức
[> g = 2*a^2+3*a+1; thành nhân tử:
[> factor(2*a^2+3*a+1);

(a + 1) (2 a + 1)

[> factor(2*a^2+3*a+1,sqrt(2));

(a + 1) (2 a + 1)

c)Tìm hệ số đứng trước bậc thứ n của tham số:


Cú pháp: [> coeff( Biểu_thức, tham_số, bậc của tham số); hoặc
[> coeff( Biểu_thức, tham_số^(bậc của tham số));

-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

Hoặc dạng khác:


[> coeff(105*y*z+160*y*a+10*y^2+8*y^3,y^3);

d) Sắp xếp đa thức theo bậc:


Cú pháp: [> collect( Đa_thức, tham_số);
Chú ý khi đa thức có nhiều tham số thì ta dùng :
Cú pháp: [> collect( Đa_thức, [tham_số 1, tham số 2..]<<,option>>).
Option có hai dạng : recursive (dạng mặc định) và distributed>
Ví dụ: Viết đa thức
[> a^3*y-y+a^3+a; theo bậc của y, của a:
[> collect(a^3*y-y+a^3+a,y);

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

e) Rút gọn biểu thức:


Cú pháp: [> simplify( Biểu_thức);
Các tính chất nhỏ:[> simplify( Biểu_thức <<,option>>);
Option : có thề là trig, ln...hoặc là assume = property (có dạng như real, positive...);
Ví dụ: Đơn giản biểu thức sau
[> 1/(a*(a-b)*(a-c))+1/(b*(b-a)*(b-c))+1/(c*(c-a)*(c-b));

-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

f) Tối giản phân thức:


Cú pháp: [>normal( Phân_thức);
Ví dụ: Tối giản biểu thức sau:
[> (y^8+3*y^4+4)/(y^4+y^2+2);

[> normal((y^8+3*y^4+4)/(y^4+y^2+2));

42
y-y+2

g)Phần dư và thương khi chia đa thức cho đa thức:


Cú pháp: [> rem(Đa_thức bị chia, đa_thức số chia, tham số, 'q');
Trong đó q chính là tham số chỉ kết quả của thương. Hoặc ta tính trực tiếp thương dưới dòng
lệnh sau:
[> quo(Đa_thức bị chia, đa_thức số chia, tham số);
Ví dụ: Tìm phần dư và thương khi
[> x^3+x+1; chia cho
[> x^2+x+1;

[> 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

I. Giới hạn, đạo hàm, tích phân.

a) Giới hạn của hàm số:

Cho hàm số f(x) tìm giới hạn của hàm :


Cú pháp: [> limit( <<,option>>); trong đó option có thể nhận hai giá trị là right hoặc left.
Chú ý ngoài lệnh trên thì còn lệnh Limit là lệnh trơ.
Ví dụ tính giới hạn của các hàm số sau:

-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);

b) Đạo hàm của hàm số:


* Đạo hàm của hàm một biến:
Cú pháp:

- Đạo hàm bậc nhất :

[> diff ( Biểu_thức (x), x );

- Đạo hàm bận n :

[> diff ( Biểu thức(x), x$n);


hoặc

[> diff ( Biểu thức(x), x, x, x..);


Chú ý ngoài lệnh trên thì còn lệnh Diff là lệnh trơ.
* Đạo hàm của hàm số nhiều biến:

- Đạo hàm bậc nhất :

-7-
http://dayvahoc.net email: sptrung2810@yahoo.com
[> diff ( Biểu_thức (x,y,..), x );

- Đạo hàm bậc 2 :

[> diff ( Biểu thức(x,y), x,y);


.......................................................................
* Đạo hàm của hàm ẩn:
Ta có hàm f(x,y) = 0 thì y(x) là hàm ẩn cho nên ta tính đạo hàm của y(x) có cú pháp như sau:

- Đạo hàm bậc 1: :

[> implicitdiff ( f(x,y), y, x);

- Đạo hàm bậc n: :

[> implicitdiff ( f(x,y), y,x$n);


Ví dụ:
[> diff(x*sin(cos(x)),x);

[> Diff(tan(x),x) = diff(tan(x),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:

1/ Tích phân bất định: :


Cú pháp:

[> int (Biểu_thức(x), Biến x);

[> int( x/(x^3-1), x );

[> int( exp(-x^2), x );

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);

[> changevar(x=sin(u), Int(sqrt(1-x^2), x=a...b), u);

* Phương pháp tích phân từng phần:

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

2/ Tính phân xác định:


Cú pháp: [> int (Biểu_thức(x), Biến x= a..b);

3/ Tính phân bằng số:

Cú pháp: [> evalf (integ <<, digits>>);

II. Giải phương trình, hệ phương trình, bất phương trình:

a) Giải phương trình:


Cú pháp: [> solve ( equation, var);

Trong đó : equation: là phương trình cần giải f(x) = g(x)..


var : là biến của phương trình.
Ví dụ:

[> solve( (a^2*c^2 - 4*b^2)/b = a^6*b - 4*a^3*b, [c] );

[> solve(x^3+3*x^2-3*x-1=0,x);

b) Giải bất phương trình:


Cú pháp: [> solve (inequation, var);

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ụ:

[> solve(x+1/x > 0, x);

RealRange (Open(0), oo)

[> solve((x-1)*(x-2)*(x-3) < 0, x);

RealRange (-oo, Open(1)),RealRange (Open(2),Open(3))

c)Giải hệ phương trình:


Cú pháp: [> solve ( {equations}, {vars});

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

4. Đồ thị 2D & 3D của hàm số

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);

Trong đó :f là một biểu thức phụ thuộc biến x


x là tên biến phụ thuộc

- 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ố.

Vẽ nhiều hàm số trên cùng đồ thị:


Chúng ta có thể vẽ nhiều hàm số lên cùng một đồ thị:
Ví dụ chúng ta vẽ đồ thị các hàm số sau:
[>plot({x,x^2,exp(-x)},x=0..1);

Tối ưu hóa đồ thị:


Những options (sự lựa chọn) được liệt kê có thể sử dụng để điều khiển tạo đồ thị không gian 2
chiều. Những options này được dùng với lệnh plot bà nhìn chung đều có sẵn trong gói lệnh của
Maple:
adaptive=n hoặc true false: sự thích nghi
Khi vẽ đồ thị một hàm số trên một khoảng, trên khoảng này một số điểm được thử, được điều
khiển bởi sample(mẫu) và numpoints số điểm thử nhằm chia nhỏ những khoảng này dể thử và
cho ra một đồ thị chính xác. Những mẫu nhỏ này có thể bị sai lệch vì lựa chọn adaptivelà false.
Mặc định của lựa chọn này là true, và khoảng chia nhỏ tối đa là 6 lần thử để hoàn thành đồ thị.
Sự bố trí lựa chọn này co thể thay đổi số lần chia nhỏ tối đatừ một số nguyên dương.

- 12 -
http://dayvahoc.net email: sptrung2810@yahoo.com
ví dụ

[>plot(sin (x)+ln(x),x=-6..6,adaptive=false);

[>plot(sin (x)+ln(x),x=-6..6);#phan nay mac dinh la adaptive=true

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

axis = t hoặc axis[dir]=t

Giới thiệu thông tin về trục x và trục y.


Dạng đầu tiên axis = t cung cấp thong tin cho vào lên cả hai trục.
Dạng thứ hai axis[dir]=t cho phép thông tin được chỉ rõ cho một trục , với dir gọi các giá trị 1
(trục x) hoặc 2 (trục y)
Ví dụ :nên xem trong bảng standard về 3 ví dụ sau
plot(x^3,x=-2..2,axis[1]=[color=green]);#truc x se co mau xanh nhung trong bang classic color
khong the hien duoc, phan nay nen coi bang standard (11)

[>plot(x, x=0..1, axis=[gridlines=[10, color=blue]]);

[>plot(x, x=0..1, axis=[gridlines=[10, color=blue]]);

- 15 -
http://dayvahoc.net email: sptrung2810@yahoo.com

caption=c : chú thích


Chú thích cho đồ thị, c có thể là một biểu thức tùy ý hoặc là một tập hợp bao gồm những chú
thích. mặc định của chương trình là không chú thích.

[>plot(x^2/(x+5), x=1..5, caption=typeset("A plot of ", x^2/(x+5), "."));(14)


#tren truc x se co chu thich "A plot of ", x^2/(x+5), "."

color=n(chú ý màu sắc chỉ thể hiện ở bảng standard)


Dùng để phân biệt các đường cong thể hiện trên cùng một hệ trục tọa độ.
discont = true false( nối những diểm đứt khúc)
Nếu discont =true buộc lệnh plot gọi hàm discont đầu tiên, để xác định sự không liên tục của đầu
vào. Mặc định của discont là false.
filled=true false
Nếu như sự lựa chọn filledđược chọn là true, miền giữa đường cong và trục x sẽ được phun màu
Ví dụ :

[>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);

filledregions= true false


Nếu lựa chọn filledregion = true ,miền xác định bởi cac' đường cong được tô màu với màu sắc
khác nhau .
Lựa chọn này chi được dùng kèm với các lệnh: contourplot, implicitplot, và listcontplot.

[>plots[implicitplot](x^2+y^2<1,x=-1.2..1.2, y=-1.2..1.2, filledregions=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

gridlines =true or false (lưu ý chỉ thể hiện ở bản standard)

Lựa chọn các đường kẻ lưới, nền của đồ thị


Khi gridlines = true hoặc gridlines được sử dụng thì mặc định của chương trình là các đường kẻ
lưới nền của biểu đồ là nâu
Mặc dịnh của chương trình là gridlines = false
labels=[x,y]
Lựa chọn này chỉ rõ tên trục. Mặc định tên trục là tên biến của hàm được vẽ. Ngược lại, thì tên
trục không được sử dụng.
labeldirections=[x,y]
Lựa chọn này chỉ rõ tên trục cần đặt. Giá trị x và y phải nằm trên mặt phẳng ngang hay thẳng
đứng. Mặc định hướng của bất kỳ nhãn nào cũng là mặt phẳng ngang.
legend = s (chú thích)
Chú thích ghi vào đồ thị. Giá trị s được sử dụng để vẽ nhiều đường, s là tập hợp chứa những lời
chú thích dẫn vào mỗi đường.
legend style=s
Bao gồm font=f, location (vị trí)=loc có các giá trị top (ở trên), bottom(ở dưới), right (phải), left
(trái)
numpoints = n
Cho biết số diểm nhỏ nhất được tạo ra để vẽ. Mặc định là 50 điểm. Thông thường plot thường
tạo ra nhiều hơn số diểm tối thiểu để vẽ.
scaling (tỉ lệ)
điều chỉnh tỉ lệ của đồ thị là bắt buộc hay tùy ý. Mặc định là tùy ý.
style=s

5. Phương trình vi phân, hệ phương trình vi phân

Phương trình vi phân và hệ phương trình vi phân

I. Phương trình vi phân bậc I:


Bây giờ ta xét phương trình vi phân như sau:
[> restart:
[> E1:=diff(N(t),t)=-lambda*N(t);

ta giải phương trình tìm nghiệm N(t) như sau:


[> dsolve(E1,N(t));

- 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);

II. Phương trình vi phân bậc II:


Ta thử khảo sát bài toán vật rơi tư do trong chân không như sau. Ta có phương trình vi phân bậc
II của y(t) như sau:
[> restart:
[> E2:=diff(y(t),t$2) = -g;

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);

Giải ra nghiệm tổng quát:


[> dsolve(E3,y(t));

Với điều kiện ban đầu : y(0)=1 và dy/dt(0) = 2


[> omega:=2;s:=dsolve({E3,y(0)=1,D(y)(0)=2},y(t));

Dùng phép gánbằng lệnh assign để gán y(t):


[> assign(s);

- 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;

Nghiệm của bài toán như sau:


[> dsolve(Eq,y(t));

Ta thay điều kiện ban đầu và các hằng số:


[> omega:=Pi;tau:=1;

[> 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);

III. Hệ trình vi phân:


Ta xét hệ phương trình vi phân cho bài toán dao động điều hòa

[> 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

Bây giờ ta chon điều kiện x(0) = 1, v(0) = 0.


[> omega:=1;XV:=dsolve({Eq1,Eq2,x(0)=1,v(0)=0},{x(t),v(t)});

Ta hãy vẽ đồ thị của ly độ x(t) và vận tốc v(t):


[> assign(XV);
[> plot([x(t),v(t)],t=0..10,legend=["x(t) ly do","v(t) van toc"]);

6. Về dđ tắt dần, dđ cưỡng bức và hiện tượng cộng hưởng

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:

I. Dao động tắt dần:


> restart:eqn:=diff(psi(t),t$2)+omega1/Q*diff(psi(t),t)+omega1^2*psi(t)=0;

- 23 -
http://dayvahoc.net email: sptrung2810@yahoo.com

> Q:=10:omega1 := 5:inc:=psi(0)=1,D(psi)(0)=0:dsolve({eqn,inc},psi(t));

> plot(rhs(%),t=0..20);

II. Dao động cưỡng bức:


> restart:
Định nghĩa phương trình vi phân của dao động cưỡng bức:
> eqn:=diff(psi(t),t$2)+omega1/Q*diff(psi(t),t)+omega1^2*psi(t)=Fo*cos(omega*t);

> 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ó

dạng(*) và lực cưỡng bức có dạng:(*) thay vào


phương trình vi phân ta tìm biên độ dao động như sau:
> restart;psi(t):=A*exp(I*omega*t);

> 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

7. Giải phương trình vi phân bằng phương pháp số & vẽ


nghiệm của chúng

I. dsolve/numeric- tìm nghiệm số của phương trình vi phân:


Cú pháp:
dsolve(odesys, numeric, vars, options)
Tham số:
odesys : tập hợp phương trình vi phân, điều kiện ban đầu...
numeric: type= numeric cho phép máy giải phương trình vi phâ dưới dạng số.
var: biến phụ thuộc cần tìm ở nghiệm phương trình vi phân.
options: có dạng từ khóa = giá trị (ví dụ : method = dverk78, output = listprocedure)....

> restart;dsol := dsolve({diff(y(x),x) = y(x)*cos(x), y(0) = 1},


numeric, output=listprocedure);

> dsol(1);

- 26 -
http://dayvahoc.net email: sptrung2810@yahoo.com

II. Vẽ nghiệm của phương trình vi phân:


Lệnh thứ 1:
Cú pháp:
plots[odeplot](dsn, vars, range, otions)
Tham số:
dsn :nghiệm của phương trình vi phân giải bằng phương pháp số.
vars :biến phụ thuộc của nghiệm cần vẽ..
range :khoảng vẽ đồ thị a..b
options : những lựa chọn của lệnh plot/option.

> 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 đó.

Phương trình vi phân của con lắc có dạng:

> restart;g:=10:l:=1:eqn:=diff(phi(t),t$2)=-g/l*sin(phi(t));

(1)

Cho điều kiện ban đầu lần 1: góc phi lớn:

> ints1:=D(phi)(0)=0,phi(0)=Pi/4;

Giải phương trình (1) với điều kiện 1 và vẽ đồ thị ngiệm 1:

> nghiem:=dsolve({eqn,ints},numeric):
h1:=plots[odeplot](nghiem,0..4,legend="Phi=Pi/4"):h1;

- 28 -
http://dayvahoc.net email: sptrung2810@yahoo.com

Cho điều kiện ban đầu lần 2: góc phi nhỏ:

> ints2:=D(phi)(0)=0,phi(0)=Pi/12;

Giải phương trình (1) với điều kiện 2 và vẽ đồ thị ngiệm 2:

> nghiem:=dsolve({eqn,ints2}, numeric):


h2:=plots[odeplot](nghiem,0..4,color=green,legend="Phi=Pi/12"):h2;

Vẽ hai nghiêm trên cùng đồ thị và so sánh:


> plots[display](h1,h2);

- 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ỏ.

8. Các lệnh đồ thị dùng mô phỏng Vật lý

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);

Các tham số:


a,b,c... là cá đồ thị riêng biệt.
L: dãy (list) các đồ thị(ví dụ L:=a,b,c;)
A: mảng một chiều hoặc hai chiều của các đồ thị.
P: đồ thị dưới dạng vận động.
insequence=true(false): nó cho phép hiện từng đồ thị trong dãy(list) theo trình tự của dãy.
options: các tính chất cơ bản của các lệnh vẽ như plot/options

Bây giờ ta đi vào các ví dụ cụ thể:


Một vật chuyển động tròn đều trên đường tròn tâm O(0,0), bán kính R với vận tốc góc omega.
Ta làm như sau:
> restart;
> omega:=2*Pi:
Lệnh vẽ đường tròn thuộc gói plottools:

- 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).

> hs:=x->plot(sin(omega*t),t=-0.01..x,tickmarks=[ default,[-1, -0.5, 0.5, 1]]):


> dhs:=seq(hs(i/100),i=0..100):
> dddh:=plots[display](dhs,insequence=true,scaling=constrained):dddh;

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);

Lệnh plottools[translate](p,a,b): Lệnh tịnh tiến đồ thị.


Lệnh này tác động lệnh đồ thị p cho kết quả là tịnh tiến đồ thị này đến tọa độ mới (a,b)

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"

Các tham số:


p,q: cấu trúc đồ thị cần dịch chuyển tịnh tiến.
a,b,c là các số thực (chính là tọa mới)

Ví dụ :

Tịnh tiến đồ thị hệ trục mới (2,1) ta làm như sau:


> p:=plot(x^2,x=-1..1):
Bây giờ ta tịnh tiến đồ thị p
> pnew:=plottools[translate](p,2,1):
Và vẽ hai đồ thị p và pnew trên cùng hệ trục.
> plots[display](p,pnew);

- 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);

Ứng dụng: Mô tả chuyển động của bài toán ngang:

- 33 -
http://dayvahoc.net email: sptrung2810@yahoo.com

> v:=5: h:=5:g:=10:


Dùng lệnh vẽ hình tròn bán kính 0.1 tai O(0,0), màu xanh.
> c:=plottools[disk]([0,0], 0.1, color=blue):
Thực hiện phép tịnh tiến theo thời gian:
> nem:=t->plottools[translate](c,v*t,h-1/2*g*t^2):
Tạo dãy hình và vẽ chúng:
> nemday:=seq(nem(i/20),i=0..20):
> plots[display](nemday,insequence=true);

9. Các lệnh quay và co giãn đồ thị dùng mô phỏng Vật lý

Lệnh plottools[rotate](): quay đồ thị 2D, 3D:


Cú pháp:
plottools[rotate](p,ang,pt_2d); quay một góc ang quanh điểm có tọa độ pt_2d.
plottools[rotate](q,alpha,beta,gamma); quay đồ thị q quanh truc x, y, z với các góc tương ứng.
plottools[rotate](q,alpha,[pt_3d1,pt_3d2]); quay đồ thị q quanh trục qua [pt_3d1,pt_3d2]
Các tham số:
p: cấu trúc đồ thị 2D.
q: cấu trúc đồ thị 3D.
ang: góc quay.

- 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;

Quay hình p một góc Pi/2 quanh điểm O(0,0):

> r := plottools[rotate](p, Pi/2): plots[display](p, r);

- 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:

> r1 := t->plottools[rotate](p, t,[0,Pi]):dayr1:=seq(r1(i*Pi/10),i=0..20):


plots[display](dayr1,axes=none);

Hiện từng hình trong dãy hình dayr1:


> plots[display](dayr1,insequence=true,axes=none);

Lệnh plottools[scale](): co giãn đồ thị

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:

> plots[display](c, plottools[scale](c, 1/2, 1/2,[1,0]), color=blue, scaling=constrained);

- 37 -
http://dayvahoc.net email: sptrung2810@yahoo.com

10. Các ví dụ về ứng dụng của Maple

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);

Ví dụ 2: Quá trình truyền sóng dọc:


> restart;
> hamsong:=(x,t)->piecewise(x<=5*t,0.4*sin(2*Pi*(t-x/5)),0):
> dia:=(x,y,t,c1)->plottools[disk]([x+hamsong(x,t),y],0.2,color=c1):
Tạo hạt vật chất của môi trường truyền sóng dọc:
> h1:=(x,t,c1)->plots[multiple](dia,[x,0,t,c1],[x,0.5,t,c1],[x,1,t,c1]):
> hinh:=t->seq(h1(i,t,cyan),i=0..12):
> hc:=t->plots[display](h1(6,t,red),hinh(t)):
> day:=seq(hc(i/25),i=0..75):
> plots[display](day,insequence=true);

Ví dụ 3: Hiện tượng sóng dừng trên dây có hai đầu cố định:


> restart;
> u := (x,t)-> .2*sin(2*Pi*t-Pi*x):
Vẽ sóng trên dây tại thời điểm t:
> hinh := t-> plot(u(t, x)-u(t, 8-x), x = 0 .. 4):
Tạo thành dãy nhiều truyền sóng trên dây tại các thời điểm khác nhau:
> day := seq(hinh((1/15)*i), i = 0 .. 15):
> plots[display](day);

Ví dụ 4: Tổng hợp hai dao động điều hòa:


> restart;
Nhập dữ liệu cho hai dao động: biên độ (A), Vận tốc góc(omega),pha ban đầu(phi).
> A1:=10:omega1:=Pi:phi1:=Pi/4:
> A2:=5:omega2:=Pi/2:phi2:=Pi/3:
Vẽ các vectơ của dao động (1) và (2), vectơ của dao động tổng hợp:
> u1:=t-

- 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 -

Вам также может понравиться