43
TRÖÔØNG ÑAÏI HOÏC ÑAØ LAÏT KHOA TOAÙN - TIN HOÏC VOÕ TIEÁN GIÔÙI THIEÄU PHAÀN MEÀM TOAÙN HOÏC (Baøi Giaûng Toùm Taét) -- Löu haønh noäi boä -- Ñaø Laït 2008

GIÔÙI THIEÄU PHAÀN MEÀM TOAÙN HOÏC ilog2(x) số nguyên logarit cơ số 2 của x. Nếu x số thực và r = ilog2(x), thì r hoaëc nguyeân hoaëc giaù trò kí hieäu

  • Upload
    vunhan

  • View
    239

  • Download
    1

Embed Size (px)

Citation preview

TRÖÔØNG ÑAÏI HOÏC ÑAØ LAÏT KHOA TOAÙN - TIN HOÏC

VOÕ TIEÁN

GIÔÙI THIEÄU PHAÀN MEÀM TOAÙN HOÏC (Baøi Giaûng Toùm Taét)

-- Löu haønh noäi boä -- Ñaø Laït 2008

MỤC LỤC

NỘI DUNG TRANG

Chương I : Các tính toán cơ bản 2 A. Số học 2 I. Giới thiệu 2 II. Tính toán số học thông dụng 3 B. Đại số 8 C. Vẽ đồ thị 11 Chương 2: Phép tính vi- tích phân 16 1. Tính giới hạn 16 2. Tính đạo hàm 16 3. Tính tích phân 18 4. Một số ứng dụng 19 Chương 3: Đại số tuyến tính và hình học giải tích 26 A. Hình học giải tích 26 1. Các tính toán trong hình học phẳng 26 2. Các tính toán trong hình học không gian 33 B. Đại số tuyến tính 36 1.Tạo Vector, matrận 36 2. Thao tác trên ma trận 37 3. các phép toán trên ma trận 37 4. Tìm cơ sở 37 5. Một số toán tử 38 6. Đa thức đặc trưng 38 7. Hệ phương trình tuyến tính 38 8. Một số ma trận đặc biệt 38 Chương 4: Phương trình vi phân 40

1. Ký hiệu 40 2. Giải phương trình, hệ phương trình vi phân 40 3.Thừa số tích phân 40 4.Phân loại 40 5.Vẽ đồ thị nghiệm 40 6. Phương trình đạo hàm riêng 41 Tài liệu tham khảo 42

2

CHƯƠNG 1. CÁC TÍNH TOÁN CƠ BẢN A. SỐ HỌC:

I. GIỚI THIỆU VỀ MAPLE • Maple là một phần mềm Toán học do Đại Học Tổng Hợp Waterloo(Canada) xây

dựng và đưa vào sử dụng năm 1985. Sau nhiều lần cải tiến và phát triển qua nhiều phiên bản khác nhau và ngày càng được hoàn thiện, hiện nay đã có Maple 11.

• Với phần mềm Maple, chúng ta có thể: + Thực hiện các tính toán với khối lượng lớn, với thời gian nhanh và độ chính xác cao. + Sử dụng các gói chuyên dụng của Maple để giải quyết các bài toán cụ thể như: vẽ đồ thị (gói plots), hình học giải tích (gói geometry), đại số tuyến tính (gói linalg), GiảI tích (gói student), phương trình vi phân(gói DEtools), lý thuyết số(gói numtheory), Dữ liệu rời rạc(gói DiscreteTransforms),... + Thiết kế các đối tượng 3 chiều. + Và các vấn đề khác,… • Lệnh của Maple : phải kết thúc bằng ; hay : và enter. Chú ý nhóm lệnh:

SHIFT+ENTER

Tính toán các số lớn, các biểu thức cần độ chính xác cao > 100!; > 2^64; > evalf(Pi,500);

Vẽ đồ thị các hàm số > with(plots); Warning, the name arrow has been redefined

animate animate3d animatecurve arrow changecoords complexplot complexplot3d, , , , , , ,[conformal conformal3d contourplot contourplot3d coordplot coordplot3d, , , , , ,cylinderplot densityplot display display3d fieldplot fieldplot3d gradplot, , , , , , ,gradplot3d implicitplot implicitplot3d inequal listcontplot listcontplot3d, , , , , ,listdensityplot listplot listplot3d loglogplot logplot matrixplot odeplot pareto, , , , , , , ,pointplot pointplot3d polarplot polygonplot polygonplot3d polyhedra_supported, , , , , ,polyhedraplot replot rootlocus semilogplot setoptions setoptions3d spacecurve, , , , , , ,sparsematrixplot sphereplot surfdata textplot textplot3d tubeplot, , , , , ]

> plot(x^3+4*x^2-1,x=-10..5,y=-10..15,thickness=2,numpoints=1000); Và : > with(plottools); Warning, the name arrow has been redefined

3arc arrow circle cone cuboid curve cutin cutout cylinder disk dodecahedron, , , , , , , , , , ,[

ellipse ellipticArc hemisphere hexahedron homothety hyperbola icosahedron, , , , , , ,line octahedron pieslice point polygon project rectangle reflect rotate scale, , , , , , , , , ,semitorus sphere stellate tetrahedron torus transform translate vrml, , , , , , , ]

> c := circle([1,1], 1, color=red):

> plots[display](c);

> with(plottools): > c := disk([1,1], 5, color=red): > plots[display](c);

Tính đạo hàm, tích phân các hàm số > with(student);

D Diff Doubleint Int Limit Lineint Product Sum Tripleint changevar, , , , , , , , , ,[completesquare distance equate integrand intercept intparts leftbox leftsum, , , , , , , ,makeproc middlebox middlesum midpoint powsubs rightbox rightsum, , , , , , ,showtangent simpson slope summand trapezoid, , , , ]

> diff(sin(2*x^2-1),x): > int(sin(x)*cos(x)^2,x);

Thiết kế đối tượng 3 chiều: >tubeplot([10*cos(t),10*sin(t),0,t=0..2*Pi,radius=2*cos(7*t),numpoints=120,tubepoints=24],scaling=CONSTRAINED); >tubeplot({[10*cos(t),10*sin(t),0,t=0..2*Pi,radius=2*cos(7*t),numpoints=120,tubepoints=24],[0,10+5*cos(t),5*sin(t),t=0..2*Pi,radius=1.5,numpoints=50,tubepoints=18]}, scaling=CONSTRAINED); Chú ý : + Bắt đầu một tính toán mới dùng : restart; để xóa các dữ liệu cũ. + Mở gói : with(têngói); Đóng 1gói : unwith(têngói ); + Hiển thị các gói đang mở : packages();

II. TÍNH TOÁN SỐ HỌC THÔNG DỤNG 1. Tính toán số học thông dụng: • Các phép toán số học: +, -, *, /, ^ hay ** • Các phép toán logic : not, and, or, implies, xor và các hằng: true, false, FAIL. • Các phép toán so sánh : <, <=, >, >=, =, và <>

Chú ý : Các ký hiệu : %, %%, %%% • Một số hàm thư viện :

- abs(x) - Gía trị tuyệt đối. - binomial(n, r) - Tổ hợp

4

- trunc(x) : số nguyên lớn nhất, nhỏ hơn hoặc bằng x nếu >= 0, trunc(x)=-trunc(-x)với x<0. - round(x) làm tròn thành số nguyên gần x nhất. - frac(x) phần thập phân của x ,dạng phân số , frac(x) = x - trunc(x). - floor(x) Số nguyên lớn nhất, nhỏ hơn hoặc bằng x. - ceil(x) Số nguyên nhỏ nhất, lớn hơn hoặc bằng x. - exp(x), hàm ex , e = 2.718281828... - n! hay factorial(n) : hàm giai thừa - ilog[b](x) hàm cho phần nguyên của logarit cơ số b, mặc nhiên cơ số exp(1). Nếu x thực, ilog[b](x) trả về r mà b^r <= abs(x) < b^(r+1). • ilog2(x) số nguyên logarit cơ số 2 của x. Nếu x số thực và r = ilog2(x), thì r hoaëc nguyeân hoaëc giaù trò kí hieäu ñaëc bieät thoûa

2^r <= abs(x) < 2^(r+1). Nếu x số phức, ilog2(x) trả về max(ilog2(Re(x)), ilog2(Im(x))). Nếu x là kí hiệu đặc biệt, thì kết quả chỉ định được trả vềâ'. 1. ilog2(undefined) = undefined

2. ilog2(+-infinity) = infinity

3. ilog2(+-0) = -infinity

• ilog10(x) trả về số nguyên của logarit cơ số 10 của x. 1. ilog10(undefined) = undefined

2. ilog10(+-infinity) = infinity

3. ilog10(+-0) = -infinity

Vídụ: > ilog2(10); cho 3 - ln(x) logarit Nepe (cơ số exp(1) = 2.7182818284590452354...)

• log[b](x) = y <==> x = b^y. vôùi log[b](x) = ln(x)/ln(b). • log10(x) = log[10](x). • max(x1, x2, ...); min(x1, x2, ...); maximum/minimum của dãy giá trị thực.

Chú ý : max(); cho -∞ và min() cho ∞

- signum() Hàm dấu.

- sqrt(x) Căn bậc 2

- surd(x,n) Căn bậc n của x, n lẻ -∞ < x <+∞ - root(x,n) hay root[n](x) root(x,n,symbolic) hay root[n](x,symbolic) : Căn bậc n của của biếu thức đại số. Chú ý : root(x,n) = exp(1/n * ln(x))

5

- Các hàm lượng giác và hyperbolic lượng giác:

sin, cos, tan, sec,csc, cot, sinh, cosh, tanh, sech, csch, coth

- Hàm lượng giác ngược và hyperbolic lượng giác ngược:

arcsin, arccos, arctan, arcsec, arccsc, arccot, arcsinh, arccosh, arctanh, arcsech, arccsch, arccoth

Ví dụ : > (-10+5^2)*(4-sqrt(36)); > 7!!; > cot(Pi/4); 2. Tính toán với độ chính xác theo yêu cầu • Hàm evalf

