38
Chương 1. C Người son: Trn Công Mn Khoa Toán - Đại Hc Khoa Hc Huế 1. Các tính toán cơ bn trong Gii tích 1.1. Các tính toán đơn giản Maple có thđược sdng như một máy tính điện tthông thường, hơn nữa nó có thtính toán đến 2^28 chsnguyên (điều này phthuc vào tốc độ và bnhcủa máy tính). Đối vi nhng smà độ dài ca nó quá chi u dài ca màn hình thì Maple sdùng ký hiu \ để biu din tính liên tc ca 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 Mt shàm thường sdng khi tính toán trên các snguyên: abs: tính giá trtuyệt đối ca mt bi u thc factorial (hoc !) tính giai tha ca mt snguyên iquo: tìm thương trong phép chia nguyên

Chuong1 Co Ban Ve Maple

Embed Size (px)

Citation preview

Page 1: Chuong1 Co Ban Ve Maple

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

Page 2: Chuong1 Co Ban Ve Maple

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

Page 3: Chuong1 Co Ban Ve Maple

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

Page 4: Chuong1 Co Ban Ve Maple

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

Page 5: Chuong1 Co Ban Ve Maple

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

Page 6: Chuong1 Co Ban Ve Maple

> 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

Page 7: Chuong1 Co Ban Ve Maple

> 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

Page 8: Chuong1 Co Ban Ve Maple

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

Page 9: Chuong1 Co Ban Ve Maple

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:

Page 10: Chuong1 Co Ban Ve Maple

> 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

Page 11: Chuong1 Co Ban Ve Maple

> 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

Page 12: Chuong1 Co Ban Ve Maple

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

Page 13: Chuong1 Co Ban Ve Maple

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

Page 14: Chuong1 Co Ban Ve Maple

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

Page 15: Chuong1 Co Ban Ve Maple

> 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

Page 16: Chuong1 Co Ban Ve Maple

> 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

Page 17: Chuong1 Co Ban Ve Maple

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

Page 18: Chuong1 Co Ban Ve Maple

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

Page 19: Chuong1 Co Ban Ve Maple

> 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

Page 20: Chuong1 Co Ban Ve Maple

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

Page 21: Chuong1 Co Ban Ve Maple

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

Page 22: Chuong1 Co Ban Ve Maple

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

Page 23: Chuong1 Co Ban Ve Maple

> 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

Page 24: Chuong1 Co Ban Ve Maple

> 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

Page 25: Chuong1 Co Ban Ve Maple

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

Page 26: Chuong1 Co Ban Ve Maple

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

Page 27: Chuong1 Co Ban Ve Maple

> 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

Page 28: Chuong1 Co Ban Ve Maple

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

Page 29: Chuong1 Co Ban Ve Maple

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

Page 30: Chuong1 Co Ban Ve Maple

{ }, , ,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

Page 31: Chuong1 Co Ban Ve Maple

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.

Page 32: Chuong1 Co Ban Ve Maple

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"

Page 33: Chuong1 Co Ban Ve Maple

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

Page 34: Chuong1 Co Ban Ve Maple

>

>

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

Page 35: Chuong1 Co Ban Ve Maple

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](%);

Page 36: Chuong1 Co Ban Ve Maple

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

Page 37: Chuong1 Co Ban Ve Maple

> 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

>

Page 38: Chuong1 Co Ban Ve Maple

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]

>

>

>