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; 10715086071862673209484250490600 1071508607186267 320948425049060001810561404811705 018105614048117055336074437503883 5336074437503883703 703 \ 5105112493612249319837881569585 510511249361224 93198378815695858127594672917553 81275946729175531468251871452856 14682518714528569 9 \ 2314043598457757469857480393456 231404359845775 74698574803934567774824230985421 77748242309854210746050623711418 07460506237114187 7 \ 7954182153046474983581941267398 795418215304647 49835819412673987675591655439460 76755916554394607706291457119647 77062914571196477 7 \ 6865421676604298316526243868372 686542167660429 831652624386837205668069376 05668069376 > 100!; 93326215443944152681699238856266 933262154439441 526816992388562667004907159682643 70049071596826438162146859296389 81621468592963895217 5217 \ 599993229915608941463976156518 59999322991560 89414639761565182862536979208272 2862536979208272237582511852109 237582511852109168 168 \ 64000000000000000000000000 > length(%);
158 Một số
hàm thườ ng 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 tìm thương trong phép chia nguyên iquo:
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.141592653589793238462643383279502884197169399 3.14159265358979323846264338 3279502884197169399375105820974944592 375105820974944592307 307 \ 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. -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
7 25
1 I 25
> (1+I)/(3+4*I);
> convert(247,binary);
11110111 > convert(1023,hex);
3FF 3F F > convert(10,base,8);
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.141592653589793238462643383279502884197169399 3.14159265358979323846264338 3279502884197169399375105820974944592 375105820974944592307 307 \ 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. -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
7 25
1 I 25
> (1+I)/(3+4*I);
> convert(247,binary);
11110111 > convert(1023,hex);
3FF 3F F > 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 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: := (x+1)*(x+2) (x+1)*(x+2)*(x+5)* *(x+5)*(x-3/2 (x-3/2); ); > poly := poly := ( x
1 ) ( x
2 ) ( x
5) x
3 2
> expand( poly ); x 4
13 3 x 2
5 x2
31 x 2
15
> expand( (x+1)*(y^2-2*y+1) / z / (y-1) ); x y 2 x y 2 2 xy 2y 1 z ( y 1 ) z ( y 1 ) z ( y 1 ) z ( y 1 ) z ( y 1 ) z ( y 1 ) > expand( sin(2*x) );
2 si sin n( x ) cos( x ) > ln( abs(x^2)/(1+abs(x)) );
ln
x
1
2
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
2x
> Expand( poly ) mod 3; x7
2 x6
2 x5 x3 x2
2x
> 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 > collect( poly, x );
(1
y2 ) x2
y2 x2
2 xy
3y
3) y
x2
> collect( poly, y ); y2 x2
(2 x
> 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); DE :=
d 2 d x 2
f ( x ) sin( x )
d f ( x ) sin( f ( x ) ) d x
> collect( DE, diff );
d sin( x ) f ( x ) d x
sin( f ( x ) )
d 2 d x 2
f ( x )
( sin( f ( x ) )
d sin( x ) ) f ( x ) d x
( sin( x )
sin( f ( x ) ) )
d 2 d x
2
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 x 2 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); x 16 y 16 rat_expr := 8 x y 8 > factor( rat_expr ); y8 x8
> rat_expr := (x^16 - y^16) / (x^7 - y^7); x 16 y 16 rat_expr := 7 x y 7 > factor(rat_expr); ( x y ) ( x 2 y 2 ) ( x 4 y4 ) ( y 8 x 8 ) y6 x y5 x 2 y4 x 3 y 3 x4 y 2 x 5 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 > factor( poly );
( x
1 ) ( x2
2 ) ( x2
1)
2
> 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 > factor( poly, sqrt(2) ); ( x2
2 ) ( x2
3 ) ( x
3)
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
4x
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); x 1 expr := x 1 x
1 x
> normal( expr ); 1
x x
> expr := (x^2 - y^2) / (x-y)^3; expr :=
x 2 y 2
( x
> normal( expr ); y
( x
x y )2
y )3
1
> expr := (x - 1/x) / (x-2); 1 x 2
x expr :=
x
> normal( expr ); x 2 1 x ( x 2 )
> normal( expr, expanded ); #khai trien mau so x2 1 x 2
2x
> normal( [ expr, exp(x+1/x) ] ); #thuc hien tren ds cac bieu thuc x
2
x x ( x
2
1 ,e 2)
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 2
x
2
cos
x2 x 2
2
> normal( big_expr ); sin
2
x2
cos
2
x
2
x2 x
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); x25 1 expr := x 1
> normal( expr ); 1 x 15 x x 2 x 3 x 4 x5 x 7 x16 x 24 x 22 x23 x 21 x 20 x8 x 6 x 11 x 10 x 9
x 14
x 13
x 12
x19
x 18
x 17
> 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
> simplify( expr );
5
3
> 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
ln( 3 )
ln( x )
cos( x )2
> simplify( expr);
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 :=
x 2 y 2
> simplify( expr ); x 2 y 2
> 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
x4 x3 x2 x
1
> poly; > 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 x 3 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 ( x I ) e 2
1 ( e 2
I x )
> convert(1/2*exp(x)+1/2*exp(-x),trig); cosh( x ) > restart; > A:=Matrix([[a,b],[c,d]]); A :=
a
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 sin( 2 x ) 2 > combine( exp(x)^2 * exp(y) ); (2 x
y)
e
> 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 combine := 1
> expr := Int(1, x) + Int(x^2, x); expr :=
1 d x
x 2 d x
> combine( expr ); combine: combine: combine: combine: combine: combine: combine: combine: combine: combine: combine: combine: combine: combine:
combining combining combining combining combining combining combining combining combining combining combining combining combining combining
with with with with with with with with with with with with with with
respect respect respect respect respect respect respect respect respect respect respect respect respect respect
to to to to to to to to to to to to to to
linear linear linear cmbpwr power power power cmbplus cmbpwr power cmbpwr power power power
x 2 d x
1
> > 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 := 0,
2 ,2 2 3 ,
> map(sin,ds); 0, 1,
3 ,0 2
> ds1:=[sin(x),ln(x),x^2]; ds1 := [ sin( x ), ln( x ), x2 ] > map(Diff,ds1,x); d d d 2 sin( x ), ln( x ), ( x ) d x d x d x
> map(value,%);
cos( x ),
1 ,2x 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); 1 3 1 5 1 1 x x x x7 x9 6 120 5040 362880
O( x10 )
> series(exp(x),x=0,5);
1
x
> series(log(x),x=1,5); 1 1 1 ( x 1 )2 ( x 1 )3 ( x x 1 2 3 4
1 2 x 2
1 3 x 6
1 )4
1 4 x 24
O( x5 )
1 )5 )
O( ( x
> f(x):=(1+x)^n;
f ( x ) := ( x > series(f(x),x=0,5); n (n 1) 2 n (n x 1 nx 2
1) (n 6
2)
x3
1 )n
n (n
1) (n 2) (n 24
3)
x4
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}); b b2 4 a c b b2 4 a c { x }, { x } 2a 2a > 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 1 { x -1, y 2 }, { x 2, y } 2
> eqns := {x +
y + z = 3, x + 2*y + 3*z = 6, x + 4*y + 9*z = 14};
eqns := { x
y
z
3, x
2y
3z
6, x
4y
9z
14 }
1, z
1, y
1}
> solve(eqns);
{ x > > 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}); 1 sol := { x -1, y 2 }, { x 2, y } 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); x x eqn := sin cos 4 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 > f(a,b);
a2
b2
4
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
> s2 := solve({eqn1,eqn2,eqn3}, { x, y, z});
16 }
527 13
s2 := { x
7 t
28 u ,z 13
70 13
7 t
59 u ,y 13
635 13
12 t
70 u } 13
> eval( x, s2 );
527 13
28 u 13
7 t
> 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( _Z 5 2 _Z 3, index 1 ) }, { x RootOf( _Z 5 { x
RootOf( _Z 5
2 _Z 3, index
3 ) }, { x
{ x
RootOf( _Z 5
2 _Z 3, index
5)}
2 _Z 3, index
RootOf( _Z 5
2 ) },
2 _Z 3, index
4 ) },
> 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
> fsolve({sin(x)=0}, {x});
{ x
0. }
5.333333333 }
> fsolve({sin(x)=0}, {x}, avoid={x=0}); { x -3.141592654 } > fsolve({poly}, {x}, complex); { x -0.6623589786 0.5622795121 I }, { x -0.6623589786 { x 1.324717957 }, { x 5.333333333 }
0.5622795121 I },
> 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}; 2 d d ode1 := { y( t ) 5 y( t ) 6 y( t ) 0 } 2 d t d t > ic := {y(0)=0, D(y)(0)=1}; ic := { y( 0 )
0, D( y )( 0 )
1}
> soln := dsolve(ode1 union ic, {y(t)}); ( 2 t )
soln := y( t )
( 3 t )
e
e
Để 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 ); ( 2 t ) e
( 3 t ) e
> y1:= unapply(%, t ); y1 := t
( 2 t ) e
( 3 t ) e
> y1(a); ( 2 a) e
( 3 a) e
Ví d ụ 2 > pt := { diff(y(x),x,x)=z(x), diff(z(x),x,x)=y(x) }; d 2 d 2 pt := { 2 y( x ) z( x ), 2 z( x ) y( x ) } d x d x > nghiem := dsolve(pt, {z(x),y(x)}); nghiem := { z( x )
y( x )
_C1 e x
_C1 e x _C2 e
_C2 e ( x )
( x )
_C3 sin( x )
_C3 sin( x )
_C4 cos( x ),
_C4 cos( x ) }
> y := unapply(eval(y(x), nghiem), x ); y := x
_C1 e x
_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});
{ x
9 ,y 31
-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
d 4 ( x x3 x2 x d x
1)
> Diff(y,x);
> diff(y,x);
4 x3 > Diff(y,x,x,x);
d 3 d x
3
3 x2
2x
( x4 x3 x 2 x
1
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 y
sin
y x
> diff(z,x,y); 2xe
x y
x
2
y 2
x y
sin
e
y 3
y x
cos
y
x 3
y x
x 2
> diff(z,x$2); 2e y
x y
x e
x y
sin
y 2
y y2 x
2 cos
x 4
y y x
x 3
> diff(z,y,y); 2x
2
y
x y e
x
3
3
x y e
sin
y4
y x
x 2
Ví dụ 3 > f := (x) -> sqrt(2*Pi)*x^(x+1/2)*exp(-x); f := x
> simplify(diff(f(x),x)); 1 2 2
x
2 ( x
x
1/ 2 )
( x
( x ) e
1/ 2 )
( x ) e
( 2 ln( x ) x
> evalf(50!);
0.3041409320 10 65 > evalf(f(50));
0.3036344593 10 65 > seq(evalf(n!/f(n)),n=2..22);
1)
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); ( x )
x4
d x
e
> simplify(int(x^4*exp(-x),x));
( 24
12 x2
24 x
4 x3 x4 ) e
( x )
> Int(x/(x^4-1),x); x x
4
d x
1
> int(x/(x^4-1),x);
1 ln( x 4
1 ln( x 4
1)
1)
1 ln( x2 4
1)
> Int(exp(-x^2),x=-infinity..infinity); #Tich phan suy rong 2 ( x ) e
d 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); 2
1
sin( x y ) d x d y 1
0
> 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); 1
1
1
sin( x y z ) d x d y d z 0
0
0
> value(%); 1
ln( z ) z
Ci( z )
d z
0
> 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); 1 2
sin( x )
3
cos( x )
3
y d y d x 0
0
> evalf(%);
1.417868442 > Int(sin(x)*Int(y^2,y=0..sin(x)-cos(x)),x=Pi/4..3*Pi/4); 3 4 sin( x )
cos( x )
y 2 d y d x
sin( x ) 0 4
> 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]]); A :=
1 3
2 4
B :=
1 3
2 4
5
5
5
5
5
5
> B:=matrix(2,2,[1,2,3,4]);
> Matrix(1..2,1..3,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); 0 0 C := 0 0 > B:=Matrix(1..2,1..2); B :=
0 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; B1, 1 := 2 B1, 2 := 3
B2, 1 := 7 B2, 2 := 4
> B; 2 7
3 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]); b :=
5 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 Column và Row như sau Ví d ụ > c:=Column(A,2); 2 c := 4
lệnh
> 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>;
1
s :=
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>>; 1 4 7 R := 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]]); x11 x12 d := x21 x22 > > e:=Matrix([[x^2*y,y*x],[sin(x),1/x]]); x2 y yx e := 1 sin( x ) x
Lưu ý sự khác nhau giữa eval và evalf > eval(e,{x=1,y=2}); 2 sin( 1 )
2 1
> evalf(eval(e,{x=1,y=2})); 2. 0.8414709848
2. 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]]); 1 2 3 B := 4 5 6 7 8 9 > C:=Matrix([[3,2,1],[5,6,4],[9,7,8]]); 3 2 1 C := 5 6 4 9 7 8
> B+C; 4 9
4 11
4 10
16
15
17
> E:=Add(B,C); E :=
4
4
4
9 16
11 15
10 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); -2 0 2 E := -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]]); 5 7 F := 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); 40 35 33 G := 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>; 5 b := 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 12
6 15
9 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]]); 1 2 3 B := 4 5 6 7 8 9 > C:=Matrix([[3,2,1],[5,6,4],[9,7,8]]); 3 2 1 C := 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 1
6 4
7 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); n
0
0
A := 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); arccos
16 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]]); -3 1 1 2 A := 0 -1 1 -9 1 1 4 > b:=Vector([0,6,0]); 0 b :=
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]); -70. -94. -53. 40. Ab := 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 > fsolve(%); { y -1.272786649, z
6.569768576, x
12. y
25. z
43. }
-3.836511279 }
> subs(%, ); -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; 0 a ||
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]]; 0 L := [ 1, 2 ], a,
6 , [ x, y ] 0
> 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 := { 0,
, , } 2 3
> map(g,number);
{ g( 0 ), g
2
,g
3
, g( ) }
> map(sin,number); { 0, 1,
3 } 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 2
4 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 day2 := guitar 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, Criti calPoints, CurveAnalysisTutor DerivativePlot, DerivativeTutor, DiffTutor, ExtremePoints, FunctionAverage, FunctionAverageTutor, FunctionChart, Functi onPlot, GetMessage, GetNumProblems, GetProblem, Hint, InflectionPoints, IntTutor, Integrand , InversePlot, InverseTutor, Limi tTutor, 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, Criti calPoints, CurveAnalysisTutor , DerivativePlot, DerivativeTutor, DiffTutor, ExtremePoints, FunctionAverage, FunctionAverageTutor, FunctionChart, Functi onPlot, GetMessage, GetNumProblems, GetProblem, Hint, InflectionPoints, IntTutor, Integrand , InversePlot, InverseTutor, Limi tTutor, 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 ( x sin( x ) ) d x
sin( x )
x cos( x )
d ( x cos( x ) ) d x
cos( x )
x sin( x )
cos( x )
x sin( x )
> DiffTutor(x*cos(x));
> DiffTutor(x*cos(x),x); d ( x cos( x ) ) d 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);
x cos( x )
x d x
0
> Rule[sum](%); x cos( x )
Rulesum 0
> Rule[power](%);
x d x
x cos( x )
Rule power Rulesum
x d x
0
> Hint(%); # xac dinh buoc giai tiep theo Hint Rule power Rulesum
x cos( x )
x d x
0
> Rule[%](%%); Rule
x cos( x )
Rule power Rulesum
Rule Hint Rule power sum
x cos( x )
x d x
0
x d x
0
> Rule[sin](%); Rulesin Rule
x cos( x )
Rule power Rulesum
Rule Hint Rule power sum
x cos( x )
x d x
0
x d x
0
2
x cos( x )
x d x
2
0
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); lim
1 x
1
x
x
> Hint(%); 1 x
rewrite, 1
x
x ln 1
1 x
e
> Rule[%](%%); lim
1
x
1 x
x
lim
x ln 1
1 x
x ln 1
1 x
e
x
> Hint(%);
[ exp ] > Rule[%](%%); lim x
1
1 x
lim
x x e
> Hint(%);
1 x
lhopital , ln 1
> Rule[%](%%); lim
1
x
1 x
x
lim
x
x
x
1
e
> 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:=; 1
-1
0
1
vector_space := 5
-2
3
-1
6
-3
3
0
> LinearSolve( Transpose(vector_space), <0,0,0,0> ); _t 3 _t 3 _t 3
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:=; basis :=
1 0
0 1
1 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
>