- Cú pháp 1: evalf(bieu_thuc) - tính toán chính xác giá trị của biểu thức và biểu diễn kết quả với mặc định là 10 chữ số. Ta có thể thay mặc định bằng Digits=n; - Cú pháp 2: evalf(bieu_thuc, k) - tính toán chính xác giá trị của biểu thức và biểu diễn kết quả với k chữ số. > sqrt(2)/surd(5,3); > evalf(%); > evalf(Pi,500); > evalf(exp(1),100); 3. Các thao tác với số nguyên tố - Phân tích một số n thành thừa số nguyên tố: hàm ifactor(n); - Kiểm tra một số n có phải là số nguyên tố không?: hàm isprime(n); - Tìm số nguyên tố đứng sau một số n cho trước: hàm nextprime(n); - Tìm số nguyên tố đứng trước một số n cho trước: hàm prevprime(n); - Tìm ước số chung lớn nhất của 2 số nguyên dương a, b: hàm igcd(a,b); - Tìm bội số chung nhỏ nhất của 2 số nguyên dương a, b: hàm ilcm(a,b); - Tìm số dư khi chia a cho b: hàm irem(a,b); - Tìm thương nguyên khi chia a cho b: hàm iquo(a,b); > isprime(2^64-1); > ifactor(122333444455555666666777777788888888999999999); > igcd(157940,78864); > ilcm(12,15); > prevprime(1234567); > nextprime(1234567); > nextprime(%); > irem(145,7); > iquo(145,7); > y:=irem(145,7,'x'); >x; 4. Giải phương trình nghiệm nguyên • Lệnh isolve:

6

- Cú pháp 1: isolve(phuong_trinh/he_phuong_trinh); - Cú pháp 2: isolve(phuong_trinh/he_phuong_trinh, danh_sach_tham_so); > isolve({x^2+y^2=50,x+y=8},(x,y}); > isolve(x^2+y^2=5,{x,y}); • Giải PT hay hệ PT theo modulo :

msolve(eqns,vars,m); hay msolve(eqns,m);

Ví dụ : > msolve({3*x-4*y=1,7*x+y=2},19); > msolve(8^j=2,x,17); • Tính toán theo modulo : e mod m tương đương `mod`(e, m)

modp(e, m) :∈ [0,abs(m)-1] mods(e, m) : ∈[-iquo(abs(m)-1,2), iquo(abs(m),2)] Ví dụ : > modp(12,7); cho 5 > 12 mod 7; cho 5 > mods(12,7); cho -2 5. Giải công thức truy hồi(đệ qui): • Lệnh rsolve:

- Cú pháp: rsolve(pt/he_pt_truy_hoi, ten_day_so); > rsolve({f(n)=f(n-1)+f(n-2),f(0)=1,f(1)=1},f(n)); > rsolve({f(n)=2*f(n-1)},f(n)); > rsolve({g(n)=3*g(n/2)+5*n},g); > rsolve(f(n)-f(n-1)=n^3,f); > simplify(%); > eqn:=f(n)=f(n-1)+4*n: > rsolve(eqn,f); > simplify(%); > A:=rsolve({f(n)=f(n-1)+f(n-2),f(0)=1,f(1)=1},f(k)); > h:=unapply(A,k); > h(5); > eval(A,k=5); subs(k=5,A); 6. Khái niệm biến số, hằng số - Trong Maple, biến số không cần khai báo, định nghĩa trước, dùng lúc nào khai báo lúc đó, Maple nhớ và ghi lại trong quá trình làm việc. - Biến số, hằng số được đặt tên thỏa mãn một số quy tắc sau: + Không bắt đầu bằng chữ số. Bắt đầu bằng ký tự chữ. + Không chứa khoảng trắng và một số ký tự đặc biệt như: %,^,&,*,$,#,... + Không được trùng với tên một số hàm và lệnh của Maple: D, sin, cos, ln, min, max, for,if, while, I, Pi, ... - Một biến số sẽ trở thành hằng số ngay khi nó được gán cho một giá trị nào đó. - Nếu muốn biến một hằng số trở lại biến số, ta dùng phép gán: ten_bien:='ten_bien'; > isolve({x+y=36,2*x+4*y=100}): > x:=2;

7

> isolve({x+y=36,2*x+4*y=100}): > x:='x'; > isolve({x+y=36,2*x+4*y=100}); • Hằng : I, Pi , exp(1), infinity, true, false, FAIL.

Chú ý : 1/ > 2e-3; cho .002 > -2.3e4; cho -23000 Và .2 , 2. là 0.2 , 2..0 2/ Dùng cặp ` ` để đặt tên "sai" . VD : `day la ten ` 3/ Để biến trở lại tên ta dùng : unassign('name1', 'name2', ...); assign(a, B); hay assign(a = B); cho a := B;

assign(A, B) ; A, B là các đối tượng,v d: > assign(('a', 'b') = (3, 4)); assigned(n); kiểm tra n đã gán trị chưa. 7. Tính tổng và tích • Tính tổng: sum (tính trực tiếp ra kết quả) ;

hoặc Sum(biểu diễn dạng công thức); Cú pháp: sum(bieu_thuc_trong_tong, bien =gia_tri_dau .. gia_tri_cuoi); Sum(bieu_thuc_trong_tong, bien =gia_tri_dau .. gia_tri_cuoi); Hay add(bt, i=m..n); • Tính tích: product (tính trực tiếp ra kết quả);

hoặc Product (biểu diễn dạng công thức); Cú pháp: product(bieu_thuc_trong_tong, bien =gia_tri_dau .. gia_tri_cuoi); Product(bieu_thuc_trong_tong, bien =gia_tri_dau .. gia_tri_cuoi); Hay mul(bt, i=m..n); Chú ý: giá trị vô cùng được biểu diễn bằng từ khóa infinity > Sum(x^2,x=1..5); > value(%); > sum(x^2,x=1..5); > Sum(1/(x^2),x=1..infinity); > value(%); > Product((i^2+3*i-11)/(i+3),i=0..10); > value(%); > product((i^2+3*i-11)/(i+3),i=0..10); >Sum( 2^(2*k)/Pi^(1/2),k=0..infinity) =sum(2^(2*k)/Pi^(1/2),k=0..infinity); Chú ý : > sum(i^2,i); tương đương > sum(k^2,k=1..i-1); 8. Tập hợp, dãy, danh sách. • Tập hợp : dùng {}, các phép toán : member, union, intersect, minus, subset.

Ví dụ : > {a,b} union {b,c}; > {a,b} intersect {b,c}; > {a,b} minus {b,c}; • Dãy : seq(bt, i=1..n); seq(f, i = x) hay bt$i=1..n;

> seq( sin(Pi*i/6), i=0..6 );

8

, , , , , ,0 12

12 3 1 1

2 3 12 0

> Y := [seq( i^2, i=X )];

:= Y [ ], , , , , ,0 1 4 9 16 25 36

> [seq( [X[i],Y[i]], i=1..nops(X) )];

[ ], , , , , ,[ ],0 0 [ ],1 1 [ ],2 4 [ ],3 9 [ ],4 16 [ ],5 25 [ ],6 36

• Danh sách : Dùng [ ], các phép toán : nops(L), op(i,L) chú ý :op(L) cho dãy. op(L1,L2); L1,L2 là các danh sách Ví dụ : > u := [1,4,9]; > op(2..3,u); cho 4,9 > op(-1,u); cho 9 > [op(u),16]; > w := f(g(a,b),h(c,d,e,j,k,l)); > op(1,op(2,w)); c > op([2,1],w); c > op([2,2..4],w); , ,d e j > op([-1,-1],w); l

Lệnh zip(f, u, v); zip(f, u, v, d); thực hiện phép toán f trên 2 danh sách u,v. Với d là giá trị mặc nhiên cho dữ liệu danh sách ngắn hơn. Chú ý: select(f, e, b1, ..., bn); chọn dữ liệu từ biểu thức remove(f, e, b1, ..., bn); di chuyển dữ liệu từ biểu thức selectremove(f, e, b1, ..., bn): chọn và di chuyển dữ liệu từ biểu thức f : biểu thức logic; e: biểu thức bất kỳ, b1,..,bn : các tùy chọn Ví dụ : > integers := [$10..20];

:= integers [ ], , , , , , , , , ,10 11 12 13 14 15 16 17 18 19 20 > select(isprime, integers); cho [ ], , ,11 13 17 19 > remove(isprime, integers); cho [ ], , , , , ,10 12 14 15 16 18 20 > selectremove(isprime, integers); cho ,[ ], , ,11 13 17 19 [ ], , , , , ,10 12 14 15 16 18 20 B. ĐẠI SỐ : 1. Khai triển, đơn giản và phân tích biểu thức đại số • Định giá biểu thức : value(%); • Khai triển biểu thức đại số

- Cú pháp: expand(bieu_thuc_dai_so); > expand(bt); > bt:=(x+y)^15;

9

> expand(bt); • Phân tích đa thức thành nhân tử

Cú pháp: factor(bieu_thuc_dai_so); > factor(x^4-10*x^3+35*x^2-50*x+24); • Đơn giản biểu thức đại số

Cú pháp: simplify(bieu_thuc_dai_so); > P:=1/(a*(a-b)*(a-c))+1/(b*(b-a)*(b-c))+1/(c*(c-b)*(c-a)); > simplify(P); > bt:=cos(x)^5+sin(x)^4+2*cos(x)^2-2*sin(x)^2-cos(2*x); > simplify(bt); • Tối giản phân thức

Cú pháp: normal(phan_thuc); chú ý : radnormal(btchuacan); > tu := x^3-y^3; > mau := x^2+x-y-y^2; > phanthuc := tu/mau; > normal(phanthuc); Chú ý : numer(PT); denom(PT); • Thay giá trị cho biến trong biểu thức

Cú pháp: subs(bien = gia_tri , bieu_thuc); > bt := x^2-1; > subs(x=2,bt); > bt := x^2-1; bt := x2-1 > subs(x=2,bt); cho 3 > subs( {x=y, y=x}, [x,y] );

Chú ý : eval(BT,x=a);# Tính toán biểu thức khi x=a hay Eval(bt,x=a); > poly := x*y+3*z+2;

:= poly + + x y 3 z 2 > eval(poly,[x=2,y=3,z=t]);

+ 8 3 t > expr := sin(x)/cos(x);

:= expr ( )sin x( )cos x

> subs(x=0,expr); ( )sin 0( )cos 0

> eval(expr,x=0); 0 • Chuyển đổi dạng biểu thức

