chuong1- co ban ve maple
TRANSCRIPT
Chương 1. C
Người soạn: Trần Công Mẫn
Khoa Toán - Đại Học Khoa Học Huế
1. Các tính toán cơ bản trong Giải tích
1.1. Các tính toán đơn giản
Maple có thể được sử dụng như một máy tính điện tử thông thường, hơn nữa nó có thể tính
toán đến 2^28 chữ số nguyên (điều này phụ thuộc vào tốc độ và bộ nhớ của máy tính). Đối
với những số mà độ dài của nó quá chiều dài của màn hình thì Maple sẽ dùng ký hiệu \ để biểu diễn tính liên tục của dãy số.
Ví dụ
> 2+2; 4
> (3 + 7 + 10)*(1000 - 8)/(900 + 90 + 2) - 17; 3
> 2^1000; 10715086071862673209484250490600018105614048117055336074437503883703 \
5105112493612249319837881569585812759467291755314682518714528569 \
2314043598457757469857480393456777482423098542107460506237114187 \
7954182153046474983581941267398767559165543946077062914571196477 \
686542167660429831652624386837205668069376
> 100!; 93326215443944152681699238856266700490715968264381621468592963895217 \
5999932299156089414639761565182862536979208272237582511852109168 \
64000000000000000000000000
> length(%); 158
Một số hàm thường sử dụng khi tính toán trên các số nguyên:
abs: tính giá trị tuyệt đối của một biểu thức
factorial (hoặc !) tính giai thừa của một số nguyên
iquo: tìm thương trong phép chia nguyên
irem: tìm phần dư trong phép chia nguyên
iroot: tính xấp xỉ căn nguyên của một số nguyên
isqrt: tính xấp xỉ căn bậc 2 của một số nguyên
max, min: cho ra giá trị lớn nhất và nhỏ nhất của một tập các số
mod: tính đồng dư số học
ifactor: phân tích số nguyên ra thành các thừa số nguyên tố
isprime: kiểm tra tính nguyên tố của một số nguyên
..........
Mặt khác, Maple có thể tính toán xấp xỉ các hằng số đặc biệt hoặc các biểu thức đến sai số
mà người sử dụng mong muốn.
Ví dụ
> Pi;
> evalf(Pi); 3.141592654
> evalf[100](Pi); 3.141592653589793238462643383279502884197169399375105820974944592307 \
816406286208998628034825342117068
> ln(exp(4)); 4
Với số phức, Maple sử dụng ký hiệu I để biểu diễn cho căn bậc hai của -1. Maple còn có lệnh cho phép ta chuyển đổi các số từ hệ đếm này sang hệ đếm khác.
Ví dụ
> (2+5*I)+(1-I); 3 4 I
> (1+I)/(3+4*I); 7
25
1
25I
> convert(247,binary); 11110111
> convert(1023,hex); 3FF
> convert(10,base,8);
[ ],2 1
Ngoài ra nó còn có nhiều hàm tính toán mà một máy tính thông thường không có
Ví dụ
1. Cho ra 100 số nguyên tố đầu tiên
> seq(ithprime(i),i=1..99); 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97, , , , , , , , , , , , , , , , , , , , , , , , ,
101 103 107 109 113 127 131 137 139 149 151 157 163 167 173 179 181, , , , , , , , , , , , , , , , ,
191 193 197 199 211 223 227 229 233 239 241 251 257 263 269 271 277, , , , , , , , , , , , , , , , ,
281 283 293 307 311 313 317 331 337 347 349 353 359 367 373 379 383, , , , , , , , , , , , , , , , ,
389 397 401 409 419 421 431 433 439 443 449 457 461 463 467 479 487, , , , , , , , , , , , , , , , ,
491 499 503 509 521 523, , , , ,
2. Tìm ước số chung lớn nhất, bội số chung nhỏ nhất của các số
> gcd(1923456,1256872); 8
> lcm(24,15,7,154,812); 267960
1.2. Tính toán trên biểu thức
Maple cung cấp một bộ công cụ khá đầy đủ để làm việc với các biểu thức toán học. Về mặt tính
toán ta có thể khai triển biểu thức, rút gọn biểu thức, phân tích biểu thức đó thành các đa
thức,...hoặc có thể chuyển biểu thức thành những cấu trúc khác đã được định nghĩa trong maple.
Các phép tính cơ bản
Khai triển biểu thức
Sử dụng lệnh expand. Xem các ví dụ sau:
> poly := (x+1)*(x+2)*(x+5)*(x-3/2);
:= poly ( )x 1 ( )x 2 ( )x 5 x3
2
> expand( poly );
x4 13
2x3 5 x2 31
2x 15
> expand( (x+1)*(y^2-2*y+1) / z / (y-1) );
x y2
z ( )y 1
2 x y
z ( )y 1
x
z ( )y 1
y2
z ( )y 1
2 y
z ( )y 1
1
z ( )y 1
> expand( sin(2*x) ); 2 ( )sin x ( )cos x
> ln( abs(x^2)/(1+abs(x)) );
lnx 2
1 x
> expand(%); 2 ( )ln x ( )ln 1 x
> expand( (x+1)*(y+z), x+1 );#khai trien giu nguyen (x+1) ( )x 1 y ( )x 1 z
Ngoài ra ta cũng có thể khai triển biểu thức trên các miền đặc biệt
> poly := (x+2)^2*(x-2)*(x+3)*(x-1)^2*(x-1);
:= poly ( )x 2 2 ( )x 2 ( )x 3 ( )x 1 3
> expand( poly );
x7 2 x6 10 x5 12 x4 37 x3 10 x2 52 x 24
> % mod 3;
x7 2 x6 2 x5 x3 x2 2 x
> Expand( poly ) mod 3;
x7 2 x6 2 x5 x3 x2 2 x
>
Tập hợp các hệ số cùng cấp của biểu thức
Sử dụng lệnh collect để gom các hệ số cùng cấp trong biểu thức lại với nhau. Xem các ví dụ:
> collect( x^2 + 2*x + 1 - a*x + b - c*x^2, x );
( )1 c x2 ( )2 a x b 1
> poly := x^2 + 2*y*x - 3*y + y^2*x^2;
:= poly x2 2 x y 3 y y2 x2
> collect( poly, x );
( )1 y2 x2 2 x y 3 y
> collect( poly, y );
y2 x2 ( )2 x 3 y x2
> trig_expr := sin(x)*cos(x) + sin(x) + y*sin(x); := trig_expr ( )sin x ( )cos x ( )sin x y ( )sin x
> collect( trig_expr, sin(x) ); ( )( )cos x 1 y ( )sin x
> DE := diff(f(x),x,x)*sin(x) - diff(f(x),x)*sin(f(x))
+ sin(x)*diff(f(x),x) + sin(f(x))*diff(f(x),x,x);
:= DEd
d2
x2( )f x ( )sin x
d
d
x( )f x ( )sin ( )f x ( )sin x
d
d
x( )f x ( )sin ( )f x
d
d2
x2( )f x
> collect( DE, diff );
( )( )sin ( )f x ( )sin xd
d
x( )f x ( )( )sin x ( )sin ( )f x
d
d2
x2( )f x
Chú ý: ta không thể dùng lệnh trên để gom theo tổng hoặc tích
> big_expr := z*x*y + 2*x*y + z; := big_expr z x y 2 x y z
> collect( big_expr, x*y ); Error, (in collect) cannot collect x*y
Tuy nhiên, ta có thể gom biểu thức theo nhiều biến cùng một lúc
> poly := x*y + z*x*y + y*x^2 - z*y*x^2 + x + z*x;
:= poly x y z x y y x2 z y x2 x z x
> collect( poly, [x,y] );#gom lan luot
( )1 z y x2 ( )( )1 z y 1 z x
> collect( poly, [x,y], distributed ); #gom cung luc
( )1 z x ( )1 z x y ( )1 z y x2
Phân tích biểu thức thành các thừa số
Để phân tích một biểu thức ra thành tích các thừa số ta sử dụng lệnh factor. Xem các ví dụ sau:
> factor( x^2-1 ); ( )x 1 ( )x 1
> factor( x^3+y^3 );
( )x y ( )x2 x y y2
> rat_expr := (x^16 - y^16) / (x^8 - y^8);
:= rat_exprx16 y16
x8 y8
> factor( rat_expr );
y8 x8
> rat_expr := (x^16 - y^16) / (x^7 - y^7);
:= rat_exprx16 y16
x7 y7
> factor(rat_expr);
( )x y ( )x2 y2 ( )x4 y4 ( )y8 x8
y6 x y5 x2 y4 x3 y3 x4 y2 x5 y x6
Lưu ý rằng tùy vào hệ số của biểu thức mà lệnh factor cho các kết quả khác nhau.
> poly := x^5 - x^4 - x^3 + x^2 - 2*x + 2;
:= poly x5 x4 x3 x2 2 x 2
> factor( poly );
( )x 1 ( )x2 2 ( )x2 1
> expand( sqrt(2)*poly );
2 x5 2 x4 2 x3 2 x2 2 2 x 2 2
> factor( % );
2 ( )x2 1 ( )x 2 ( )x 2 ( )x 1
> poly := x^4 - 5*x^2 + 6;
:= poly x4 5 x2 6
> factor( poly );
( )x2 2 ( )x2 3
> factor( poly, sqrt(2) );
( )x2 3 ( )x 2 ( )x 2
> factor( poly, { sqrt(2), sqrt(3) } );
( )x 2 ( )x 2 ( )x 3 ( )x 3
Ngoài ra, lệnh Factor cho phép phân tích biểu thức thành các thừa số trên các trường đặc biệt
> Factor( x^2+3*x+3 ) mod 7; ( )x 6 ( )x 4
> Factor( x^3+1 ) mod 5;
( )x2 4 x 1 ( )x 1
>
Đưa biểu thức về dạng chuẩn
Sử dụng lệnh normal để thực hiện việc này. Lệnh này thường áp dụng đối với các biểu thức có
chứa phân số, nó sẽ quy đồng mẫu số và rút gọn các thành phần chung để đưa biểu thức đã cho
về dạng rút gọn nhất có thể. Xét các ví dụ sau:
> normal( x + 1/x );
x2 1
x
> expr := x/(x+1) + 1/x + 1/(1+x);
:= exprx
x 1
1
x
1
x 1
> normal( expr ); x 1
x
> expr := (x^2 - y^2) / (x-y)^3;
:= exprx2 y2
( )x y 3
> normal( expr ); y x
( )x y 2
> expr := (x - 1/x) / (x-2);
:= expr
x1
x
x 2
> normal( expr );
x2 1
x ( )x 2
> normal( expr, expanded ); #khai trien mau so
x2 1
x2 2 x
> normal( [ expr, exp(x+1/x) ] ); #thuc hien tren ds cac bieu thuc
,x2 1
x ( )x 2e
x2
1
x
> big_expr := sin( (x*(x+1)-x)/(x+2) )^2
+ cos( (x^2)/(-x-2) )^2;
:= big_expr sin( )x 1 x x
x 2
2
cosx2
x 2
2
> normal( big_expr );
sinx2
x 2
2
cosx2
x 2
2
Đặc biệt: lệnh normal có thể trả về biều thức ở dạng khai triển mà dạng này không đơn giản hơn
dạng ban đầu. Trong những trường hợp này ta nên sử dụng lệnh factor.
> expr := (x^25-1) / (x-1);
:= exprx25 1
x 1
> normal( expr );
1 x15 x x2 x3 x4 x5 x7 x16 x24 x22 x23 x21 x20 x8 x6 x11 x10
x9 x14 x13 x12 x19 x18 x17
> factor(expr);
( )x4 x3 x2 x 1 ( )x20 x15 x10 x5 1
Đơn giản biểu thức
Để đơn giản một biểu thức ta thường dùng lệnh simplify. Lệnh này sẽ tìm dạng đơn giản hơn của
biểu thức được cho để hiển thị ra kết quả. Xét các ví dụ sau:
> expr := 4^(1/2) + 3;
:= expr 4 3
> simplify( expr ); 5
> expr := cos(x)^5 + sin(x)^4 + 2*cos(x)^2 - 2*sin(x)^2 - cos(2*x);
:= expr ( )cos x 5 ( )sin x 4 2 ( )cos x 2 2 ( )sin x 2 ( )cos 2 x
> simplify( expr );
( )cos x 4 ( )( )cos x 1
Nếu muốn áp dụng một số quy luật đặc biệt trong lượng giác, trong các hàm logarit, hoặc trong
các hàm mũ thì ta phải chỉ cho maple biết.
> expr := ln(3*x) + sin(x)^2 + cos(x)^2;
:= expr ( )ln 3 x ( )sin x 2 ( )cos x 2
> simplify( expr, trig ); #trigonometric: luong giac ( )ln 3 x 1
> simplify( expr, ln );
( )ln 3 ( )ln x ( )sin x 2 ( )cos x 2
> simplify( expr); ( )ln 3 ( )ln x 1
Ta cũng có thể đơn giản biểu thức với giả thiết cho trước
> expr := sqrt( (x*y)^2 );
:= expr x2 y2
> simplify( expr );
x2 y2
> simplify( expr, assume=real ); x y
> simplify( expr, assume=positive ); x y
>
Sắp xếp biểu thức
Đôi khi ta nhập vào một biểu thức, ví dụ như một đa thức, thì Maple có thể hiển thị đa thức đó
nhưng không sắp xếp theo đúng thứ tự bậc của đa thức. Để sắp xếp lại đa thức đó theo thứ tự
giảm dần của bậc ta dùng lệnh sort. Xem các ví dụ:
> poly := 1 + x^4 - x^2 + x + x^3;
:= poly 1 x4 x2 x x3
> sort( poly );
x4 x3 x2 x 1
> poly;
x4 x3 x2 x 1
> sort( x+x^3 + w^5 + y^2 + z^4, [w,x,y,z] );
w5 z4 x3 y2 x
> sort( x^3*y + y^2*x^2, [x,y] );
x3 y x2 y2
> sort( x^3*y + y^2*x^2 + x^4, [x,y] );
x4 x3 y x2 y2
> sort( x^3*y + y^2*x^2 + x^4, [y,x] );
y2 x2 y x3 x4
>
>
Một số lệnh khác
Lệnh convert: chuyển biểu thức về một dạng xác đinh
> convert(cos(x),exp); 1
2e
( )x I 1
2e
( )I x
> convert(1/2*exp(x)+1/2*exp(-x),trig); ( )cosh x
> restart;
> A:=Matrix([[a,b],[c,d]]);
:= Aa b
c d
> convert(A,'listlist'); [ ],[ ],a b [ ],c d
> convert(A,'set'); { }, , ,a b c d
> convert(%,'list'); [ ], , ,a b c d
Lệnh combine: tổ hợp các thành phần của biểu thức
> combine( sin(x)^2 + cos(x)^2 ); 1
> combine( sin(x)*cos(x) ); 1
2( )sin 2 x
> combine( exp(x)^2 * exp(y) );
e( )2 x y
> combine( (x^a)^2 );
x( )2 a
Để thấy được từng bước thực hiện của lệnh này ta thực hiện như sau:
> infolevel[combine] := 1; := infolevel
combine1
> expr := Int(1, x) + Int(x^2, x);
:= expr d1 x dx2 x
> combine( expr ); combine: combining with respect to linear
combine: combining with respect to linear
combine: combining with respect to linear
combine: combining with respect to cmbpwr
combine: combining with respect to power
combine: combining with respect to power
combine: combining with respect to power
combine: combining with respect to cmbplus
combine: combining with respect to cmbpwr
combine: combining with respect to power
combine: combining with respect to cmbpwr
combine: combining with respect to power
combine: combining with respect to power
combine: combining with respect to power
d1 x2 x
>
>
Lệnh map: có tác dụng áp dụng một dạng (biểu thức, giá trị, hàm, ...) lên toàn bộ cấu trúc dữ
liệu cho trước.
> map(f,[a,b,c]); [ ], ,( )f a ( )f b ( )f c
> ds:=[0,Pi/2,2*Pi/3,2*Pi];
:= ds , , ,02
2
32
> map(sin,ds);
, , ,0 13
20
> ds1:=[sin(x),ln(x),x^2];
:= ds1 [ ], ,( )sin x ( )ln x x2
> map(Diff,ds1,x);
, ,d
d
x( )sin x
d
d
x( )ln x
d
d
x( )x2
> map(value,%);
, ,( )cos x1
x2 x
> map(x->x^2,[-1,0,1,2,3]); [ ], , , ,1 0 1 4 9
>
Lệnh series: tạo một chuỗi khai triển (hay khai triển Taylor) của biểu thức
> series(sin(x),x=0,10);
x1
6x3 1
120x5 1
5040x7 1
362880x9 ( )O x10
> series(exp(x),x=0,5);
1 x1
2x2 1
6x3 1
24x4 ( )O x5
> series(log(x),x=1,5);
x 11
2( )x 1 2 1
3( )x 1 3 1
4( )x 1 4 ( )O ( )x 1 5
> f(x):=(1+x)^n;
:= ( )f x ( )x 1 n
> series(f(x),x=0,5);
1 n xn ( )n 1
2x2 n ( )n 1 ( )n 2
6x3 n ( )n 1 ( )n 2 ( )n 3
24x4 ( )O x5
1.3. Giải phương trình và hệ phương trình
Lệnh solve
- Đây là lệnh thường được sử dụng để giải phương trình hoặc hệ phương trình.
Ví dụ
> solve({x^2=4},{x}); ,{ }x 2 { }x -2
> solve({a*x^2+b*x+c=0},{x});
,{ }xb b2 4 a c
2 a{ }x
b b2 4 a c
2 a
> solve({x+y=0}); { },x y y y
> solve({x^3-13*x+12},{x});#Maple hieu bieu thuc dau bang 0 , ,{ }x 1 { }x 3 { }x -4
> solve({x+2*y=3,y+1/x=1},{x,y});#giai he phuong trinh
,{ },x -1 y 2 { },x 2 y1
2
> eqns := {x + y + z = 3,
x + 2*y + 3*z = 6,
x + 4*y + 9*z = 14}; := eqns { }, ,x y z 3 x 2 y 3 z 6 x 4 y 9 z 14
> solve(eqns); { }, ,x 1 z 1 y 1
>
> restart;
- Khi ta giải phương trình và thu được nghiệm thì nghiệm đó đựơc cho ở dạng tập hợp. Ta có
thể sử dụng các lệnh đã biết để chuyển dạng nghiệm trên về các cấu trúc dữ liệu khác như danh
sách.
Ví dụ
> sol:=solve({x+2*y=3,y+1/x=1},{x,y});
:= sol ,{ },x -1 y 2 { },x 2 y1
2
> convert(sol[1],list); [ ],x -1 y 2
> eval([x,y],sol[1]); [ ],-1 2
> eval([y,x],sol[1]); [ ],2 -1
> restart;
- Đôi khi phương trình có nhiều nghiệm nhưng Maple không hiển thị hết nghiệm mà chỉ hiển thị
một vài nghiệm, ta sử dụng thêm lệnh sau để buộc Maple biểu diễn hêt nghiệm.
Ví dụ
> eqn:=sin(Pi*x/4)=cos(Pi*x/4);
:= eqn sinx
4cos
x
4
> solve(%,{x}); { }x 1
> _EnvAllSolutions:=true; := _EnvAllSolutions true
> solve(eqn,{x}); { }x 1 4 _Z1~
Ta có thể thấy được các nghiệm của phương trình này thông qua việc vẽ đồ thị sau:
> plot(sin(Pi*x/4)-cos(Pi*x/4),x=-12..12,scaling=constrained);
Lệnh unapply
- Lệnh này cho phép xác định hàm số từ biểu thức và các biến.
Ví dụ
> f := unapply(x^2 + y^2 + 4, x, y);
:= f ( ),x y x2 y2 4
> f(a,b);
a2 b2 4
> eqn1 := x+2*y+3*z+4*t+5*u=41: eqn2 := 5*x+5*y+4*z+3*t+2*u=20:
eqn3 := 3*y+4*z-8*t+2*u=125:
eqn4 := x+y+z+t+u=9:
eqn5 := 8*x+4*z+3*t+2*u=11:
> s1 := solve({eqn1,eqn2,eqn3,eqn4,eqn5}, {x,y,z,t,u}); := s1 { }, , , ,t -11 z -1 y 3 x 2 u 16
> s2 := solve({eqn1,eqn2,eqn3}, { x, y, z});
:= s2 { }, ,x527
137 t
28 u
13z
70
137 t
59 u
13y
635
1312 t
70 u
13
> eval( x, s2 ); 527
137 t
28 u
13
> x(1,1); ( )x ,1 1
> x := unapply(%, u, t); # % = eval(x,s2) := x ( ),u t ( )x ,1 1
> x(1,1); Error, (in x) too many levels of recursion
Lệnh RootOf
Đôi khi, Maple trả về nghiệm của các phương trình dưới dạng lệnh RootOf. Điều này thực sự
hữu ích nếu trường đại số của ta đang làm việc khác với trường số phức. Các index đi theo trong
lệnh RootOf chính là thứ tự các nghiệm. Nếu muốn lấy giá trị tường minh của các nghiệm ta có
thể sử dụng hàm evalf.
Ví dụ
> solve({x^5 - 2*x + 3 = 0},{x});
{ }x ( )RootOf ,_Z5 2 _Z 3 index 1 { }x ( )RootOf ,_Z5 2 _Z 3 index 2, ,
{ }x ( )RootOf ,_Z5 2 _Z 3 index 3 { }x ( )RootOf ,_Z5 2 _Z 3 index 4, ,
{ }x ( )RootOf ,_Z5 2 _Z 3 index 5
> evalf(%); { }x 0.9585321812 0.4984277790 I { }x -0.2467292569 1.320816347 I, ,
{ }x -1.423605849 { }x -0.2467292569 1.320816347 I, ,
{ }x 0.9585321812 0.4984277790 I
Lệnh fsolve
- Lệnh này tương đương với lệnh solve, nhưng nghiệm thu được khi giải phương trình bằng
lệnh này là một dạng nghiệm xấp xỉ dưới dạng số.
Ví dụ
> fsolve({cos(x)-x = 0}, {x}); { }x 0.7390851332
> poly :=3*x^4 - 16*x^3 - 3*x^2 + 13*x + 16;
:= poly 3 x4 16 x3 3 x2 13 x 16
> fsolve({poly},{x}); ,{ }x 1.324717957 { }x 5.333333333
> fsolve({sin(x)=0}, {x}); { }x 0.
> fsolve({sin(x)=0}, {x}, avoid={x=0}); { }x -3.141592654
> fsolve({poly}, {x}, complex); { }x -0.6623589786 0.5622795121 I { }x -0.6623589786 0.5622795121 I, ,
{ }x 1.324717957 { }x 5.333333333,
> fsolve({cos(x)=0}, {x}, Pi..2*Pi); { }x 4.712388980
>
Lệnh dsolve
Maple có thể giải nhiều phương trình vi phân bình thường (ODEs: ordinary differential
equations) bằng lệnh dsolve
Ví dụ 1
> ode1 := {diff(y(t),t,t) + 5*diff(y(t),t) + 6*y(t) = 0};
:= ode1 { }d
d2
t2( )y t 5
d
d
t( )y t 6 ( )y t 0
> ic := {y(0)=0, D(y)(0)=1}; := ic { },( )y 0 0 ( )( )D y 0 1
> soln := dsolve(ode1 union ic, {y(t)});
:= soln ( )y t e( )2 t
e( )3 t
Để lấy giá trị của nghiệm tại các điểm khác nhau ta có thể dùng lệnh unapply như đã biết. Trước
hết ta sử dụng lệnh eval để trích ra biểu thức từ tập hợp nghiệm
> eval( y(t), soln );
e( )2 t
e( )3 t
> y1:= unapply(%, t );
:= y1 t e( )2 t
e( )3 t
> y1(a);
e( )2 a
e( )3 a
Ví dụ 2
> pt := { diff(y(x),x,x)=z(x), diff(z(x),x,x)=y(x) };
:= pt { },d
d2
x2( )y x ( )z x
d
d2
x2( )z x ( )y x
> nghiem := dsolve(pt, {z(x),y(x)});
nghiem ( )z x _C1 ex _C2 e( )x
_C3 ( )sin x _C4 ( )cos x ,{ :=
( )y x _C1 ex _C2 e( )x
_C3 ( )sin x _C4 ( )cos x }
> y := unapply(eval(y(x), nghiem), x );
:= y x _C1 ex _C2 e( )x
_C3 ( )sin x _C4 ( )cos x
> y(1);
_C1 e _C2 e( )-1
_C3 ( )sin 1 _C4 ( )cos 1
> y:='y'; := y y
Một số lệnh khác
Lệnh isolve: tìm nghiệm nguyên của các phương trình
> isolve({3*x-4*y=7}); { },y 2 3 _Z1 x 5 4 _Z1
Lệnh msolve: giải phương trình theo modulo m
> msolve({3*x-4*y=1,7*x+y=2},17); { },y 6 x 14
> msolve({2^n=3},19); { }n 13 18 _Z2
> solve({3*x-4*y=1,7*x+y=2});
{ },x9
31y
-1
31
> about(_Z1); _Z1:
nothing known about this object
Lệnh rsolve: giải các phương trình truy hồi
> rsolve({f(n)=f(n-1)+f(n-2),f(0)=1,f(1)=1},{f(n)}); Error, invalid input: f uses a 2nd argument, y, which is missing
1.4. Đạo hàm
Ví dụ 1
> y := x^4+x^3+x^2+x+1;
:= y x4 x3 x2 x 1
> Diff(y,x);
d
d
x( )x4 x3 x2 x 1
> diff(y,x);
4 x3 3 x2 2 x 1
> Diff(y,x,x,x);
d
d3
x3( )x4 x3 x2 x 1
> diff(y,x$3); 24 x 6
> unassign('y');
Ví dụ 2
> z:=x*exp(x/y)+sin(y/x);
:= z x e
x
ysin
y
x
> diff(z,x,y);
2 x e
x
y
y2
x2 e
x
y
y3
siny
xy
x3
cosy
x
x2
> diff(z,x$2);
2 e
x
y
y
x e
x
y
y2
siny
xy2
x4
2 cosy
xy
x3
> diff(z,y,y);
2 x2 e
x
y
y3
x3 e
x
y
y4
siny
x
x2
Ví dụ 3
> f := (x) -> sqrt(2*Pi)*x^(x+1/2)*exp(-x);
:= f x 2 x( )x /1 2
e( )x
> simplify(diff(f(x),x)); 1
22 x
( )x /1 2e
( )x( )2 ( )ln x x 1
> evalf(50!);
0.3041409320 1065
> evalf(f(50));
0.3036344593 1065
> seq(evalf(n!/f(n)),n=2..22);
1.042207121 1.028064518 1.021008303 1.016783985 1.013972848 1.011967757, , , , , ,
1.010465651 1.009298426 1.008365359 1.007602428 1.006966997, , , , ,
1.006429575 1.005969115 1.005570189 1.005221239 1.004913427, , , , ,
1.004639885 1.004395190 1.004175011 1.003975836 1.003794800, , , ,
1.5. Tính phân
> with(student):
Ví dụ 1: Tìm nguyên hàm, tính tích phân hàm một biến
> Int(x^4*exp(-x),x);
dx4 e( )x
x
> simplify(int(x^4*exp(-x),x));
( )24 24 x 12 x2 4 x3 x4 e( )x
> Int(x/(x^4-1),x);
dx
x4 1x
> int(x/(x^4-1),x); 1
4( )ln x 1
1
4( )ln x 1
1
4( )ln x2 1
> Int(exp(-x^2),x=-infinity..infinity); #Tich phan suy rong
de( )x
2
x
> value(%);
>
>
Ví dụ 2: Tính tích phân 2 lớp, 3 lớp
> Doubleint(sin(x*y),x=0..1,y=1..2);
d1
2
d0
1
( )sin x y x y
> value(%); ( )Ci 2 ( )ln 2 ( )Ci 1
> evalf(%); 0.6075702747
> ?Doubleint
> restart:with(student):
> Tripleint(sin(x*y*z),x=0..1,y=0..1,z=0..1);
d0
1
d0
1
d0
1
( )sin x y z x y z
> value(%);
d
0
1
( )ln z ( )Ci z
zz
> evalf(%); 0.1224340288
Ví dụ 3: Tính tích phân lặp
> Int(Int(y,y=0..1/((sin(x))^3+(cos(x))^3)),x=0..2);
d0
2
d0
1
( )sin x3
( )cos x3
y y x
> evalf(%); 1.417868442
> Int(sin(x)*Int(y^2,y=0..sin(x)-cos(x)),x=Pi/4..3*Pi/4);
d
4
3
4
( )sin x d
0
( )sin x ( )cos x
y2 y x
> value(%); 1
6 8
2. Sử dụng Maple trong Đại số tuyến tính Đại số tuyến tính là một môn học quan trọng trong chương trình đào tạo mà sinh viên các ngành
Toán, Vật lý,... phải học trong năm thứ nhất. Maple cũng đã xây dựng một gói công cụ rất hoàn
thiện để giải quyết các vấn đề trong ĐSTT, đó là LinearAlgebra hoặc linalg. Trước khi
làm việc với ĐSTT ta nên gọi gói công cụ with(LinearAlgebra) hoặc with(linalg);
Ma trận, vectơ và các phép tính cơ bản
Định nghĩa Ma trận và Vectơ
Có rất nhiều cách định nghĩa ma trận, việc chọn lựa cách nào là tùy vào hoàn cảnh và tùy vào
từng người.
Ví dụ
> A:=Matrix([[1,2],[3,4]]);
:= A1 2
3 4
> B:=matrix(2,2,[1,2,3,4]);
:= B1 2
3 4
> Matrix(1..2,1..3,5); 5 5 5
5 5 5
> array([[1,2],[3,4]]); 1 2
3 4
Để tham chiếu đến các phần tử của ma trận ta dùng công thức A[row,column], ví dụ:
> A[1,2]; 2
Nếu muốn hiển thị một ma trận không cấp 2x2 ta làm như sau:
Ví dụ
> C:=Matrix(2,2);
:= C0 0
0 0
> B:=Matrix(1..2,1..2);
:= B0 0
0 0
Một khi ma trận đã định định nghĩa ta có thể gán giá trị cho từng phần tử của nó
Ví dụ
> B[1,1]:=2;B[1,2]:=3;B[2,1]:=7;B[2,2]:=4; := B
,1 12
:= B,1 2
3
:= B,2 1
7
:= B,2 2
4
> B; 2 3
7 4
Có một cách khác để nhập một ma trận vào mà Maple đã xây dựng sẵn mà ta nên để ý là: Trên
thanh menu nhấp chọn View\ Palettes\ Matrix Palettes. Sau đó hàng lệnh sau sẽ xuất hiện và
ta chỉ việc nhập vào các phần tử của ma trận.
> Matrix([[%?, %?, %?], [%?, %?, %?], [%?, %?, %?]]); ? ? ?
? ? ?
? ? ?
Nếu muốn tìm hiểu thêm về ma trận hãy dùng trợ giúp ?Matrix.
Để định nghĩa một vectơ hàng hay vectơ cột ta dùng lệnh Vector như sau:
Ví dụ
Theo mặc định luôn tạo vectơ cột
> b:=Vector([5,6]);
:= b5
6
> b:=Vector[row]([5,6]); := b [ ],5 6
Nếu muốn cho ra một vectơ từ các hàng hoặc các cột của một ma trận đã có ta dùng lệnh
Column và Row như sau
Ví dụ
> c:=Column(A,2);
:= c2
4
> c:=Row(A,1); := c [ ],1 2
Ngoài ra còn có một cú pháp định nghĩa ma trận và vectơ mà ta cũng nên nhắc đến là: <...>
> s:=<1,2,3>;
:= s
1
2
3
Và vì ma trận là tập hợp các ma trận cột nên được định nghĩa:
> R:=<<1,2,3>|<4,5,6>|<7,8,10>>;
:= R
1 4 7
2 5 8
3 6 10
Đôi khi ma trận, vectơ không chỉ có các phần tử là số mà còn là các công thức hoặc các hằng nên
ta lưu ý ví dụ sau
Ví dụ
> d:=Matrix([[x11,x12],[x21,x22]]);
:= dx11 x12
x21 x22
>
> e:=Matrix([[x^2*y,y*x],[sin(x),1/x]]);
:= e
x2 y y x
( )sin x1
x
Lưu ý sự khác nhau giữa eval và evalf
> eval(e,{x=1,y=2}); 2 2
( )sin 1 1
> evalf(eval(e,{x=1,y=2})); 2. 2.
0.8414709848 1.
Các phép toán cơ bản trên ma trận
> restart:with(LinearAlgebra):
Phép cộng, trừ
Có nhiều cách để cộng 2 ma trận, thông thường ta dùng lệnh Add, xét các ví dụ sau:
> B:=Matrix([[1,2,3],[4,5,6],[7,8,9]]);
:= B
1 2 3
4 5 6
7 8 9
> C:=Matrix([[3,2,1],[5,6,4],[9,7,8]]);
:= C
3 2 1
5 6 4
9 7 8
> B+C; 4 4 4
9 11 10
16 15 17
> E:=Add(B,C);
:= E
4 4 4
9 11 10
16 15 17
Phép trừ được thực hiện bằng cách lấy đối của một ma trận
> E:=Add(B,-C);
:= E
-2 0 2
-1 -1 2
-2 1 1
Chú ý rằng khi thực hiện phép cộng, trừ thì ma trận phải cùng kích cỡ (đây là một lỗi rất hay gặp
khi thực hành).
> F:=Matrix([[5,7],[1,3]]);
:= F5 7
1 3
> Add(E,F); Error, (in LinearAlgebra:-MatrixAdd) matrix dimensions don't match: 3 x 3 vs 2
x 2
Phép nhân
Để nhân các ma trận hoặc các vectơ với nhau ta dùng lệnh Multiply, xét các ví dụ sau:
> G:=Multiply(B,C);
:= G
40 35 33
91 80 72
142 125 111
Lệnh này cũng có thể thực hiện việc nhân một ma trận với một vec tơ
> b:=<5,6,7>;
:= b
5
6
7
> Multiply(B,b); 38
92
146
Ngoài ra, ta có thể nhân ma trận và vectơ với một vô hướng bằng phép nhân * thông thường
> 3*B; 3 6 9
12 15 18
21 24 27
> 5*b; 25
30
35
Tìm ma trận nghịch đảo, định thức và hạng của ma trận
Trong phần này chỉ giới thiệu thêm một số lệnh thường gặp khi làm việc với ma trận và vectơ.
Để là tốt các bài thực hành nên đọc thêm các lệnh trong gói LinearAlgebra. Xét các ví dụ sau:
> restart:with(LinearAlgebra):
> B:=Matrix([[1,2,3],[4,5,6],[7,8,9]]);
:= B
1 2 3
4 5 6
7 8 9
> C:=Matrix([[3,2,1],[5,6,4],[9,7,8]]);
:= C
3 2 1
5 6 4
9 7 8
MatrixInverse: Tìm ma trận nghịch đảo của một ma trận cho trước
> MatrixInverse(C); 20
33
-3
11
2
33
-4
33
5
11
-7
33
-19
33
-1
11
8
33
Kiểm tra xem thử lệnh vừa thực hiện có đúng không
> Multiply(C , MatrixInverse(C)); 1 0 0
0 1 0
0 0 1
Determinant: Tính định thức của ma trận
> Determinant(B);Determinant(C); 0
33
Transpose: Tìm chuyển vị của ma trận
> Transpose(C); 3 5 9
2 6 7
1 4 8
> E:=Matrix([[1,2,3]]); := E [ ]1 2 3
> Transpose(E); 1
2
3
Trace: Tìm vết của một ma trận vuông (tổng các phần tử trên đường chéo chính)
> C; 3 2 1
5 6 4
9 7 8
> Trace(C); 17
Rank: Tìm hạng của một ma trận
> with(LinearAlgebra):
A := ScalarMatrix(n,3);
:= A
n 0 0
0 n 0
0 0 n
> Rank(A); 3
Tích vô hướng và góc giữa 2 vectơ
Để tính tích vô hướng của 2 véctơ ta dùng lệnh DotProduct, tính góc giữa 2 vectơ ta dùng lệnh
VectorAngle. Xét các ví dụ sau:
> restart:with(LinearAlgebra):
> v1:=<1|2|3>;v2:=<4|5|6>; := v1 [ ], ,1 2 3
:= v2 [ ], ,4 5 6
> DotProduct(v1,v2); 32
> VectorAngle(v1,v2);
arccos16 14 77
539
> evalf(VectorAngle(v1,v2)); 0.2257261290
Giải hệ phương trình tuyến tính
Ta biết rằng một hệ phương trình tuyến tính có thể viết dưới dạng: A*x=b, với A là một mxn ma
trận và b là vectơ cột gồm m phần tử. Trong gói thư viện LinearAlgebra của Maple có lệnh
LinearSolve dùng để giải các hệ phương trình này. Ta xét ví dụ sau:
Ví dụ
> restart;with(LinearAlgebra):
> A:=Matrix([[1,1,-3/2],[0,-1,1],[1,-2-1/4,1]]);
:= A
1 1-3
2
0 -1 1
1-9
41
> b:=Vector([0,6,0]);
:= b
0
6
0
> LinearSolve(A,b); 19
20
26
> ?LinearSolve
Trong ví dụ thứ 2 này ta sẽ gặp lệnh RandomMatrix dùng để tạo ma trận với các phần tử ngẫu
nhiên, và giải hệ phương trình tuyến tính theo 2 cách.
Ví dụ
> Ab := RandomMatrix(3,4, outputoptions=[datatype=float]);
:= Ab
-70. -94. -53. 40.
13. -7. 21. 97.
-58. 12. -25. 43.
> LinearSolve(Ab); -3.83651127878185338
-1.27278664872979652
6.56976857538359660
> {op(GenerateEquations(Ab, [x,y,z]))}; { }, ,70. x 94. y 53. z 40. 13. x 7. y 21. z 97. 58. x 12. y 25. z 43.
> fsolve(%); { }, ,y -1.272786649 z 6.569768576 x -3.836511279
> subs(%, <x,y,z>); -3.836511279
-1.272786649
6.569768576
Muốn tìm hiểu thêm về lệnh này hãy xem trợ giúp ?LinearSolve;
3. Các cấu trúc dữ liệu cơ bản khác trên Maple
Dãy các biểu thức (Expression sequence)
Ví dụ
> 1,2,3,4; , , ,1 2 3 4
> x,y,z,u; , , ,x y z u
Lưu ý rằng cấu trúc này không phải là một danh sách hay một tập hợp. Đây là một cấu trúc dữa
liệu rời rạc trong Maple có những tính chất riêng:
- Dãy các biểu thức là một cấu trúc biểu diễn có thứ tự các thành phần và cho phép các thành
phần trong dãy trùng nhau. Thứ tự khi ta nhập vào cũng chính là thứ tự của các thành phần.
- Ta có thể thực hiện phép toán ghép (||) trên cấu trúc này.
Ví dụ
> a||b;
|| a
0
6
0
> S:=1,2,3,4; := S , , ,1 2 3 4
> a||S; , , ,a1 a2 a3 a4
- Ngoài ra ta cũng có thể sử dụng cấu trúc này để thực hiện phép gán chung cho nhiều thành
phần.
Ví dụ
> f,g,h:=2,-1,5; := , ,f g h , ,2 -1 5
> g; -1
Danh sách (List)
Ta có thể tạo ra một danh sách trong Maple bằng cách gom các đối tượng (có thể giống nhau
hoặc khác nhau, phân biệt bởi dấu phẩy) trong cặp dấu ngoặc vuông. Các đối tượng trong danh
sách có thể là các phần tử phân biệt, cũng có thể là các danh sách khác.
Ví dụ
> data_list:=[1,2,3,4,5]; := data_list [ ], , , ,1 2 3 4 5
> poly:=[x^2+1,2*x-3,3-x];
:= poly [ ], ,x2 1 2 x 3 3 x
> dsten:=[Tom,Jerry,Mickey]; := dsten [ ], ,Tom Jerry Mickey
> b:='b'; := b b
> ds_cua_ds:=[[a,b],[1,2,3],[x,y,z]]; := ds_cua_ds [ ], ,[ ],a b [ ], ,1 2 3 [ ], ,x y z
Lưu ý rằng Maple bảo toàn thứ tự của các phần tử trong danh sách giống với thứ tự được nhập
vào, do đó ta có thể truy cập trực tiếp vào các phần tử thông qua thứ tự của chúng.
Ví dụ
> chucai:=[a,b,c,d,a]; := chucai [ ], , , ,a b c d a
> chucai[3]; c
Ta có thể kiểm tra một cấu trúc được nhập vào có phải là danh sách hay không bằng lệnh type.
Ví dụ
> type(poly,list); false
> type(ds_cua_ds,list); true
> type(ds_cua_ds,listlist);
false
ở đây listlist cũng là một cấu trúc tạm gọi là danh sách của danh sách, nhưng chú ý các danh sách
thành phần trong listlist phải có cùng số phần tử.
> L:=[[1,2],[a,b],[x,y]];
:= L , ,[ ],1 2 ,a
0
6
0
[ ],x y
> type(L,listlist); true
>
Ta có thể truy nhập trực tiếp vào các thành phần của danh sách thông qua thứ tự các phần tử
bằng các cách sau:
Ví dụ
> L:=[1,3,5,a,b]; := L [ ], , , ,1 3 5 a b
> L[4]; a
> op(4,L); a
> nops(L); #Cho ra so phan tu trong danh sach 5
> op(L); #tra ve day cac phan tu cua danh sach , , , ,1 3 5 a b
Tập hợp (Set)
- Giống như ký hiệu ta vẫn thường diễn đạt khi làm toán, tập hợp được tạo thành khi ta gom các
đối tượng (cách nhau bởi dấu phẩy) vào trong cặp dấu ngoặc{}.
- Các phần tử trong tập hợp phải phân biệt và cấu trúc này không tính đến thứ tự của các phần tử.
Do đó, nếu ta nhập vào tập{a,b,c} hay{b,c, a} là như nhau.
- Tuy nhiên, Maple phân biệt giữa số nguyên và số thực (nghĩa là số 2 và 2.0 là khác nhau) nên
tập hợp như sau vẫn được chấp nhận: {1,2,2.0}
Ví dụ
> data_set:={1,-1,2,7}; := data_set { }, , ,-1 1 2 7
> var:={x,y,z}; := var { }, ,y x z
> {a,b,c},{b,c,a},{a,a,b,c,a}; , ,{ }, ,a c b { }, ,a c b { }, ,a c b
> {1,2,3,1,2.0};
{ }, , ,1 2 3 2.0
- Trên tập hợp ta có thể thực hiện các phép toán: union, intersect, minus hoặc nhiều phép toán
khác. Tập rỗng được ký hiệu là{}.
Ví dụ
> {a,b,c} union {c,d,e}; { }, , , ,e a c b d
> {1,2,3} intersect {0,1,a,2}; { },1 2
> nops(%); 2
* Một lệnh rất thường được sử dụng trên tập hợp đó là lệnh map lệnh này cho phép áp dụng
một hàm đồng thời lên tất cả các thành phần của tập hợp.
Ví dụ
> number:={0,Pi/2,Pi/3,Pi};
:= number { }, , ,02 3
> map(g,number);
{ }, , ,( )g 0 g2
g3
( )g
> map(sin,number);
{ }, ,0 13
2
Một số phép toán khác thực hiện trên tập hợp và danh sách
> ten:=[Tom,Jerry,Donal,Mickey]; := ten [ ], , ,Tom Jerry Donal Mickey
> member(Tom,ten); true
> evalb(Jerry in ten); true
> tap_rong:={}; := tap_rong { }
> ds_rong:=[]; := ds_rong [ ]
> nops(ten); 4
> op(3,ten); Donal
Mảng (Array)
- Là một kiểu cấu trúc dữ liệu mở rộng của cấu trúc danh sách, trong đó các chỉ số của một mảng
bất kỳ đều là các số nguyên và phạm vi của các chỉ số mảng phải được định rõ khi khai báo
mảng. Các thành phần trong mảng đi liền với chỉ số của nó. Hơn nữa, ta có thể định nghĩa lại các
thành phần một cách riêng biệt mà không cần phải định nghĩa lại toàn bộ mảng.
Ví dụ
> A:=array(1..2,1..2,[]); := A ( )array , , .. 1 2 .. 1 2 [ ]
> A[1,1]:=1: A[1,2]:=4: A[2,1]:=2: A[2,2]:=3:
> A; A
> print(A); 1 4
2 3
> B:=array(1..3,[a,b,c]); := B [ ], ,a b c
- Ngoài ra, nếu ta muốn thay thế các thành phần của mảng bởi các giá trị hoặc biểu thức khác thì
có thể dùng lệnh subs (viết tắt từ chữ substitution) như sau:
Ví dụ
> bt:=z^3+2;
:= bt z3 2
> subs({z=x+y},bt);
( )x y 3 2
> a:=array(1..2,[5,3]); := a [ ],5 3
> subs({5=9},a); a
> a1:=subs({5=9},evalm(a)); := a1 [ ],9 3
Bảng (Table)
- Là một cấu trúc dữ liệu mở rộng của cấu trúc mảng. Sự khác nhau giữa bảng và mảng là chỉ số
của bảng có dạng bất kỳ chứ không chỉ giới hạn ở số nguyên như mảng. Cấu trúc chung của một
bảng là: table( F, L);
trong đó F là danh sách các chỉ số, còn L là danh sách các phần tử. Ta có thể hình dung một
bảng như là một ánh xạ đa trị từ tập các chỉ số F đến tập các phần tử L.
Ví dụ
> T:=table([[1,2],[a,b],[c,d,e]]);
T[2]; := T table([ , , ])1 [ ],1 2 2 [ ],a b 3 [ ], ,c d e
[ ],a b
> bang:=table([one=vang,two=xanh,three=den]); := bang table([ , , ])two xanh one vang three den
> bang[two]; xanh
> guitar[day1]:=mi,fa,sol; := guitar
day1, ,mi fa sol
> guitar[day2]:=si,ddo,re; := guitar
day2, ,si ddo re
> guitar[day3]:=sol,la; := guitar
day3,sol la
> print(guitar); table([ , , ])day1 ( ), ,mi fa sol day3 ( ),sol la day2 ( ), ,si ddo re
> indices(guitar); #in ra cac chi muc trong bang , ,[ ]day1 [ ]day3 [ ]day2
> entries(guitar); #in ra cac thanh phan cua bang , ,[ ], ,mi fa sol [ ],sol la [ ], ,si ddo re
> guitar[day2]:='guitar[day2]'; #xoa phan tu day2 ra khoi bang guitar := guitar
day2guitar
day2
> print(guitar); table([ , ])day1 ( ), ,mi fa sol day3 ( ),sol la
Chuỗi (String)
- Giống như ở các ngôn ngữ lập trình khác, chuỗi trong Maple là một tập hợp các ký tự nằm giữa
hai dấu nháy kép "".
- Trên chuỗi, ta có thể truy xuất bất cứ thành phần nào của nó dựa vào vị trị của thành phần đó
trong chuỗi bằng cách tương tự như ở bảng hoặc danh sách; ta có thể ghép hai chuỗi lại bằng
phép toán || hoặc cat; và có thể xem độ dài của chuỗi bằng lệnh length.
Ví dụ
> "This is a string"; "This is a string"
> chuoi:="Later than Never"; := chuoi "Later than Never"
> chuoi[7..10]; "than"
> new:=cat("I have to learn. ",chuoi); := new "I have to learn. Later than Never"
> length(new); 33
4. Cách tổ chức trong Maple Thư viện của Maple được chia làm 2 nhóm: nhóm thư viện chính và nhóm các gói lệnh
(packages). Thư viện chính của Maple chứa các lệnh thường sử dụng nhất trên Maple, còn các
lệnh sâu hơn đối với mỗi đối tượng cụ thể thì nằm ở các gói lệnh. Mỗi gói lệnh chứa một nhóm
các lệnh cho các tính toán liên quan với nhau (Ví dụ gói LinearAlgebra chứa các lệnh thao tác
trên ma trận). Ta có thể sử dụng các lệnh trong các gói lệnh theo một trong những cách sau:
1. Sử dụng tên đầy đủ của gói lệnh và tên của lệnh:
package[cmd]( ... )
Nếu gói lệnh đó còn có gói lệnh con thì sử dụng:
package[subpackage][cmd]( ... )
2. Gọi gói lệnh với with sau đó sử dụng tên của các lệnh trong gói: with(package)
3. Gọi gói lệnh và lệnh sử dụng:
with(package[subpackage], cmd)
Ví dụ
> with(Student[Calculus1]); AntiderivativePlot AntiderivativeTutor ApproximateInt ApproximateIntTutor, , , ,[
ArcLength ArcLengthTutor Asymptotes Clear CriticalPoints CurveAnalysisTutor, , , , , ,
DerivativePlot DerivativeTutor DiffTutor ExtremePoints FunctionAverage, , , , ,
FunctionAverageTutor FunctionChart FunctionPlot GetMessage, , , ,
GetNumProblems GetProblem Hint InflectionPoints IntTutor Integrand, , , , , ,
InversePlot InverseTutor LimitTutor MeanValueTheorem, , , ,
MeanValueTheoremTutor NewtonQuotient NewtonsMethod NewtonsMethodTutor, , , ,
PointInterpolation RiemannSum RollesTheorem Roots Rule Show, , , , , ,
ShowIncomplete ShowSteps Summand SurfaceOfRevolution, , , ,
SurfaceOfRevolutionTutor Tangent TangentSecantTutor TangentTutor, , , ,TaylorApproximation TaylorApproximationTutor Understand Undo, , , ,
VolumeOfRevolution VolumeOfRevolutionTutor WhatProblem, , ]
> y=Tangent(sin(x),x=0); # Tim tiep tuyen cua sin(x) tai x=0 y x
> plot(sin(x),x=-Pi..Pi);
>
>
Sau đây giới thiệu một số gói lệnh thường hay sử dụng trên Maple
1. CodeGeneration: chứa các hàm có thể dịch các mã trong Maple thành những ngôn ngữ
lập trình khác như: C, Fortran, Java, Visual Basic.
2. combinat: các hàm tổ hợp, bao gồm các lệnh cho việc tính toán các hoán vị và tổ hợp
của các danh sách...
3. combstruct: gồm các lệnh cho việc tạo ra và tính toán các cấu trúc tổ hợp, thường sử
dụng để xác định các phương trình hàm sinh ra trong tính toán.
4. DEtools: các công cụ thao tác trên các phương trình vi phân
5. Domains: chứa các lệnh dùng để tạo ra tập xác định của các tính toán; hỗ trợ tính toán
với đa thức, ma trận, chuỗi trên các vành số, vành đa thức, vành các ma trận.
6. Maplets: gồm các câu lệnh cho việc tạo ra các giao diện như cứa sổ tính toán, hộp thoại
hoặc các giao diện khác cho các ứng dụng.
7. numtheory: gồm các câu lệnh làm với lý thuyết số.
8. plots: các lệnh liên quan đến vẽ đồ thị của hàm số.
9. plottools: gồm các lệnh liên quan đến dạng hình học của các vật thể.
10. Student: chứa các gói lệnh con cho việc tính toán cơ bản. Gồm 3 gói lệnh con:
Precalculus, Calculus1, LinearAlgebra.
Xét một số ví dụ sau:
Ví dụ 1 Để tìm đạo hàm của hàm số ta có thể sử dụng Maplet DiffTutor trong gói Student[Calculus1]
> with(Student[Calculus1]);
DiffTutor(); AntiderivativePlot AntiderivativeTutor ApproximateInt ApproximateIntTutor, , , ,[
ArcLength ArcLengthTutor Asymptotes Clear CriticalPoints CurveAnalysisTutor, , , , , ,
DerivativePlot DerivativeTutor DiffTutor ExtremePoints FunctionAverage, , , , ,
FunctionAverageTutor FunctionChart FunctionPlot GetMessage, , , ,
GetNumProblems GetProblem Hint InflectionPoints IntTutor Integrand, , , , , ,
InversePlot InverseTutor LimitTutor MeanValueTheorem, , , ,
MeanValueTheoremTutor NewtonQuotient NewtonsMethod NewtonsMethodTutor, , , ,
PointInterpolation RiemannSum RollesTheorem Roots Rule Show, , , , , ,
ShowIncomplete ShowSteps Summand SurfaceOfRevolution, , , ,
SurfaceOfRevolutionTutor Tangent TangentSecantTutor TangentTutor, , , ,TaylorApproximation TaylorApproximationTutor Understand Undo, , , ,
VolumeOfRevolution VolumeOfRevolutionTutor WhatProblem, , ]
Initializing Java runtime environment.
d
d
x( )x ( )sin x ( )sin x x ( )cos x
> DiffTutor(x*cos(x));
d
d
x( )x ( )cos x ( )cos x x ( )sin x
> DiffTutor(x*cos(x),x);
d
d
x( )x ( )cos x ( )cos x x ( )sin x
> restart; Để tìm hiểu cách tính tích phân ta dùng lệnh Rule
> Int(x*cos(x) + x, x=0..Pi);
d0
x ( )cos x x x
> Rule[sum](%);
Rulesum
d0
x ( )cos x x x
> Rule[power](%);
Rulepower
Rulesum
d0
x ( )cos x x x
> Hint(%); # xac dinh buoc giai tiep theo
Hint Rulepower
Rulesum
d0
x ( )cos x x x
> Rule[%](%%);
Rule
Hint Rulepower
Rulesum
d
0
x ( )cos x x x
Rulepower
Rulesum
d0
x ( )cos x x x
> Rule[sin](%);
Rulesin
Rule
Hint Rulepower
Rulesum
d
0
x ( )cos x x x
Rulepower
Rulesum
d0
x ( )cos x x x
d0
x ( )cos x x x 22
2
> Tìm hiểu cách tính giới hạn
> Understand(Limit, constant, `c*`, power, sum); Limit [ ], , ,constant constantmultiple power sum
câu lệnh trên nhằm chỉ ra việc sử dụng các quy luật tính giới hạn mà không áp dụng trực tiếp để
cho kết quả.
> Limit((1 + 1/x)^x, x=infinity);
limx
11
x
x
> Hint(%);
,rewrite 11
x
x
ex ln 1
1
x
> Rule[%](%%);
limx
11
x
x
limx
ex ln 1
1
x
> Hint(%); [ ]exp
> Rule[%](%%);
limx
11
x
x
e
limx
x ln 11
x
> Hint(%);
,lhopital ln 11
x
> Rule[%](%%);
limx
11
x
x
e
limx
x
x 1
> restart;
>
Ví dụ 2
* Xác định cơ sở của không gian vectơ sinh bởi các vectơ: [1;-1; 0; 1], [5;-2; 3;-1], và [6;-3; 3;
0]. Biểu diễn vectơ [1,2,3,-5] theo cơ sở đó
> with(LinearAlgebra):
> v1:=<1|-1|0|1>:
v2:=<5|-2|3|-1>:
v3:=<6|-3|3|0>:
> vector_space:=<v1,v2,v3>;
:= vector_space
1 -1 0 1
5 -2 3 -1
6 -3 3 0
> LinearSolve( Transpose(vector_space), <0,0,0,0> ); _t
3
_t3
_t3
kết quả trên chỉ ra rằng các vectơ trên không độc lập tuyến tính vì vậy chúng không thể là cơ
sở
> b:=RowSpace(vector_space); := b [ ],[ ], , ,1 0 1 -1 [ ], , ,0 1 1 -2
> b1:=b[1]; b2:=b[2]; := b1 [ ], , ,1 0 1 -1
:= b2 [ ], , ,0 1 1 -2
> basis:=<b1,b2>;
:= basis1 0 1 -1
0 1 1 -2
> LinearSolve( Transpose(basis), <1|2|3|-5> ); Error, (in LinearAlgebra:-LA_Main:-LinearSolve) number of rows of left hand side
Matrix, 4, does not match number of rows of right hand, 1
>
Ví dụ 3
Bây giờ ta sẽ làm một số tính toán trên gói stats (gói thống kê). Trong gói này chứa các gói lệnh
con:
> with(stats); [ ], , , , , , ,anova describe fit importdata random statevalf statplots transform
Gói stats làm việc với dữ liệu dạng danh sách thống kê (có thể tạo ra bởi cấu trúc danh sách của
Maple).
> marks :=[64,93,75,81,45,68,72,82,76,73]; := marks [ ], , , , , , , , ,64 93 75 81 45 68 72 82 76 73
> readings := [ 0.75, 0.75, .003, 1.01, .9125,
.04, .83, 1.01, .874, .002 ]; := readings [ ], , , , , , , , ,0.75 0.75 0.003 1.01 0.9125 0.04 0.83 1.01 0.874 0.002
> describe[mean](marks); 729
10
> describe[range](marks); .. 45 93
> describe[range](readings); .. 0.002 1.01
> describe[standarddeviation](readings); 0.4038751074
> random_data:=[random[normald](50)]; random_data 1.275676034 0.4761860895 -2.620054215 0.8547207946, , , ,[ :=
-1.089001803 0.7165427609 -0.02996436194 1.330855643 -1.296345120, , , , ,
-0.4703304005 -0.7122630822 -0.08717900722 1.282253011 -1.683720684, , , , ,
0.3265473243 0.08179818206 0.2127564698 -0.7279468705 0.6855773713, , , , ,
-0.3760280547 -0.8074455431 0.5638425492 0.7668276240 -0.9578304704, , , , ,0.09625284223 -0.5899328336 0.8199273969 1.522884873 -0.2965618595, , , , ,
-0.7531006388 0.3151206337 -0.6711662977 -0.3957955372 0.3570600824, , , , ,
0.004561604546 -0.2594005341 0.8186971245 -0.7093245232 -0.1522233390, , , , ,
-0.01405914095 -0.6157994795 -0.7439751083 0.7842556864 2.454999901, , , , ,
0.8338628854 -0.9492334297 -0.7742757515 0.1717256675 -1.535635792, , , , ,
1.087459487]
>
>
>