Giáo trình Maple - Chương 2: Thực hành tính toán trên Maple
Tính theo công thức truy hồi
Nhờ MAPLE, bạn có thể tính giá trị của các biểu thức theo công thức truy hồi
như tính số hạng tổng quát của dãy Fibonachi. Muốn tính theo công thức truy hồi,
bạn hãy vào lệnh
[>rsolve(eqns, fcns);
Trong đó, eqns là phương trình hoặc tập các phương trình, fcns là tên hàm hoặc
tập tên các hàm mà lệnh rsolve phải tìm.18
Thí dụ Tìm công thức cho hàm f(k) theo công thức truy hồi
f( ) n = ư3 ( ) f n ư 1 2 ( ) ư f n ư 2
với giá trị ban đầu bất kỳ
[>rsolve(f(n)=-3*f(n-1)-2*f(n-2),f(k));
( ) 2 ( ) f 0 ( ) + f 1 ( ) -1 k + ( ) ưf 0 ( ) ( ) ư f 1 ( ) -2 k
Nếu muốn có công thức của f(k) với giá trị ban đầu cho trước thì ta phải khai báo
giá trị ấy vào eqns
[>rsolve({f(n)=-3*f(n-1)-2*f(n-2),f(1.2)=1},{f});
{ } f( ) n = ư3 ( ) -1 n + ( ) -2 n
Trang 1
Trang 2
Trang 3
Trang 4
Trang 5
Trang 6
Trang 7
Trang 8
Trang 9
Trang 10
Tải về để xem bản đầy đủ
Tóm tắt nội dung tài liệu: Giáo trình Maple - Chương 2: Thực hành tính toán trên Maple
90720 x 9 6125659 9979200x 11 ( )O x12 [>poly2:=convert(approx2,polynom); := poly2 − + − + − 4 x 383 x 3 421 30 x 5 10039 1260 x 7 246601 90720 x 9 6125659 9979200x 11 [>plot({expr,poly2},x=-1..1,y=-2..2); 78 2.5. Ph−ơng trình Vi phân và Vật lý toán Muốn tiến hành giải ph−ơng trình vi phân, ta cần nạp gói công cụ chuyên dụng cho lĩnh vực này bằng các lệnh sau [>with(DEtools): Một bản thống kê các chức năng của "gói công cụ này" sẽ xuất hiện sau khi lệnh đ−ợc thực hiện. Ghi chú 1. Ký hiệu D(y) là phép tìm đạo hàm bậc nhất của hàm y. 2. Ký hiệu D(D)(y)(x) là phép tìm đạo hàm bậc hai của y theo x. 3. Ký hiệu D@@k có nghĩa là D đ−ợc kết hợp với chính nó k lần. 2.5.1. Giải ph−ơng trình vi phân th−ờng Các ph−ơng trình vi phân thông th−ờng Thí dụ Giải ph−ơng trình vi phân " 5 ' 6 0y y y+ + = = + + ( )( )( )D( )2 y x 5 ( )( )D y x 6 ( )y x 0 với điều kiện ban đầu: (0) 0, '(0) 1y y= = . B−ớc 1. Ta ra lệnh gán diff_eq1 cho ph−ơng trình cần giải: [>diff_eq1:=D(D(y))(x)+5*D(y)(x)+6*y(x)=0; := diff_eq1 = + + ( )( )( )D( )2 y x 5 ( )( )D y x 6 ( )y x 0 (Sau khi cho thực hiện lệnh trên màn hình sẽ hiện ph−ơng trình vi phân cần giải). B−ớc 2. Nhập điều kiện ban đầu bằng lệnh [>init_con:=y(0)=0,D(y)(0)=1; := init_con , = ( )y 0 0 = ( )( )D y 0 1 Sau dấu (;) đánh lệnh [Enter] sẽ hiện ra công thức mô tả điều kiện đầu B−ớc 3. Giải ph−ơng trình vi phân bằng lệnh dsolve : [>dsolve({diff_eq1,init_con},{y(x)}); = ( )y x − e ( )−2 x e ( )−3 x 79 Sau khi cho thực hiện lệnh trên màn hình sẽ hiện công thức nghiệm của ph−ơng trình vi phân cần giải. Thí dụ Giải ph−ơng trình 2 " 5 ' 0x y y+ = . [>dsolve(x^2*diff(y(x),x,x)+5*diff(y(x),x)=0,y(x)); = ( )y x + _C1 _C2 + x e 5 x 5 Ei ,1 − 5 x Các tuỳ chọn trong giải ph−ơng trình vi phân Không phải ph−ơng trình nào cũng có nghiệm d−ới dạng biểu thức giải tích thông th−ờng, cho nên không có gì đáng ngạc nhiên khi ta thấy MAPLE "không chịu" cho ta kết quả đối với một số ph−ơng trình nào đó. Hãy xem xét Thí dụ Giải ph−ơng trình 5' sin( )y y x x+ = . [>dsolve(diff(f(x),x)+f(x)^5*x=sin(x),f(x)); Sau khi ra lệnh giải (ấn phím [Enter] ), ta thấy máy có chạy nh−ng rồi không đ−a ra kết quả gì. Tuy nhiên, xin đừng thất vọng, MAPLE vẫn làm việc "không chê vào đâu đ−ợc" nếu nh− ta biết lệnh cho nó làm việc một cách hợp lý. Lệnh giải ph−ơng trình vi phân có cú pháp tổng quát là [>dsolve(deqns,vars,keyword); trong đó phần keyword cho phép ta xác định ph−ơng pháp giải cùng dạng biểu diễn nghiệm. Cách biểu diễn mặc định là "chính xác " (exact). Nếu chọn cách biểu diễn nghiệm nh− vậy ta sẽ không phải cho giá trị ở phần keyword. Nếu cách biểu diễn ấy không thành (nh− ta thấy trong ví dụ trên đây), hoặc không phải là ý ta muốn, thì ta có thể yêu cầu máy cho ta một trong các cách biểu diễn sau đây: Với keyword đ−ợc cho d−ới dạng type = series thì máy sẽ cho ta nghiệm d−ới dạng chuỗi. Với keyword đ−ợc cho d−ới dạng type = numeric thì máy sẽ sử dụng các ph−ơng pháp số và cho ta nghiệm d−ới dạng một hàm t−ợng tr−ng mà có thể đánh giá đ−ợc giá trị số của nó tại bất kỳ điểm nào (có một khối l−ợng khổng lồ các ph−ơng pháp số giải ph−ơng trình vi phân, bạn đọc quan tâm xin xem trong giáo trình tính toán chuyên ngành ph−ơng trình Vật lý - Toán). Với keyword đ−ợc cho d−ới dạng ouput = basic thì máy sẽ cho ta tập hàm cơ sở mà tập nghiệm đ−ợc căng trên đó (nh− một bao tuyến tính). Nếu ph−ơng trình không phải là thuần nhất thì máy sẽ cho ta thêm một nghiệm riêng, để mọi nghiệm bất kỳ đều có thể biểu diễn qua tập nghiệm cơ sở và nghiệm riêng này. Thông th−ờng, nghiệm có thể đ−ợc cho d−ới dạng một hàm ẩn (tức là một ph−ơng trình thông th−ờng biểu thị mối liên hệ giữa hàm số y và biến 80 phụ thuộc x , không có sự tham gia của các đạo hàm), hoặc d−ới dạng các biến phụ thuộc tham số. Nếu ta muốn bắt nó phải cho ta nghiệm d−ới dạng hiển (tức là một hàm số của y theo x ) thì ta cho keyword d−ới dạng explicit=true. (Vì khả năng này th−ờng khó xảy ra nên ng−ời ta th−ờng cho giá trị mặc định là explicit=false ). Muốn biểu diễn đ−ợc nghiệm thông qua các hàm đặc biệt kiểu Dirac(.), Heaviside(.),... thì ta phải sử dụng keyword là method=laplace . Trong ví dụ trên, nghiệm của ph−ơng trình là một hàm không biểu diễn đ−ợc qua các hàm thông th−ờng, cho nên máy không đ−a ra đ−ợc biểu thức nào. Điều này cũng t−ơng tự nh− khi gặp một số vô tỷ mới, ch−a có ký hiệu biểu diễn. Nếu nh− với sô vô tỷ mới ta th−ờng yêu cầu máy cho biết xấp xỉ thập phân, thì trong tình huống này ta có thể yeu cầu máy cho ta nghiệm xấp xỉ d−ới một dạng nào đó, thông th−ờng là dạng chuỗi. Thí dụ với điều kiện đầu là 1(0) 2 f = , ta lấy nghiệm d−ới dạng chuỗi bằng lệnh: [>dsolve({f(0)=1/2,diff(f(x),x)+f(x)^5*x=sin(x)}, f(x),series); = ( )f x + − + 12 31 64 x 2 977 12288x 4 ( )O x6 Các thí dụ minh hoạ cho chuyên mục này (đối với 1 ph−ơng trình vi phân cũng đồng thời là đối với hệ ph−ơng trình vi phân) xin xem trong phần giải hệ ph−ơng trình vi phân th−ờng. Ph−ơng trình vi phân với các hàm đặc biệt MAPLE có thể hiểu và làm việc với rất nhiều hàm đặc biệt, thí dụ hàm Delta Dirac. Thí dụ Giải ph−ơng trình vi phân bậc 4 có tham gia hàm Delta Dirac 6 (4)10 ( 2) ( 4)y Dirac t Dirac t= − − − với bốn điều kiện biên: (0) 0, (5) 1, '(0) 0, "(5) 1y y y y= = = = . B−ớc 1. Gán tên diff_eq2 cho ph−ơng trình cần giải: [>diff_eq2:=10^6*(D@@4)(y)(t)=Dirac(t-2)-Dirac(t-4); := diff_eq2 = 1000000 ( )( )( )D( )4 y t − ( )Dirac − t 2 ( )Dirac − t 4 B−ớc 2. Nhập điều kiện ban đầu bằng lệnh [>bound_con:=y(0)=0,y(5)=1,D(y)(0)=0,(D@@2)(y)(5)=1; := bound_con , , , = ( )y 0 0 = ( )y 5 1 = ( )( )D y 0 0 = ( )( )( )D( )2 y 5 1 81 B−ớc 3. Giải ph−ơng trình vi phân bằng lệnh [>solution:=dsolve({diff_eq2,bound_con},{y(t)}); solution ( )y t 1 750000 ( )Heaviside − t 2 1 93750 ( )Heaviside − t 4 1 500000 t ( )Heaviside − t 2− + + = := 1 125000 t ( )Heaviside − t 4 1 1000000 t 2 ( )Heaviside − t 2 1500000 t 2 ( )Heaviside − t 4 − − + 1 6000000 t 3 ( )Heaviside − t 2 16000000 t 3 ( )Heaviside − t 4 237499712500000 t 2 17249969 375000000 t 3 + − − + B−ớc 4. Cất giữ kết quả vào biến solution nhờ lệnh subs expr 1 750000 ( )Heaviside − t 2 1 93750 ( )Heaviside − t 4 1 500000 t ( )Heaviside − t 2− + + := 1 125000 t ( )Heaviside − t 4 1 1000000 t 2 ( )Heaviside − t 2 1500000 t 2 ( )Heaviside − t 4 − − + 1 6000000 t 3 ( )Heaviside − t 2 16000000 t 3 ( )Heaviside − t 4 237499712500000 t 2 17249969 375000000 t 3 + − − + [>expr:=subs(solution,y(t)); B−ớc 5. Vẽ nghiệm của ph−ơng trình vi phân [>plot(expr,t=0..5); 2.5.2. Giải hệ ph−ơng trình vi phân th−ờng Giải hệ ph−ơng trình vi phân th−ờng Thí dụ Giải hệ ph−ơng trình vi phân th−ờng bậc hai (không có điều kiện ban đầu) sau "( ) ( ) "( ) ( ) y x z x z x y x = = B−ớc 1 Gán tên sys (viết tắt của chữ system - hệ) cho hệ ph−ơng trình cần giải: [>sys:=(D@@2)(y)(x)=z(x),(D@@2)(z)(x)=y(x); )())()((),())()((: 22 xyxzDxzxyDsys === 82 B−ớc 2 Giải hệ ph−ơng trình vi phân bằng lệnh [>dsolve({sys},{y(x),z(x)}); +−++= −− xxx eCxCeCeCxy 2_ 4 1)cos(1_ 2 11_ 4 11_ 4 1)({ )( )cos(3_ 2 13_ 4 13_ 4 1)sin(2_ 2 12_ 4 1 xCeCeCxCeC xxx −+++ − ,4_ 4 14_ 4 1)sin(4_ 2 1 xx eCeCxC −−+− xxx eCxCxCeCeCxz 2_ 4 1)sin(2_ 2 1)cos(1_ 2 11_ 4 11_ 4 1)( +−−+= − xxxx eCxCeCeCeC −−− −+++− 4_ 4 1)cos(3_ 2 13_ 4 13_ 4 12_ 4 1 )}sin(4_ 2 14_ 4 1 xCeC x ++ MAPLE có thể biến đổi một hệ ph−ơng trình vi phân th−ờng bậc cao về hệ ph−ơng trình vi phân bậc nhất bằng lệnh convertsys. Hơn nữa, lệnh dsolve của MAPLE còn có thể giải rất nhiều ph−ơng trình vi phân bằng ph−ơng pháp số. Các tuỳ chọn trong giải hệ ph−ơng trình vi phân Cũng t−ơng tự nh− đối với giải (một) ph−ơng trình vi phân th−ờng, ta có nhiều khả năng biểu diễn nghiệm và nhiều ph−ơng pháp giải hệ ph−ơng trình vi phân. Vấn đề này đã đ−ợc trình bày cụ thể trong mục giải ph−ơng trình vi phân th−ờng, cho nên không đ−ợc nhắc lại ở đây. Để nắm vấn đề một cách thuần thục hơn, ta hãy xem xét thêm một số ví dụ minh hoạ (cho tr−ờng hợp hệ ph−ơng trình vi phân, mà cũng là cho tr−ờng hợp 1 ph−ơng trình vi phân). Thí dụ Giải hệ ph−ơng trình '( ) ( ) ( ) '( ) ( ) y x z x y x x z x y x = − − = với điều kiện ban đầu (0) 0, (0) 1y z= = , theo ph−ơng pháp mặc định [>sys:=diff(y(x),x)=z(x)-y(x)-x,diff(z(x),x)=y(x): fcns:={y(x),z(x)}: [>dsolve({sys,y(0)=0,z(0)=1},fcns); = ( )z x − + + 15 5 e − 1 2 ( ) + 5 1 x 1 5 5 e 1 2 ( ) − 5 1 x x 1, ( )y x 1 10 5 e − 1 2 ( ) + 5 1 x 1 10 5 e 1 2 ( ) − 5 1 x 1− + + = 1 2 e 1 2 ( ) − 5 1 x 1 2 e − 1 2 ( ) + 5 1 x − − 83 Tìm nghiệm d−ới dạng chuỗi (với điều kiện đầu là y(0) = 0, z(0) = 1) [>dsolve({sys,y(0)=0,z(0)=1},fcns,type=series); ),( 15 1 24 5 2 1)({ 65432 xOxxxxxxy ++−+−= )}( 24 1 8 1 3 1 2 11)( 65432 xOxxxxxz +−+−+= . Tìm nghiệm bằng ph−ơng pháp số (với điều kiện đầu nh− trên) và cho biết giá trị của nghiệm tại các điểm x = 1, x = 1.5, x = 1.7 : [> F:=dsolve({sys,y(0)=0,z(0)=1},fcns,type=numeric); F:= proc(rkf45_x)...end [>F(1); [x = 1, y(x) = .343731408276753914, z(x) = 1.25897207653682308] [>F(1.5); [x = 1.5, y(x) = .237649509495644756, z(x) = 1.40935827136441327] [>F(1.7); [x = 1.7, y(x) = .163416733680997378, z(x) = 1.44974926864546538] Thí dụ Giải ph−ơng trình bậc hai 3" 2 , (0) 1, '(0) 1y x y y y= = = bằng ph−ơng pháp số (với ch−ơng trình mang tên dverk78 ) và cho giá trị của nghiệm và đạo hàm của nó tại các điểm x=1, x=1.5, x=1.7 d−ới dạng bảng số liệu: [>sys2:={(D@@2)(y)(x)=2*x^3*y(x),y(0)=1,D(y)(0)=1}: [>s:=dsolve(sys2,{y(x)},type=numeric, method=dverk78,value=array([1.0,1.5,1.7])); := s , ,x ( )y x ∂ ∂ x ( )y x 1. 2.17013243525314170 1.93603788311791480 1.50000000000000000 4.26826796627041372 8.36391691654069902 1.69999999999999996 6.71039854665199442 17.2757972122874470 Ta có thể lấy ra từng số liệu của bảng (ma trận) này, thí dụ nh−: [>s[1,1][3]; ∂ ∂ x ( )y x 84 [>s[2,1][2,3]; 8.36391691654069902 Thí dụ Giải ph−ơng trình tuyến tính (bậc 2, không thuần nhất) 2 " ' 3xy y y x+ + = và cho biết hệ cơ sở của tập nghiệm (cùng một nghiệm riêng). [>dsolve(2*x*diff(y(x),x$2)+diff(y(x),x)+3*y(x)=x, y(x),output=basis); , , x( )/1 4 ( )cos 6 x 6 x x( )/1 4 ( )sin 6 x 6 x − + 19 1 3 x Vẽ đồ thị nghiệm của hệ ph−ơng trình vi phân Muốn vẽ đồ thị nghiệm của ph−ơng trình vi phân, ta nạp gói công cụ [>with(DEtools): và sử dụng lệnh [>DEplot(deqns,vars,trange,inits,xrange,yrange,opts); Trong đó: deqns - bảng các ph−ơng trình vi phân bậc nhất (hoặc một ph−ơng trình vi phân bậc cao, có thể qui về hệ bậc nhất). vars - biến phụ thuộc hoặc bảng các biến phụ thuộc. trange - miền thay đổi của biến độc lập. inits - điều kiện ban đầu xác định đ−ờng cong nghiệm cần vẽ. yrange - miền thay đổi của biến phụ thuộc thứ nhất. xrange - miền thay đổi của biến phụ thuộc thứ hai. opts - các tùy chọn (màu, tiêu đề, độ đậm nhạt của đồ thị,...). Thí dụ Vẽ đồ thị của nghiệm của hệ ph−ơng trình vi phân −= −= −= 2' ' ' yxz xzy zyx với điều kiện ban đầu x y z( ) , ( ) , ( )0 1 0 0 0 2= = = , biến độc lập t thay đổi trong khoảng [-2,2], biến phụ thuộc y thay đổi trong khoảng [-4,5], tùy chọn: b−ớc 0.05. 85 Ta có thể cho Maple vẽ đ−ờng cong trong không gian 3 chiều, nh−ng rất khó biểu thị đ−ợc tính 3 chiều của nó. Muốn có cái nhìn rõ hơn, ng−ời ta th−ờng xem xét các hình chiếu của nó lên từng mặt toạ độ. Thí dụ, ta vẽ hình chiếu của nghiệm lên mặt x0z, khi ấy nó là đ−ờng cong biểu diễn mối t−ơng quan giữa 2 thành phần của nghiệm là z và x (đ−ờng cong phụ thuộc tham số t với hai thành phần toạ độ z(t) và x(t) ). [>DEplot({D(x)(t)=y(t)-z(t),D(y)(t)=z(t)-x(t),D(z)(t)=x(t)- y(t)*2},{x(t),y(t),z(t)},t=-2..2,[[x(0)=1,y(0)=0,z(0)=2]], stepsize=.05, scene=[z(t),x(t)]); Với hệ ph−ơng trình bậc nhất 2 ẩn thì Maple có thể vẽ cả tr−ờng vectơ biểu diễn ph−ơng trình, và khi cho thêm điều kiện đầu thì nó sẽ vẽ cả nghiệm thoả mãn điều kiện đầu đó. Thí dụ Vẽ tr−ờng vectơ biểu diễn hệ ph−ơng trình vi phân (dạng Lotka-Volterra) −= −= )1(3.0' )1(' xyy yxx với biến độc lập t thay đổi trong khoảng [-7,7], và vẽ đồ thị của 2 nghiệm ứng với 2 điều kiện đầu là [x(0)=1.2, y(0)=1.2], [x(0)=1, y(0)=0.7], (kèm theo tiêu đề: Mô hình Lotka-Volterra) bằng lệnh [>DEplot({diff(x(t),t)=x(t)*(1-y(t)), diff(y(t),t)=0.3*y(t)*(x(t)-1)},[x(t),y(t)],t=-7..7, [[x(0)=0.2,y(0)=1.2],[x(0)=1,y(0)=.7]],stepsize=.2, title=`Lotka-Volterra model`); 86 2.5.3. Giải ph−ơng trình đạo hàm riêng MAPLE có thể tìm đ−ợc nghiệm của nhiều ph−ơng trình vi phân đạo hàm riêng bằng lệnh pdesolve. Trong công thức nghiệm, các hàm bất kỳ đ−ợc ký hiệu là _F1, _F2, v.v... Trong các lệnh d−ới đây ký hiệu D[1](U) là đạo hàm của U theo biến thứ nhất và D[1,1,2,2,2] là đạo hàm hai lần theo biến thứ nhất và ba lần theo biến thứ hai,... Giải ph−ơng trình đạo hàm riêng Thí dụ Giải ph−ơng trình = ( )( )D , , , ,1 1 2 2 2 U ,x y 0 . B−ớc 1. Gán tên pde cho ph−ơng trình cần giải: [>pde:= D[1,1,2,2,2](U)(x,y) = 0; := pde = ( )( )D , , , ,1 1 2 2 2 U ,x y 0 B−ớc 2. Giải hệ ph−ơng trình vi phân bằng lệnh [>pdesolve(pde,U(x,y)); = ( )U ,x y + + + + ( )_F1 y ( )_F2 y x ( )_F3 x ( )_F4 x y ( )_F5 x y2 Thí dụ Giải ph−ơng trình đạo hàm riêng không thuần nhất = ( )( )D , , , ,1 1 2 2 2 U ,x y ( )sin x y [>pde:= D[1,1,2,2,2](U)(x,y)=sin(x*y); := pde = ( )( )D , , , ,1 1 2 2 2 U ,x y ( )sin x y [>pdesolve(pde,U(x,y)); ( )U ,x y − + + x y ( )Si x y ( )cos x y x2 + − − 12 x 2 y2 ( )Ci x y 12 ( )cos x y 1 2 x y ( )sin x y x ( )cos x y x x x− = ( )_F1 y ( )_F2 y x ( )_F3 x ( )_F4 x y ( )_F5 x y2 + + + + + Vẽ đồ thị nghiệm của ph−ơng trình đạo hàm riêng. Thí dụ Giải và vẽ đồ thị biểu diễn nghiệm của ph−ơng trình đạo hàm riêng = + ( )( )D1 z ,x y ( )z ,x y ( )( )D2 z ,x y 0 B−ớc 1. Gán tên cho ph−ơng trình cần giải 87 [>pde:=D[1](z)(x,y)+z(x,y)*D[2](z)(x,y)=0; := pde = + ( )( )D1 z ,x y ( )z ,x y ( )( )D2 z ,x y 0 B−ớc 2. Nhập điều kiện ban đầu [>ini:=[0,s,sech(s)],s=-5..5; := ini ,[ ], ,0 s ( )sech s = s .. -5 5 B−ớc 3. Vẽ mặt cong nghiệm nh− là họ đ−ờng cong tham số hoá trong không gian ba chiều. [>PDEplot(pde,z(x,y),ini,numsteps=[10,30],numchar=30, basechar=true,method=internal,style=hidden);
File đính kèm:
- giao_trinh_maple_chuong_2_thuc_hanh_tinh_toan_tren_maple.pdf