Cú pháp: convert(bieu_thuc, kieu_chuyen_doi); Một số kiểu chuyển đổi: abs,algebraic, and, array, base, binary, binomial, boolean_function, boolean_operator, bytes, Chebyshev, compose, confrac, D, decimal, degrees, diff, dimensions, elementary, exp, expln, expsincos, factorial, float, fullparfrac, hex, hexadecimal,Int, int, list, listlist,ln, Matrix,matrix,metric, name,octal, or, parfrac,

10

piecewise, polar, polynom,power, radians,radical, rational, ratpoly, RealRange, set, signum ,sincos, sqrfree,string, Sum,sum,surd, symbol, tan, trig, trigh, truefalse,Vector, vector, xor,`*`, `+`

> bt:=(a*x^2+b)/(x*(-3*x^2-x+4)): > convert(bt,parfrac,x): > bt:=(x^2-1)/(x+2); > convert(bt,parfrac); • Chuyển đổi và rút gọn : combine(f); hay combine(f,tên); • Khử căn ở mẫu : radsimp(bt,ratdenom);

2. Định nghĩa hàm số • Cách 1: sử dụng toán tử ->

Cú pháp: ten_ham := bien -> bieu_thuc_ham_so; > f := x->x^2+1/2: > f(a+b): • Cách 2: sử dụng lệnh unapply

Cú pháp: ten_ham := unapply(bieu_thuc, bien); > g:=unapply(x^3+2,x); > g(4); • Định nghĩa hàm từng khúc

Cú pháp: ten_ham := bien -> piecewise(đk_1, bt_1, đk_2, bt_2, ..., đk_n, bt_n); Ý nghĩa: nếu đk_i đúng thì hàm nhận giá trị là bt_i > f:=x->piecewise(x<=-1,x^2-1,x<=1,-abs(x)+1,sin(x-1)/x); > f(1); • Các phép toán trên hàm : f+g, f-g, f*g, f/g, f@g , f@@(-1)

> (sin@@2)(Pi/2); tương dương sin(sin(Pi/2)); > (sin@@(-1))(Pi/2); cho arcsin(Pi/2) 3. Giải (bất) phương trình, hệ (bất) phương trình • Sử dụng một lệnh chung duy nhất: lệnh solve

- Cú pháp: solve(phuong_trinh , {bien_1, bien_2, ...}); solve ({pt_1, pt_2, ...}, {bien_1, bien_2, ...}); solve(bat_phuong_trinh , {bien_1, bien_2, ...}); solve ({bpt_1, bpt_2, ...}, {bien_1, bien_2, ...}); > pt:=x^3-a*x^2/2+13*x^2/3=13*a*x/6+10*x/3-5*a/3: > solve(pt,{x}): > pt1:=abs((z+abs(z+2))^2-1)^2=9: > solve(pt1,{z}): > pt2:=(cos(x)-tan(x)=0): > solve(pt2,{x}): > pt3:=x^4-x^3+x^2-x+1: > solve(pt3,{x}): > hpt1:={x+y=36, x*4+y*2 = 100}: > solve({x+y=36, x*4+y*2 = 100},{x,y}): > solve((x-1)*(x-2)*(x-3) < 0, {x}): > solve((x-1+a)*(x-2+a)*(x-3+a) < 0, {x}):

11

• Giải gần đúng : fsolve( eqns, vars, options ); Trong đó : options: avoid=s : tránh các nghiệm s dạng {var = value}. complex : Tìm nghiệm gần đúng trên trường C. fulldigits : mọi tính toán xấp xỉ trong fsolve dùng nhiều hơn kí số thập phân của Digits maxsols=n : tìm ít nhất n nghiệm của đa thức Tìm nghiệm trên khoảng a..b hay x = a..b hay {x=a..b, y=c..d, ...}. Chú ý : lhs(expr); rhs(expr); isolate(eqn, expr);

Ví dụ : > isolate(x^2-3*x-5,x^2); = x2 + 3 x 5

• Tính toán số phức: đơn vị ảo I, dùng các phép tính số học bình thường, Tính toán tổng quát dùng: evalc(bt); Phần ảo: Im(bt); phần thực :Re(bt);

Số phức liên hợp : conjugate(x); Tính modun : abs(sphức); Tính argument: argument(x); Chuyển số phức sang tọa độ cực :convert(Sphức,polar); Ví dụ: > abs(1+2*I); > argument(abs(z)*exp(I*2*Pi/3)); • Giả thiết :

assume(x1, prop1, x2, prop2, ...); assume(x1::prop1, x2::prop2, ...); expr assuming property; expr assuming x1::prop1, x2::prop2, ... Ví dụ : >assume(a>0, a<1); limit(a^n, n=infinity); > e1 := ln(exp(-k[1]*t));

:= e1 ( )ln e( )−k1 t

> e1 assuming real;

−k1 t > assume(x::real); > about(x); Originally x, renamed x~: is assumed to be: real 4. Đa thức : • Sắp xếp hệ số theo lũy thừa :

collect(a, x); collect(a, x, form, func); • Tìm bậc đa thức : degree(P,x); • Tìm hệ số: coeff(P,x,n); • Dư : rem(a, b, x); hay rem(a, b, x, 'q'); • Thương : quo(a, b, x); hay quo(a, b, x, 'r');

12

C. VẼ ĐỒ THỊ: 1. Khởi tạo các hàm vẽ đồ thị > with(plots): Warning, the previous binding of the name arrow has been removed and it now has an assigned value > with(plottools): 2. Vẽ đồ thị trong không gian 2 chiều Oxy • Vẽ đồ thị hàm thông thường:

Cú pháp: plot(ham_can_ve, x=gt_dau..gt_cuoi, y=gt_dau..gt_cuoi, cac_tuy_chon); Một số tùy chọn thông dụng: - Đặt màu cho đồ thị: color = <màu> - Đặt độ dày k cho đồ thị: thickness = k - Đặt số điểm vẽ cho đồ thị: numpoints = k; > plot(x^3-3*x^2+1,x=-5..5,y=-5..5): > f:=x->abs(x^3-x^2-2*x)/3-abs(x+1): > plot(f(x),x=-5..5,y=-5..5): • Vẽ nhiều đồ thị trên cùng một hệ trục

Cú pháp: plot([ham_1, ham_2,...], x=gt_dau..gt_cuoi, y=gt_dau..gt_cuoi, cac_tuy_chon); > plot([x^2,sin(x)],x=-2..2,color=[red,green]): > with(plots): >polarplot(1);

> polarplot([cos(t),sin(t),t=0..4*Pi],color=gold);

13

>polarplot({t,[2*cos(t),sin(t),t=-Pi..Pi]},t=-Pi..Pi,numpoints=50);

> # Vẽ lá Maple > S := t->100/(100+(t-Pi/2)^8): R := t -> S(t)*(2-sin(7*t)-cos(30*t)/2): > polarplot([R,t->t,-Pi/2..3/2*Pi],numpoints=2000,axes=NONE);

14

• Vẽ đồ thị của hàm số không liên tục

Khi vẽ đồ thị của một hoặc nhiều hàm số có điểm gián đoạn, ta phải thêm tùy chọn discont =true để đồ thị được vẽ chính xác hơn > g:=x->(x^2-1)/(x-2): > plot(g(x),x=-10..10,y=-5..15,discont=true,color=blue): • Vẽ đồ thị hàm ẩn

Có những hàm số mà chúng ta không có được công thức tường minh y=f(x), khi đó để vẽ được đồ thị của chúng, ta sẽ dùng hàm implicitplot Cú pháp: implicitplot([bt_1, bt_2,...], x=gt_dau..gt_cuoi, y=gt_dau..gt_cuoi, cac_tuy_chon); > implicitplot(x^2/9+y^2/4=1,x=-4..4,y=-2..2); > implicitplot(x^2-y^2-x^4=0,x=-1..1,y=-1..1); • Ứng dụng: vẽ đồ thị của hàm hữu tỷ

> f:=x->(x^2-1)/(x-2); > bt:=convert(f(x),parfrac); > tcx:= unapply(quo(numer(f(x)),denom(f(x)),x),x); > g1:=plot([f(x),tcx(x)],x=-10..10,y=-5..15,color=[blue,red],discont=true); > g2:=implicitplot(x=2,x=-10..10,y=-5..15,color=green);

15

> display({g1,g2}); • Vẽ từng điểm : plot([x(t),y(t),t=a..b]); • Vẽ trong tọa độ cực :

polarplot(L,options);

Ví dụ :> polarplot(2*sin(x),x=-Pi..Pi); > polarplot([cos(t),sin(t),t=0..4*Pi],color=gold);

>polarplot({t,[2*cos(t),sin(t),t=-Pi..Pi]},t=-Pi..Pi, numpoints=50);

hoặc plot([r(t),theta(t),t=range of t ],h,v,coords=polar)

Ví dụ : > plot(sin(x),x=0..2*Pi, coords=polar); > plot(sin,0..2*Pi, coords=bipolar);

> P:=polarplot([2*sin(3*t),2*sin(3*t+Pi)],t=0..2*Pi): > display(P); 3. Vẽ đồ thị trong không gian 3 chiều Oxyz • Vẽ đồ thị hàm thông thường

Cú pháp: plot3d(expr1, x=a..b, y=c..d); plot3d(f, a..b, c..d); plot3d([exprf,exprg,exprh], s=a..b, t=c..d); plot3d([f,g,h], a..b, c..d); > plot3d(x*exp(x^2),x=-2..2,y=-2..2,title="Do thi trong khong gian 3 chieu"): > plot3d(-exp(-abs(x*y)/10)*sin(x+y)-cos(x*y),x=-Pi..Pi,y=-Pi..Pi,grid=[51,51]): • Vẽ đồ thị hàm ẩn

Cú pháp: implicitplot3d(ham_can_ve, x=gt_dau..gt_cuoi, y=gt_dau..gt_cuoi,z=gt_dau..gt_cuoi, cac_tuy_chon); > implicitplot3d(x^2+y^2/4+z^2/9=1,x=-3..3,y=-3..3,z=-3..3): 4. Sự vận động của đồ thị Cú pháp: animate(ham_co_tham_so,x=gt_dau..gt_cuoi, tham_so = gt_dau..gt_cuoi); animate3d(ham_co_tham_so,x=gt_dau..gt_cuoi, y=gt_dau..gt_cuoi, tham_so =gt_dau..gt_cuoi); Ý nghĩa: hiển thị sự biến đổi, vận động của đồ thị khi tham số thay đổi trong khoảng cho trước > animate3d(cos(t*x)*sin(t*y),x=-Pi..Pi,y=-Pi..Pi,t=1..5): > animate(t*x^2,x=-3..3,t=-5..5):

16

CHƯƠNG 2. PHÉP TÍNH VI-TÍCH PHÂN

with(student); 1. Tính giới hạn

• Giới hạn, liên tục: Cú pháp: limit(ham_so,x=a); Limit(ham_so,x=a); value(%); Ý nghĩa: tính giới hạn của ham_so khi x tiến đến a. Kết quả được thể hiện dưới dạng công thức(lệnh Limit) hoặc kết quả cụ thể (lệnh limit) > f:=x->((sin(2*x))^2-sin(x)*sin(4*x))/x^4: > Limit(f(x),x=0); > value(%); > limit(f(x),x=0); Chú ý: muốn tính giới hạn của hàm số khi x tiến đến vô cực, ta chỉ việc thay a bằng từ khóa infinity. • Giới hạn kép : Limit(f,{x=a,y=b}); hay limit(f,{x=a,y=b});

> g := x->(2*x+3)/(7*x+5): > Limit(g(x),x=infinity): > value(%): > limit(g(x),x=infinity): Chú ý: muốn tính giới hạn của hàm số khi x tiến đến a từ bên trái hay bên phải, ta thêm vào một trong hai tùy chọn left hoặc right. > h := x->tan(x+Pi/2): > Limit(h(x),x=0,left)= value(%); > Limit(h(x),x=0,right)=limit(h(x),x=0,right); • Liên tục : + Kiểm tra hàm liên tục: iscont(expr, x = a .. b); iscont(expr, x = a .. b, 'closed'); iscont(expr, x = a .. b, 'open'); +Tìm điểm gián đoạn : discont(f, x ); Ví dụ : > discont(1/(sin(x)-1/2),x);

{ } + +

16 π

23 π _B1~ 2 π _Z3~

2. Tính đạo hàm • Tính đạo hàm cấp 1

Cú pháp: diff(ham_so, bien); Diff(ham_so, bien); value(%); Ý nghĩa: tính đạo hàm cấp 1 của ham_so theo bien. Kết quả được thể hiện dưới dạng công thức(lệnh Diff) hoặc kết quả cụ thể (lệnh diff) > f := x->x^2*sqrt(x^2+1): > Diff(f(x),x)= diff(f(x),x); > simplify(%);

17

• Tính đạo hàm cấp cao Cú pháp: diff(ham_so, bien, bien, bien, ...); Diff(ham_so, bien, bien, bien, ...); hoặc diff(ham_so, bien$k); Diff(ham_so, bien$k); Ý nghĩa: tính đạo hàm cấp k của ham_so theo bien. Kết quả được thể hiện dưới dạng công thức (lệnh Diff) hoặc kết quả cụ thể (lệnh diff) > g := x->5*x^3-3*x^2-2*x^(-3): > diff(g(x),x,x); > h := x -> x^4 + x*sin(x): > diff(h(x),x$2); >simplify(%); • Toán tử đạo hàm : D(f);

D[i](f); D[i](f)(x);

Cấp n : (D@@n)(f); Ví dụ: F:=n->diff(ln(x),x$n); F(100); • Đạo hàm hàm ẩn:

implicitdiff(f, y, x); implicitdiff(f, y, x1,...,xk) implicitdiff({f1,...,fm}, {y1,...,yn}, u, x); implicitdiff({f1,...,fm}, {y1,...,yn}, u, x1,...,xk ); implicitdiff({f1,...,fm}, {y1,...,yn}, {u1,...,ur}, x); implicitdiff({f1,...,fm}, {y1,...,yn}, {u1,...,ur}, x1,...,xk); Ví dụ : > f := x^2+y^3=1; −

23

xy2

> implicitdiff(f,x,y);

−32

y2

x

> implicitdiff(f,y,z); 0 > implicitdiff(f,y(x),x); −

23

xy2

> f := y^2-2*x*z = 1; := f = − y2 2 x z 1

> g := x^2-exp(x*z) = y; := g = − x2 e

( )x zy

> implicitdiff({f,g},{y,z},y,x); 2 x

+ y e( )x z

1

> implicitdiff({f,g},{y,z},{y,z},x);

18

⎪⎪⎪⎪⎨⎫

⎪⎪⎪⎪⎬, = ( )D y 2 x

+ y e( )x z

1 = ( )D z − − 2 y x y e

( )x zz z

x ( ) + y e( )x z

1

> implicitdiff({f,g},{y(x),z(x)},{y,z},x,notation=Diff); ⎧

⎪⎪⎪⎪⎨⎫

⎪⎪⎪⎪⎬, =

∂∂x y 2 x

+ y e( )x z

1 =

∂∂x z − − 2 y x y e

( )x zz z

x ( ) + y e( )x z

1

2. Tính tích phân

• Tính tích phân bất định Cú pháp: int(ham_so, bien); Int(ham_so, bien); value(%); Ý nghĩa: tính tích phân của ham_so theo bien. Kết quả được thể hiện dưới dạng công thức (lệnh Diff) hoặc kết quả cụ thể (lệnh diff) > h := x->(3*x^2+3*x+3)/(x^3-3*x+2): > t:=x->int(h(x),x): > t(x);

• Tính tích phân xác định

Cú pháp: int(ham_so, bien=a..b); Int(ham_so, bien=a..b); value(%); Ý nghĩa: tính tích phân của ham_so với bien đi từ a đến b. Kết quả được thể hiện dưới dạng công thức (lệnh Diff) hoặc kết quả cụ thể (lệnh diff) > f := x->1/(exp(x)+5): > Int(f(x),x=0..ln(2)) = value(%); > evalf(%): > g := x->cos(x)^2*cos(4*x): > int(g(x),x=0..Pi/2); Chú ý: ta có thể tính tích phân mở rộng khi a hay b có thể là vô cực (infinity) > t := x->x/(x^4+1); > int(t(x),x=0..infinity); • Tính tích phân 2 lớp :

Doubleint(g, x, y); Doubleint(g, x, y, Domain); Doubleint(g, x = a..b , y = c..d); Ví dụ : > with (student): > Doubleint(g(x),x,y); > Doubleint(h*g,x=1..n,y=2..4); > Doubleint(h*g,x,y,C); • Tính tích phân 3 lớp :

Tripleint(g, x, y, z); Tripleint(g, x, y, z, Domain); Tripleint(g, x = a..b, z = e..f, y = c..d); VD: > with (student):

19

> Tripleint(g(x,y,z),x,y,z); > Tripleint(h*g,x=1..n,y=2..4,z=a..b); > Tripleint(h*g,x,y,z,C); • Các phương pháp tích phân : + Công thức Newton-Leibniz: >f:=x->bt; >I1:=int(f(x),x); >F:=makeproc(I1,x); >T:=F(b)-F(a);

+ Đổi biến : changevar(s, f); changevar(s, f, u); changevar(t, g, v); Trong đó : s – dạng h(x) = g(u), f - Int(F(x), x = a...b), u – biến mới.

Ví dụ : > changevar(cos(x)+1=u, Int((cos(x)+1)^3*sin(x), x), u); + Từng phần: intparts(f, u); f - Int(u*dv, x)

u –thừa số tích phân sẽ được lấy vi phân

4. Một số ứng dụng • Bài toán tính diện tích hình thang cong

Bài 1. Tính diện tích hình thang cong giới hạn bởi hàm số f(x)=3*x-x^3 , trục Ox và hai đường thẳng x=0, x=1.Ta dùng int(abs(f(x)),x=a..b); > restart: > with(plots): Warning, the name changecoords has been redefined > with(plottools): Warning, the assigned name arrow now has a global binding > f := x->3*x-x^2; > g1:=plot(f(x),x=0..3,y=0..3,filled = true); > g2:=implicitplot(x=3,x=0..4,y=0..3,color=blue); > display({g1,g2}); > int(abs(f(x)),x=0..3); Bài 2. Tính diện tích hình phẳng giới hạn bởi hai đường cong f(x) = x^2 và g(x) = x Ta dùng : int(abs(f(x)-g(x)),x=a..b); > f := x->x^2: > g := x->sqrt(x): > a:=min(solve(f(x)=g(x),x)): > b:=max(solve(f(x)=g(x),x)): > plot([f(x),g(x)],x=a..b); > int(abs(f(x)-g(x)),x=a..b); Bài 3. Tính diện tích miền phẳng cho bởi tham số :x=x(t), y=y(t),a≤t≤b S:=int(abs(y(t)*diff(x(t),t)),t=a..b); hay S:=int(abs(x(t)*diff(y(t),t)),t=a..b); Bài 4. Tính diện tích miền phẳng cho bởi tọa độ cực::r=r(t),a≤t≤b S:=1/2*int(r(t)^2,,t=a..b);

20

Bài 5. Tính độ dài đường cong hàm số f(x): + Cho bởi y=f(x): L:= int(sqrt(1+diff(f(x),x)^2),x=a..b); + Cho phương trình tham số x=x(t); y=y(t): L:= int(sqrt(diff(x(t),t)^2 + diff(y(t),t)^2),t=a..b); + Cho bởi tọa độ cực : r = r(t);a ≤ t≤b: L:= int(sqrt(r(t)^2 + diff(r(t),t)^2),t=a..b); Bài 6. Tính thể tích vật thể tròn xoay quay quanh trục Ox . V := int(Pi*f(x)^2, x=a..b); Bài 7. Tính diện tích mặt tròn xoay của hàm quay quanh trục Ox . S := int(2*Pi*abs(f(x))*sqrt(1+ diff(f(x),x)^2), x=a..b); • Bài toán khảo sát hàm số

Khảo sát và vẽ đồ thị hàm số f : Ví dụ 1: > restart; # Khao sat ham dang y=ax^3+bx^2+cx+d a:=readstat(`a=`); b:=readstat(`b=`); c:=readstat(`c=`); d:=readstat(`d=`); f:=unapply(a*x^3+b*x^2+c*x+d,x); #Mien xac dinh TXD=real ; #Chieu bien thien: print(`Ham tang tren `); solve(diff(f(x),x)>0,{x}); #Giam : print(`Ham giam tren`); solve(diff(f(x),x)<0,{x}); L1:=[solve(diff(f(x),x$2)=0,x)]: g:=op(L1): g1:=f(g): #Cuc tri if is(b^2-3*a*c>0) then L:=[solve(diff(f(x),x)=0,x)]: if a>0 then printf("Cuc dai:(%a,%a)\n",simplify(min(op(L))),simplify(f(min(op(L)))) ); printf("Cuc tieu:(%a,%a)\n",simplify(max(op(L))),simplify(f(max(op(L)))) ); else printf("Cuc tieu:(%a,%a)\n",simplify(min(op(L))),simplify(f(min(op(L)))) ); printf("Cuc dai:(%a,%a)\n",simplify(max(op(L))),simplify(f(max(op(L)))) ); end if;fi; print(`Ham loi tren`); solve(diff(f(x),x$2)>0,{x}); print(`Ham lom tren`); solve(diff(f(x),x$2)<0,{x});

21

#Do thi: print(` Do thi :`); plot(f(x), x=g-5..g+5,y=g1-5..g1+5); Ví dụ 2:> restart; # Khao sat ham huu ty dang y=(ax^2+bx+c)/(dx+e) a:=readstat(`a=`); b:=readstat(`b=`); c:=readstat(`c=`); d:=readstat(`d=`); e:=readstat(`e=`); f:=unapply((a*x^2+b*x+c)/(d*x+e),x); #Mien xac dinh real minus {solve(d*x+e=0,x)}; #Tiem can: g:= `if`(degree(denom(normal(f(x))))=0,0,solve(denom(normal(f(x))),x)): print(`Tiem can dung :`); if degree(denom(normal(f(x))))=0 then ; else printf("\t \t x= %a",op([g])); fi; print(`Tiem can Xien :`); A2:=quo(numer(f(x)),denom(f(x)),x): g1:=eval(A2,x=g): printf("\t \t y= %a",A2); #Chieu bien thien: #Tang : print(`Ham tang tren `); solve(diff(f(x),x)>0,{x}); #Giam : print(`Ham giam tren`); solve(diff(f(x),x)<0,{x}); #Cuc tri L:=[solve(diff(f(x),x)=0,x)]: if L<>[]and is(op(1,L),real) then if a*d>0 then printf("Cuc dai:(%a,%a)\n",simplify(min(op(L))),simplify(f(min(op(L))))); printf("Cuc tieu:(%a,%a)\n",simplify(max(op(L))),simplify(f(max(op(L))))); else printf("Cuc tieu:(%a,%a)\n",simplify(min(op(L))),simplify(f(min(op(L))))); printf("Cuc dai:(%a,%a)\n",simplify(max(op(L))),simplify(f(max(op(L))))); end if; fi; #Do thi: print(` Do thi :`); plot([f(x),A2], x=g-5..g+5,y=g1-5..g1+5);

22

• Tính tổng tích phân + Tính tổng : leftsum(f(x), x=a..b); hay leftsum(f(x), x=a..b, n); rightsum(f(x), x=a..b); hay rightsum(f(x), x=a..b, n); middlesum(f(x), x=a..b); hay middlesum(f(x), x=a..b, n); Ví dụ : > with(student): > leftsum(x^k*ln(x), x=1..3);

12

⎝⎜⎜⎜

⎠⎟⎟⎟∑

= i 0

3⎛⎝⎜⎜

⎞⎠⎟⎟ + 1 1

2 ik

⎛⎝⎜⎜

⎞⎠⎟⎟ln + 1 1

2 i

+ Vẽ các hình chữ nhật xấp xỉ: leftbox(f(x), x=a..b, <plot options>); leftbox(f(x), x=a..b, n, 'shading'=<color>, <plot options>); rightbox(f(x), x=a..b, <plot options>); rightbox(f(x), x=a..b, n, 'shading'=<color>, <plot options>); middlebox(f(x), x=a..b, <plot options>); middlebox(f(x), x=a..b, n, 'shading'=<color>, <plot options>);

Ví dụ : > with(student):leftsum(x^2,x=0..1,n); limit(A,n=infinity); > middlebox(x^4*ln(x), x=2..4, color=YELLOW);

> middlebox(sin(x)*x+sin(x), x=0..2*Pi, 5, shading=BLUE); > middlebox(sin(x)*x+sin(x), x=0..2*Pi, 5, color=GREEN); +Tính xấp xỉ bằng phương pháp Simpson: ApproximateInt(f(x), x = a..b, method = simpson, opts); ApproximateInt(f(x), a..b, method = simpson, opts); ApproximateInt(Int(f(x), x = a..b), method = simpson, opts); Ví dụ: > polynomial := interp([x[0], (x[0]+x[1])/2, x[1]], [f(0), f(1/2), f(1)], z): >integrated := int(polynomial, z=x[0]..x[1]): >factor(integrated); −

16 ( ) − x 0 x 1

⎛⎝⎜⎜

⎞⎠⎟⎟ + + ( )f 1 ( )f 0 4 ⎛

⎝⎜⎜

⎞⎠⎟⎟f

12

> with(Student[Calculus1]): >ApproximateInt(sin(x), x=0..5, method = simpson); >ApproximateInt(x*(x - 2)*(x - 3), x=0..5, method = simpson, output = plot); >ApproximateInt(tan(x) - 2*x, x=-1..1, method = simpson, output = plot, partition = 50);

23

>ApproximateInt(ln(x), 1..100, method = simpson, output = animation); + Tính xấp xỉ bằng phương pháp hình thang: ApproximateInt(f(x), x = a..b, method = trapezoid, opts); ApproximateInt(f(x), a..b, method = trapezoid, opts); ApproximateInt(Int(f(x), x = a..b), method = trapezoid, opts); Ví dụ :> polynomial := interp([x[0], x[1]], [f(0), f(1)], z):

>integrated := int(polynomial, z=x[0]..x[1]): >factor(integrated);

−12 ( )− + x 1 x 0 ( ) + ( )f 0 ( )f 1

> with(Student[Calculus1]): >ApproximateInt(sin(x), x=0..5, method = trapezoid); >ApproximateInt(x*(x - 2)*(x - 3), x=0..5, method = trapezoid, output = plot); >ApproximateInt(tan(x) - 2*x, x=-1..1, method = trapezoid, output = plot, partition = 50); >ApproximateInt(ln(x), 1..100, method = trapezoid, output = animation); + Phương pháp Newton: ApproximateInt(f(x), x = a..b, method = newtoncotes[N], opts); ApproximateInt(f(x), a..b, method = newtoncotes[N], opts); ApproximateInt(Int(f(x), x = a..b), method = newtoncotes[N], opts); Ví dụ: > with(Student[Calculus1]): > ApproximateInt(x*(x - 2)*(x - 3), 0..5, method = simpson, output = plot);

> ApproximateInt(tan(x) - 2*x, x=-1..1, method = simpson, output = plot, partition = 50);

24

> ApproximateInt(ln(x), x=1..100, method = simpson, output = animation);

• Tính giá trị lớn nhất, nhỏ nhất của f(x) trên [a,b].

+ Nhỏ nhất :minimize(expr, opt1, opt2, ..., optn);

Ví dụ: > minimize(cos(x), x=1..3); > minimize(x^2-3*x+y^2+3*y+3, location);

,-32 { }⎡

⎣⎢⎢

⎤⎦⎥⎥,{ }, = x 3

2 = y -32

-32

+ Lớn nhất : maximize(expr, opt1, opt2, ..., optn);

Ví dụ : > maximize(x^2-3*x+y^2+3*y+3, x=2..4, y=-4..-2, location); ,11 { }[ ],{ }, = y -4 = x 4 11

Chú ý : option : + x=a..b, y=c..d , nếu trên(-∞;+∞) thì bỏ qua. + location, hay location=true • Cực trị có điều kiện:

extrema(expr, constraints); extrema(expr, constraints, vars); extrema(expr, constraints, vars, 's');

25

Ví dụ: > extrema( a*x^2+b*x+c,{},x ); > extrema( a*x*y*z, x^2+y^2+z^2=1, {x,y,z} ); > f := (x^2+y^2)^(1/2)-z; g1 := x^2+y^2-16; g2 := x+y+z = 10; > extrema(f,{g1,g2},{x,y,z},'s'); >s; • Chuỗi :

Taylor : taylor( expr, eq/nm, n );

Taylor nhiều biến: mtaylor(f, v); hay mtaylor(f, v, n);

Chuỗi lũy thừa : series(expr, eqn); hay series(expr, eqn, n);

Ví dụ : > series(x/(1-x-x^2), x=0); > taylor( exp(x), x=0, 4 ); > mtaylor(sin(x^2+y^2), [x=1,y], 3); > mtaylor(sin(x^2+y^2), [x,y], 8); > taylor( 1/x, x=1, 10 ); 1 ( ) − x 1 ( ) − x 1 2 ( ) − x 1 3 ( ) − x 1 4 ( ) − x 1 5 − + − + −

( ) − x 1 6 ( ) − x 1 7 ( ) − x 1 8 ( ) − x 1 9 + − + − +

( )O ( ) − x 1 10

> convert(%,polynom); 2 x ( ) − x 1 2 ( ) − x 1 3 ( ) − x 1 4 ( ) − x 1 5 − + − + −

( ) − x 1 6 ( ) − x 1 7 ( ) − x 1 8 ( ) − x 1 9 + − + −

26

CHƯƠNG 3. ĐẠI SỐ TUYỀN TÍNH VÀ HÌNH HỌC GIẢI TÍCH A. HÌNH HỌC GIẢI TÍCH: with(geometry); hay with(geom3d); 1. Các tính toán trong hình học phẳng: • Khởi tạo các hàm tính toán trong hình học phẳng: > with(geometry): • Các hàm trên đối tượng điểm

- Định nghĩa điểm: point(ten_diem, hoanh_do, tung_do); - Hiển thị tọa độ của một điểm: coordinates(ten_diem); - Kiểm tra 3 điểm thẳng hàng: AreCollinear(P, Q, R, cond); Ví dụ : > with(geometry): > point(A, 2, 8), point(M, u, v); ,A M > coordinates(A); [ ],2 8 > coordinates(M); [ ],u v - Xác định trung điểm đoạn thẳng tạo bởi hai điểm: midpoint(ten_trung_diem, diem_1,diem_2); > point(A,2,3): > point(B,-3,1): > coordinates(A); > coordinates(B); > midpoint(M,A,B); > coordinates(M); • Các hàm trên đối tượng đường thẳng

- Định nghĩa đường thẳng qua hai điểm: line(ten_dt, [diem_dau, diem_cuoi],[x,y]); - Kiểm tra 3 đường thẳng đồng qui: AreConcurrent(l1, l2, l3, cond); - Định nghĩa đường thẳng có phương trình cho trước: line(ten_dt,pt_duong_thang,[x,y]); -Tìm đường thẳng qua 1 điểm // đường cho trước : ParallelLine(lp, P, l); > with(geometry): >point(P, 2 , 3), line(l,x + y =1,[x,y]);

,P l

> ParallelLine(lp, P, l); lp

> detail(lp); name of the object: lp

form of the object: line2dequation of the line: -5+x+y = 0

27

- Hệ số góc của đường thẳng : slope(l); slope(A, B) -Tìm giao điểm giữa hai đường thẳng: intersection(ten_giao_diem, dt_1, dt_2); -Tìm góc giữa hai đường thẳng: FindAngle(dt_1, dt_2); - Tính khoảng cách từ một điểm tới một đường thẳng: distance(diem, duong_thang/diem); Ví dụ : > point(A,a,b), point(B,c,d): > distance(A,B); + ( ) − a c 2 ( ) − b d 2 > assume(m<>0): > line(l,m*x+n*y=w,[x,y]): > distance(A, l);

+ − m~ a n b w + m~2 n2

- Xác định hình chiếu của một điểm lên trên một đường thẳng: projection(ten_hinh_chieu, diem, duong_thang); - Xác định điểm đối xứng của một điểm qua một đường thẳng: reflection(ten_diem_dx, diem, duong_thang); Ví dụ:> line(d1,[A,B],[x,y]); > line(d2,y=x+1,[x,y]); > detail(d1); > detail(d2); > intersection(K,d1,d2); > coordinates(K); > FindAngle(d1,d2); > distance(A,d1); > distance(B,d2); > projection(N,B,d2); > coordinates(N); > reflection(B1,B,d2); > coordinates(B1); - Phương trình của đối tượng hình học : Equations(obj,[x,y]); Ví dụ: > point(A,0,0):point(B,1,1): > line(l,[A,B]); l > Equation(l,[x,y]); = − + x y 0 - Vẽ các đường : draw(obj,...); draw([obj_1,...,obj_n],...); Ví dụ : > with(geometry): # Định nghĩa tam gíac T

28

> triangle(T,[point(A2,0,0),point(A1,2,4),point(A3,7,0)]): # Vòng tròn ngoại tiếp của A1A2A3 > circumcircle(C,T,'centername'=OO): # Tìm đường cao của T > altitude(A2A22,A2,T,A22): >altitude(A3A33,A3,T,A33): >altitude(A1A11,A1,T,A11): # Tìm trực tâm và trọng tâm của T > orthocenter(H,T): centroid(G,T): # Tìm trung tuyến của T > median(A1M1,A1,T,M1): >median(A2M2,A2,T,M2): >median(A3M3,A3,T,M3): > dsegment(dsg1,OO,H): dsegment(dsg2,H,G): >dsegment(OM1,OO,M1): dsegment(OM2,OO,M2): >dsegment(OM3,OO,M3): >triangle(T1,[M1,M2,M3]): # kiểm tra H, OO, G đồng qui > AreCollinear(OO,H,G);

true

# kiểm tra khoảng cách giữa H và G bằng 2 lần khoảng cách giữa G và OO > testeq(distance(H,G) = 2*distance(G,OO)); draw([C(color='COLOR'(RGB,1.00000000,1.00000000,.8000000000),filled=true),T(color=blue),T1,A3M3,A2M2,A1M1,A2A22,A3A33,A1A11, dsg1(style=LINE,color=green,thickness=3),dsg2(thickness=3,color=green),OM1,OM2,OM3],axes=NONE);

FAIL

• Các hàm trên đối tượng đường tròn

- Định nghĩa đường tròn qua 3 điểm: circle((ten_duong_tron,[diem1, diem2, diem3],[x,y]); - Định nghĩa đường tròn có tâm và bán kính cho trước: circle(ten_duong_tron,[tam, bk],[x,y]); - Xác định bán kính đường tròn đã định nghĩa:

29

radius(tenduongtron); - Xác định tọa độ tâm đường tròn đã định nghĩa: coordinates(center(tenduongtron)); - Xác định diện tích đường tròn đã định nghĩa: area(tenduongtron); - Tìm tiếp tuyến với đường tròn tại một điểm: tangentpc(tentieptuyen,diem,tenduongtron); - Tìm tiếp tuyến với đường tròn qua một điểm: tangentline(diem,tenduongtron,[tentieptuyen1, tentieptuyen2]); Ví dụ :> point(C,0,0): > circle(c,[A,B,C],[x,y]): > detail(c): > radius(c): > coordinates(center(c)): > area(c): > circle(c1,[C,5],[x,y]): > detail(c1): > tangentpc(t1,C,c): > detail(t1): > Equation(t1): > TangentLine(t2,point(D,4,5),c,[l1,l2]): • Các hàm trên đối tượng tam giác

- Định nghĩa tam giác: triangle(ten_tam_giac,[dinh1,dinh2,dinh3],[x,y]); - Xác định diện tích tam giác: area(ten_tam_giac); - Xác định đường cao tam giác ứng với một đỉnh: altitude(ten_duong_cao,dinh,ten_tam_giac); - Xác định đường trung tuyến tam giác ứng với một đỉnh: median(tenduongtrungtuyen,dinh,tentamgiac); - Xác định đường phân giác tam giác ứng với một đỉnh: bisector(ten_duong_phan_giac, dinh, ten_tam_giac); - Xác định đường phân giác tam giác ứng với một đỉnh: ExternalBisector(ten_duong_phan_giac,dinh,tentamgiac); - Xác định trọng tâm tam giác: centroid(ten_trong_tam,ten_tam_giac); Ví dụ : > with(geometry): > ps := [point(A,0,0),point(B,2,0),point(C,1,3),point(F,1,6)]; := ps [ ], , ,A B C F > centroid(G,ps); G > form(G); point2d > coordinates(G);

30

⎡⎣⎢⎢

⎤⎦⎥⎥,1 9

4

> detail(G);

name of the object: Gform of the object: point2dcoordinates of the point: [1, 9/4]

- Xác định trực tâm tam giác: orthorcenter(ten_truc_tam, tentamgiac); - Xác định đường tròn nội tiếp tam giác: incircle(ten_duong_tron_noi_tiep,tentamgiac); Ví dụ :> triangle(ABC,[A,B,C],[x,y]): > detail(ABC): > area(ABC): > altitude(ha,A,ABC): > median(BM,B,ABC): > detail(BM): > bisector(Ct,C,ABC): > detail(Ct): > ExternalBisector(Cx,C,ABC): > centroid(G,ABC): > coordinates(G): > orthocenter(H,ABC): > coordinates(H): > incircle(cc,ABC): > detail(cc):

• Đường conic : + Hình nón : cone(c, ...); cone(c, r, ...); cone(c, r, h, ...); Ví dụ : > with(plottools):icecream := cone([0,0,-1],0.7,color=gold), sphere([0,0,0.1],0.6,color=brown): >plots[disply](icecream, scaling=constrained, style=patch); + Đường conic: conic(p, [A,B,C,E,F], n ); conic(p, [dir,fou, ecc], n ); conic(p, eqn, n ); Ví dụ : > with(geometry): # define conic c1 from its algebraic representation: > _EnvHorizontalName := 'x': _EnvVerticalName := 'y': >conic(c1,x^2-2*x*y+y^2-6*x-10*y+9=0,[x,y]): >form(c1); # parabola parabola2d > detail(c1);

31name of the object: c1

form of the object: parabola2dvertex: [0, 1]focus: [1, 2]directrix: 1/2*2^(1/2)*x+1/2*2^(1/2)*y+1/2*2^(1/2) = 0equation of the parabola: x^2-2*x*y+y^2-6*x-10*y+9 = 0

> line(l,x=-2,[x,y]): point(f,1,0): e := 1/2: >conic(c2,[l,f,e],[c,d]): >form(c2); # ellipse ellipse2d > point(A,1,2/3*sqrt(10)), point(B,2,-2/3*sqrt(13)), >point(C,3,2*sqrt(2)), point(E,4,-10/3), point(F,5,2/3*sqrt(34)): >conic(c3,[A,B,C,E,F],[t1,t2]): >form(c3); # hyperbola hyperbola2d > conic(c4,x^2-6*x+13+y^2-4*y-9,[x,y]): >form(c4); # circle circle2d > conic(c5,x^2+y^2-4*x-10*y+29 = 0,[x,y]): geometry/conic/classify: degenerate case: single point # degenerate case of an ellipse > detail(c5); name of the object: c5

form of the object: point2dcoordinates of the point: [2, 5]

> conic(c6,x^2-2*x*y+2*x+y^2-2*y+1,[x,y]): geometry/conic/classify: "degenerate case: a double line" # degenerate case of a parabola > detail(c6); name of the object: c6

form of the object: line2dequation of the line: -1/2*2^(1/2)*x+1/2*2^(1/2)*y = 0

> conic(c7,x^2-2*x*y-4*x+y^2+4*y-77,[x,y]); geometry/conic/classify: "degenerate case: two parallel lines" [ ],Line_1_c7 Line_2_c7 # degenerate case of a parabola > detail(c7);

32name of the object: Line_1_c7[

form of the object: line2dequation of the line: -1/2*2^(1/2)*x+1/2*2^(1/2)*y+11/2*2^(1/2) = 0 name of \, the object: Line_2_c7form of the object: line2dequation of the line: -1/2*2^(1/2)*x+1/2*2^(1/2)*y-7/2*2^(1/2) = 0 ]

> conic(c8,11*x^2+24*x*y+4*y^2+26*x+32*y+15=0,[x,y]); geometry/conic/classify: "degenerate case: two intersecting lines" [ ],Line_1_c8 Line_2_c8 # the degenerate case of a hyperbola > detail(c8);

name of the object: Line_1_c8[form of the object: line2dequation of the line: x+2*y+1 = 0 name of the object: Line_2_c8,form of the object: line2dequation of the line: -11/5*x-2/5*y-3 = 0 ]

+ Parabol: parabola(p, [A,B,C,E,F], n ); parabola(p, ['focus'=fou, 'vertex'=ver], n ); parabola(p, ['directrix'=dir, 'focus'=fo, n ); parabola(p, eqn, n ) Ví dụ :> with(geometry): #define parabola p1 from its algebraic representation: > parabola(p1,y^2+12*x-6*y+33=0,[x,y]): > vertex(p1), coordinates(vertex(p1));

,vertex_p1 [ ],-2 3 > focus(p1), coordinates(focus(p1));

,focus_p1 [ ],-5 3 > directrix(p1), Equation(directrix(p1));

,directrix_p1 = − x 1 0 +Elip: ellipse(p, [A,B,C,E,F], n); ellipse(p, ['directrix'=dir,'focus'=fou, 'eccentricity'=ecc], n); ellipse(p, ['foci'=foi, 'MajorAxis'=lma], n); ellipse(p, ['foci'=foi, 'MinorAxis'=lmi], n); ellipse(p, ['foci'=foi, 'distance'=dis], n); ellipse(p, ['MajorAxis'=ep1, 'MinorAxis'=ep2], n); ellipse(p, eqn, n ); > _EnvHorizontalName := 'x': _EnvVerticalName := 'y': ellipse(e1,2*x^2+y^2-4*x+4*y=0): center(e1), coordinates(center(e1)); ,center_e1 [ ],1 -2 > foci(e1), map(coordinates,foci(e1)); ,[ ],foci_1_e1 foci_2_e1 [ ],[ ],1 − − 2 3 [ ],1 − + 2 3

33

> MajorAxis(e1), MinorAxis(e1); ,2 6 2 3 +Hypebol : hyperbola(p, [A,B,C,E,F], n ); hyperbola(p, ['directrix'=dir,'focus'=fou, 'eccentricity'=ecc, n ); hyperbola(p, ['foci'=foi,'vertices'=ver,n ); hyperbola(p, ['foci'=foi,'distancev'=disv,n ); hyperbola(p, ['vertices'=ver,'distancef'=disf,n ); hyperbola(p, eqn, n ); > hyperbola(h1,9*y^2-4*x^2=36,[x,y]): center(h1), coordinates(center(h1));

,center_h1 [ ],0 0 > foci(h1), map(coordinates,foci(h1));

,[ ],foci_1_h1 foci_2_h1 [ ],[ ],0 − 13 [ ],0 13 > vertices(h1), map(coordinates,vertices(h1));

,[ ],vertex_1_h1 vertex_2_h1 [ ],[ ],0 -2 [ ],0 2 > asymptotes(h1), map(Equation,asymptotes(h1));

,[ ],asymptote_1_h1 asymptote_2_h1 ⎡⎣⎢⎢

⎤⎦⎥⎥, = + y

23

x 0 = − y23

x 0

2. Các tính toán trong hình học không gian: Khởi tạo > with(geom3d); Warning, these names have been rebound: AreCollinear, AreConcurrent, AreConjugate,AreParallel, ArePerpendicular, DefinedAs, Equation, FindAngle, GlideReflection, IsEquilateral,IsRightTriangle, OnSegment, RadicalCenter, altitude, area, center, centroid, coordinates, detail,distance, draw, dsegment, form, homology, homothety, intersection, inversion, line, midpoint,point, projection, radius, randpoint, reflection, rotation, segment, sides, translation, triangle,vertices Warning, the assigned name polar now has a global binding • Các hàm trên đối tượng điểm

- Định nghĩa điểm: point(ten_diem, hoanh_do, tung_do,cao_do); - Hiển thị tọa độ của một điểm: coordinates(ten_diem); - Xác định trung điểm đoạn thẳng tạo bởi hai điểm: midpoint(ten_trung_diem, diem_1,diem_2); > point(A,2,3,1): > point(B,-3,1,3): > coordinates(A): > coordinates(B): > midpoint(M,A,B): > coordinates(M): • Các hàm trên đối tượng đường thẳng

- Định nghĩa đường thẳng qua hai điểm: line(ten_dt, [diem_dau, diem_cuoi]); - Định nghĩa đường thẳng có phương trình tham so cho trước: line(ten_dt,pt_tham_so_duong_thang,ten_tham_so);

34

-Tìm giao điểm giữa hai đường thẳng: intersection(ten_giao_diem, dt_1, dt_2); -Tìm góc giữa hai đường thẳng: FindAngle(dt_1, dt_2); Ví dụ : > assume(l<>0,lp<>0): > plane(p1,l*x+m*y+n*z+p=0,[x,y,z]): > line(l1,[point(A,x1,y1,z1),[lp,mp,np]]): > FindAngle(l1,p1);

⎝⎜⎜⎜

⎠⎟⎟⎟

arcsin + + l~ lp~ m mp n np( ) + + l~2 m2 n2 ( ) + + lp~2 mp2 np2

- Tính khoảng cách từ một điểm tới một đường thẳng: distance(diem, duong_thang/diem); - Xác định hình chiếu của một điểm lên trên một đường thẳng: projection(ten_hinh_chieu, diem, duong_thang); - Xác định điểm đối xứng của một điểm qua một đường thẳng: reflection(ten_diem_dx, diem, duong_thang); Ví dụ :> line(d1,[A,B]): > line(d2,[2+2*t,1-4*t,3*t],t): > detail(d1): Warning, assume that the parameter in the parametric equations is _t Warning, assuming that the names of the axes are _x, _y, and _z > detail(d2): Warning, assuming that the names of the axes are _x, _y, and _z > intersection(K,d1,d2): intersection: "the given objects do not intersect" > FindAngle(d1,d2): > distance(A,d1): > distance(B,d2): > projection(N,B,d2): > coordinates(N): > reflection(B1,B,d2): > coordinates(B1): • Các hàm trên đối tượng mặt phẳng

- Định nghĩa mặt phẳng qua 3 điểm: plane(ten_mat_phang,[diem1, diem2, diem3],[x,y,z]); - Định nghĩa mặt phẳng bằng phương trình tổng quát: plane(ten_mat_phang,pt_tongquat,[x,y,z]); - Xác định giao tuyến của hai mặt phẳng: line(ten_giao_tuyen,[mp1,mp2]); - Xác định khoảng cách giữa một điểm và một mặt phẳng: distance(ten_diem,ten_mat_phang); - Xác định góc giữa hai mặt phẳng: FindAngle(ten_mp_1, ten_mp_2); > point(C,0,0,0): > plane(p,[A,B,C],[x,y,z]):

35

> detail(p): > plane(p1,2*x-3*y+z=0, [x,y,z]): > line(gt,[p,p1]): > detail(gt): Warning, assume that the parameter in the parametric equations is _t > distance(A,p1): >FindAngle(p,p1): - Tìm đường/mặt song song : parallel(w, u, v); w – Tên được tạo u – điểm hay đường thẳng v – đường thẳng hay mặt phẳng; v là mặt phẳng nếu u là điểm Ví dụ : > with(geom3d): > point(A,0,0,0),point(B,1,0,0),point(C,0,1,0),point(F,0,0,1): > plane(p, x + y + z = 1,[x,y,z]), line(A_B,[A, B]), line(C_F, [C, F]): >parallel(p1, A, p): >detail(p1);

name of the object: p1form of the object: plane3dequation of the plane: x+y+z = 0

- Kiểm tra 2 đường/ mặt phẳng song song : AreParallel(dseg1, dseg2, cond); AreParallel(l1, l2, cond); AreParallel(l1, p1, cond); AreParallel(p1, p2, cond); Ví dụ: > with(geom3d): # Define two planes pp1, pp2 > assume(l1<>0, l2<>0, l1<>l2, t<>0); > plane(pp1,l1*x+p1*y+n1*z+p1,[x,y,z]); > plane(pp2,l2*x+p2*y+n2*z+p2,[x,y,z]); #Find the condition that makes pp1 and pp2 parallel to each other > AreParallel(pp1,pp2,'cond'); FAIL

> cond; ( )( ) = − p1 n2 n1 p2 0 &and ( ) = − n1 l2~ l1~ n2 0

&and ( ) = − l1~ p2 p1 l2~ 0 > additionally(op(cond)); AreParallel(pp1,pp2); true

- Kiểm tra 2 đường/ mặt phẳng thẳng góc : ArePerpendicular(dseg1, dseg2, cond); ArePerpendicular(l1, l2, cond); ArePerpendicular(l1, p1, cond); ArePerpendicular(p1, p2, cond); ArePerpendicular(s1, s2, cond); Ví dụ : > assume(a,real,a<>0): sphere(s1,x^2+y^2+z^2=a^2,[x,y,z]): sphere(s2,x^2+y^2+z^2-2*a*y-2*a*z+a^2=0,[x,y,z]):

36

sphere(s3,x^2+y^2+z^2-2*a*x-2*a*z+a^2=0,[x,y,z]): sphere(s4,x^2+y^2+z^2-2*a*x-2*a*y+a^2=0,[x,y,z]): for i to 3 do for j from i+1 to 4 do if ArePerpendicular(s||i,s||j) then print(i,j,true) else print(i,j,false) end if; end do; end do;

, ,1 2 true , ,1 3 true , ,1 4 true , ,2 3 true , ,2 4 true , ,3 4 true

- Mặt cầu : sphere(s, [A, B, C, D], n, 'centername'=m); sphere(s, [A, B], n, 'centername'=m); sphere(s, [A, rad], n, 'centername'=m); sphere(s, [A, p], n, 'centername'=m); sphere(s, eqn, n, 'centername'=m); Ví dụ :> with(geom3d): > _EnvXName := x: _EnvYName := y: _EnvZName := z: # Tìm mặt cầu qua 3 điểm A, B, C có tọa độ [a,0,0], [0,b,0], [0,0,c]. > assume(a,real,a<>0,b,real,b<>0,c,real,c<>0): >point(o,0,0,0), point(A,a,0,0), point(B,0,b,0), point(C,0,0,c): >sphere(s,[o,A,B,C]); s

> Equation(s); = + + − − − x 2 y 2 z 2 a~ x b~ y c~ z 0

B. ĐẠI SỐ TUYẾN TÍNH:

with(linalg); hay with(LinearAlgbra);

1/ Tạo vector, ma trận : • Vector:

Hàng : vector([x1, ..., xn]); hay vector(n, [x1, ..., xn]); vector(n); hay vector(n, f); Cột : Vector([x1, ..., xn]); hay Vector(n, [x1, ..., xn]); Vector(n); hay Vector(n, f); • Ma trận :

matrix(r, c, [day]); hay matrix([[day1],….[dayn]]);

37

matrix(m,n,f); Matrix(n); Matrix(n,m);

Matrix(n,m,a); Matrix(n,m,x); Ma trận chéo : diag(Danhsach); Ma trận đơn vị : Matrix(n,shape=identity); • Tạo vector, ma trận con từ ma trận :

Hàng : row(A,i) ; row(A,i..j) ; subvector(A,[chi so hang],j) ; Cột : col(A,i); col(A,i..j); subvector(A,i,[chi so cot]); Ma trận: submatrix(A,[chi so hang],[chi so cot]); 2/ Thao tác trên ma trận : • Đổi chỗ 2 hàng hay 2 cột : swaprow(A,I,j); swapcol(A,I,j); • Cộng vào 1 hàng(cột) với 1 hàng(cột) khác sau khi nhân với k: addrow(A,i,j,k); với j:=j+i*k addcol(A,i,j,k); với j:=j+i*k

• Nhân 1 hàng(cột) với 1 biểu thức: mulrow(A,i,bt); mulcol(A,i,bt);

• Xoá hàng, cột : delrows(A,i..i); delrows(A,i..j); delcols(A,i..i); delcols(A,i..j); • Xoá hàng i, cột j của ma trận : minor(A,i,j); • Ghép nối vector, ma trận : Ngang : augment(A,B); concat(A,B); Dọc : stackmatrix(A,B); • Chiều vector, cấp ma trận : vectdim(V); rowdim(A); coldim(A); • Mở rộng ma trận : extend(A,h,c,bt); • Chuyển vị ma trận : traspose(A);

3/ Các phép toán trên ma trận : • Phép toán tuyến tính :

matadd(A,B,m,n); cho mA+nB • Nhân vô hướng, có hướng, nhân ma trận:

vô hướng : multiply(X,Y); dotprod(X,Y); có hướng : crossprod(X,Y); ma trận :multiply(A,B);

• Phép toán tổng quát : evalm(bt); cộng : bt=A+B nhân : bt= số*A hay bt=A&*B lũy thừa : bt=A^n

4.Tìm cơ sở :

38

• cơ sở : basis({danh sách}); cho cơ sở trong danh sách basis(A,rowspace); hay rowspace(A); cho cơ sở của hệ vector hàng của ma trận A basis(A,colspace); hay colspace(A); cho cơ sở của hệ vector cột của ma trận A

• cơ sở trực chuẩn: GramSchmidt( [các vector ],normalized);

5. Một số toán tử : • Hạng : rank(A); • Matrận phụ hợp : adjoint(A); chú ý : adjoint(A)*A = det(A)*I • Định thức : det(A); • Ma trận nghịch đảo : inverse(A); hay evalm(A^(-1));

6. Đa thức đặc trưng : • Matrận đặc trưng : charmat(A,lambda); • Đa thức đặc trưng : charpoly(A,lambda); • Giá trị riêng của ma trận : eigenvalues(A); • Vector riêng của ma trận : eigenvectors(A);

7. Hệ phương trình tuyến tính : • Phương pháp khử Gauss và Gauss-jordan:

gausselim( A); hay gausselim( A,r); r là hạng gaussjord( A); hay gaussjord( A,r);

• Giải hệ PT tuyến tính : AX =B solve({hệ },{ẩn}); linsolve(A,B); nếu B= matrix(n); thì hệ dạng AX=0, Hệ nghiệm cơ bản : kernel(A);

• Chuyển đổi hệ và ma trận : genmatrix( {hệ},[ dãy biến]); cho ma trận hệ số.

genmatrix( {hệ},[ dãy biến], B); cho ma trận hệ số. in b dùng print(B); genmatrix( {hệ},[ dãy biến], flag); cho ma trận hệ số mở rộng. geneqs( A,[ dãy biến],B); cho hệ phương trình AX=B. geneqs( A,[ dãy biến]); cho hệ phương trình AX=0

8. Một số ma trận đặc biệt: • Ma trận khối Jordan : JordanBlockMatrix(K, d, outopts);

Ví dụ: > JordanBlockMatrix([[x,3],[5,1],[y,2]]); • Tìm dạng Jordan của ma trận: jordan(A); jordan(A, 'P') • Ma trận Hilbert : HilbertMatrix(r, c, s, cpt, outopts); • Ma trận Vandermonde :VandermondeMatrix(V, r, c, cpt, outopts); • Ma trận Toeplitz : ToeplitzMatrix(V, r, sym, cpt, outopts);

Ví dụ :> with(LinearAlgebra): >ToeplitzMatrix( [a,b,c], compact );

⎡⎣⎢⎢

⎤⎦⎥⎥

b ac b

> V := <a,b,c,d>; > VandermondeMatrix(V);

39

⎢⎢⎢⎢⎢⎢⎢⎢⎢

⎥⎥⎥⎥⎥⎥⎥⎥⎥

1 a a 2 a 3

1 b b 2 b 3

1 c c 2 c 3

1 d d 2 d 3

> HilbertMatrix(4);

⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢

⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥

1 12

13

14

12

13

14

15

13

14

15

16

14

15

16

17

> A := matrix(2,2,[1,0,3,2]); > J := jordan(A, 'P');

:= J ⎡

⎣⎢⎢

⎤⎦⎥⎥

1 00 2

> print(P);

⎡⎣⎢⎢

⎤⎦⎥⎥

1 0-3 3

> evalm(P^(-1)&*A&*P);

⎡⎣⎢⎢

⎤⎦⎥⎥

1 00 2

40

CHƯƠNG 4 . PHƯƠNG TRÌNH VI PHÂN with(DEtools);

1. Ký hiệu : D(y) đạo hàm bậc nhất của y D(D)(y)(x) đạo hàm bậc hai của y theo x D@@k thực hiện D theo chính nó k lần

2. Giải hệ, phương trình vi phân: Cú pháp : dsolve({ pt/hệ, đkđ},x(t)); Ví dụ : > dsolve(D(x)(t)=2/(t^2-1),{x(t)} );

> ode := diff(y(x),x,x) = 2*y(x) + 1; > dsolve(ode); > ics := y(0)=1, D(y)(0)=0; >dsolve({ode,ics}); 3.Thừa số tích phân: intfactor(ODE, y(x), _mu = int_factor_form, try_hard=true Ví dụ : > ODE2 := diff(y(x),x,x)-1/2*y(x)*(4+y(x)*x)/x^2-y(x)*diff(y(x),x)-1/2*x*diff(y(x),x)^2; > mu := intfactor(ODE2);

:= µ ,x 2 e( )− /1 2 y x e

( )− /1 2 y x

x

> odeadvisor(mu[1]*ODE2); 4.Phân loại: odeadvisor(ODE); odeadvisor(ODE, y(x), [type1, type2, ...], help); Ví dụ : > with(DEtools): ODE := x*diff(y(x),x)+a*y(x)^2-y(x)+b*x^2; > odeadvisor(ODE); [ ], ,[ ],_homogeneous class D _rational _Riccati

5.Vẽ đồ thị nghiệm: DEplot(deqns, vars, trange, options); DEplot(deqns, vars, trange, inits, options) DEplot(deqns, vars, trange, xrange, yrange, options); DEplot(dproc, vars, trange, number, xrange, yrange, options); DEplot(deqns, vars, trange, inits, yrange, xrange, options); Ví dụ : > with(DEtools):DEplot(cos(x)*diff(y(x),x$3)-diff(y(x),x$2)+Pi*diff(y(x),x)=y(x)-x,y(x),x=-2.5..1.4,[[y(0)=1,D(y)(0)=2,(D@@2)(y)(0)=1]],y=-4..5,stepsize=.05);

41

6. Phương trình đạo hàm riêng :

> with(PDEtools); • Giải phương trình:

pdsolve(PDE, f, HINT, INTEGRATE, build); pdsolve(PDE_system, funcs, HINT, other_options);

• Kiểm tra nghiệm tìm thấy: pdetest(sol, PDE); • Tìm biểu thức ẩn từ nghiệm: build(sol);

Ví dụ : > with(PDEtools): >PDE :=x^2*diff(f(x,y),x)+y*diff(f(x,y),y)+(diff(f(x,y),y)^2+diff(f(x,y),x))=0;

:= PDE = + + + x2 ⎛⎝⎜⎜

⎞⎠⎟⎟∂

∂x ( )f ,x y y ⎛

⎝⎜⎜

⎞⎠⎟⎟∂

∂y ( )f ,x y ⎛

⎝⎜⎜

⎞⎠⎟⎟∂

∂y ( )f ,x y

2⎛⎝⎜⎜

⎞⎠⎟⎟∂

∂x ( )f ,x y 0

> ans := pdsolve(PDE); ans ( ) = ( )f ,x y + ( )_F1 x ( )_F2 y &where :=

⎣⎢⎢⎢

⎦⎥⎥⎥{ }, = ⎛

⎝⎜⎜

⎞⎠⎟⎟∂

∂y ( )_F2 y

2

− − _c1 y ⎛⎝⎜⎜

⎞⎠⎟⎟∂

∂y ( )_F2 y =

∂∂x ( )_F1 x

_c1

+ x2 1

> pdetest(ans,PDE); 0 > build(ans);

= ( )f ,x y + − − + + _c1 ( )arctan x _C114 y2 1

4 y − y2 4 _c1 _c1 ( )ln + y − y2 4 _c1 _C2

• Vẽ nghiệm tuyến tính bậc nhất hoặc phi tuyến của phương trình đạo hàm riêng: PDEplot(PDE, inits, srange, options);

Ví dụ :> with(PDEtools): > pde1 := diff(u(x,y),x)*diff(u(x,y),y)-x*y+u(x,y)=0; > PDEplot(pde1, [cos(t),sin(t),0], t=-Pi..Pi, ic_assumptions=[diff(u(x,y),x) = -cos(t)]);

PHẦN THỰC HÀNH

TÀI LIỆU THAM KHẢO

1. M.B. Monagan, K. O. Geddes, K. M. Heal,… -Maple V- Programming Guide – NXB Springer, 1996. 2. Đinh Thế Lục, Phan Huy Điển, Tạ Duy Phượng – Giải Tích Toán học Tập 1,2 , Nhà Xuất Bản Giáo Dục, 1998-1999. 3. Đinh Thế Lục, Phan Huy Điển, Tạ Duy Phượng –Hướng dẫn thực hành tính toán trên chương trình MAPLE V - Nhà Xuất Bản Giáo Dục, 1998. 4. Phan Ngọc Châu – Sử dụng Maple trong Toán sơ cấp và Toán cao cấp, NXB Khoa Học kỹ thuật, 2005. 5. Maple 10 help.