1. Trang chủ
  2. » Luận Văn - Báo Cáo

Giải bài tập tối ưu hóa và điều khiển tối ưu bằng phần mềm maple

72 696 3

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Tài liệu được biên soạn phục vụ cho sinh viên trong quá trình học môn tối ưu hóa ứng dụng , các bài tập được biên soạn chi tiết và thực hiện trên phần mềm Maple. MAPLE của hãng Maplesoft (Canada) là một phần mềm KHKT, thích hợp với SV cácngành KHKT và kỹ sư. MAPLE dễ sử dụng, cho phép đối thoại trực tiếp với người sử dụngchỉ với một số ít câu lệnh đơn giản. Đặc biệt, MAPLE rất mạnh trong tính toán bằng chữ.Có thể cài đặt MAPLE từ CD, USB hoặc download từ http:www. maplesoft.com

TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI BỘ MÔN CƠ HỌC ỨNG DỤNG PGS.TS Nguyễn Nhật Lệ ***** GIẢI BÀI TỐN TỐI ƯU HĨA VÀ ĐIỀU KHIỂN TỐI ƯU BẰNG PHẦN MỀM MAPLE (Dùng cho sinh viên)  Hướng dẫn sử dụng MAPLE  Tối ưu hóa  Điều khiển tối ưu OPT 15 PHẦN I HƯỚNG DẪN SỬ DỤNG MAPLE - Mở đầu MAPLE hãng Maplesoft (Canada) phần mềm KHKT, thích hợp với SV ngành KHKT kỹ sư MAPLE dễ sử dụng, cho phép đối thoại trực tiếp với người sử dụng với số câu lệnh đơn giản Đặc biệt, MAPLE mạnh tính tốn chữ Có thể cài đặt MAPLE từ CD, USB download từ: http://www maplesoft.com Sau cài đặt MAPLE 16, hình có hai biểu tượng Click chuột vào Maple 16 Portal để xem hướng dẫn Click chuột vào Maple 16 để tính tốn MAPLE có nhiều gói cơng cụ (package) ứng với loại toán Các lệnh người sử dụng (NSD) kết thực MAPLE thực trực tiếp trang làm việc Trước tiên, NSD click chuột vào biểu tượng [> công cụ để tạo dấu > đầu dòng Sau dấu >, NSD viết câu lệnh từ bàn phím Sau viết xong lệnh, ấn Enter, MAPLE thực lệnh phạm vi > Quá trình đối thoại NSD MAPLE tiếp tục theo lệnh NSD Có thể thay Enter cách click chuột vào phím ! cơng cụ Cuối cùng, để thực tồn lệnh chương trình, NSD click chuột vào phím !!! công cụ Tra cứu chủ đề: Hai cách: a) Tại trang làm việc: dấu ? chủ đề, Enter: ? LPSolve ? functional b) Tại công cụ: Help/Maple Help Năm 2013 có MAPLE 17 BÀI 1: BIỂU THỨC, HÀM SỐ, ĐỒ THỊ Cách viết lệnh Dấu > để bắt đầu câu lệnh, nhóm lệnh chèn thêm dòng Ấn Shift + Enter để xuống dòng phạm vi > Dấu # để ghi khóa câu lệnh Dấu ; dấu : để kết thúc câu lệnh Khi dùng dấu ; kết thực hiển thị Khi dùng dấu : kết không hiển thị Dấu := để gán giá trị biểu thức Dấu [ ] để ghi số > # Vi du > restart: > a1:=10; a2:=20;b5:=8; #Khong dung chiso a[1]:=10;a[2]:=20;b[5]:=8; #Dung chi so Các phép tính 2.1 Các phép tính số học Cộng, trừ, nhân, chia, lũy thừa, bậc hai, bằng: + , - , * , / , ^ , sqrt( ), = > # Vi du > a:=3; b:=-7/4; c:=4.5; S:=2.5*a+3*b^2+sqrt(c); 2.2 Các phép tính so sánh: Lớn bằng, nhỏ bằng, khác, và, hoặc: >= , , and, or # Vi du > a>=b, a g1:=3*x1+x2-0.5*x3=0;x2>=30;x3 g[1]:=3*x[1]+x[2]-0.5*x[3]=0; x[2]>=30;x[3] subs(x=a,b=5,BT); # Thay x=a,b=5 vao BT > simplify(BT); # Đon gian BT > value(BT); > evalf(BT,m); > evalf(%,5) # Đanh gia BT # Gia tri thap phan cua BT voi m chu so # so thap phan cua BT sat tren > assign(%); # Lay ket qua vua tinh đuoc sat tren > simplify(%); # Don gian BT sat tren > convert(BT,trig);# Bien doi luong giac BT > alias(s1=sin(q1),c1=cos(q1), ,); # Ky hieu > # Vi du 1: # Cho tam giac,canh a va b; phi:goc giua a,c.Tinh c > h:=a*sin(phi); c:=a*cos(phi)+sqrt(b^2-h^2); c:=subs(a=5,b=20,phi=Pi/6,c); c:=simplyfy(%); c:=evalf(%); > # Vi du 2: > f:=cos(x)^4+sin(x)^4+2*cos(x)^2-2*sin(x)^2-cos(2*x); f:=simplify(%); f:=subs(x=Pi/12,%); f:=evalf(%); Hàm số 3.1 Các hàm toán học sqrt(x): Can bac hai cua x exp(x) : Ham e mũ ln(x) : logarit tu nhien abs(x) : Gia tri tuyet đoi sign(x) : Ham dau sin(x); cos(x): Ham sin; cos tan(x); cot(x) : Ham tg; ctg arcsin(x);arcs(x): Ham arsin; arcos > # Vi du > f:=sin(3*x)+exp(-0.2*x); 3.2 Tạo hàm ># Vi du >f:=x^3+2*x^2-3*x+m; >f:=x1^2+3*x1*x2-x3^2; 3.3 Tạo hàm ẩn > #Vi du > f:=x^4-x^2+y^2=0; 3.4 Tạo hàm khúc 2 x ; 0x4  f :   0.2 x;  x    ># Ham tung khuc >f:=piecewise((0 f:=(x1,x2)->2*x1^2+x1*x2; f(3,1):=21; Vẽ đồ thị 2D Gói lệnh: with(plots): Lệnh: plot(f(x),x=a b,options); Có thể click phím phải chuột vào đồ thị để chọn options 4.1 Hàm thông thường ># Vi du > with(plots): > f1:=2*x^3+10*x^2+5*x-20; f2:=x^2+3*x+10; plot(f1,x=-3 3,thickness=2,title=”DO THI HAM BAC BA”); plot([f1,f2],x=-3 3,style=[point,line],legend=[“f1”,”f2”], labels=[“x”,”y”],gridlines=true); 4.2 Hàm ẩn Lệnh: implicitplot(f(x),x=a b, options) > #Vi du >f3:=x^2/16+y^2/4=1; implicitplot(f3,x=-4 4,y=-2 2,title=”HINH ELIP”); 4.3 Hàm khúc Mô tả f(x) lệnh piecewise plot(f(x),x=a b,options);  x2 ;  15  f   46  x ;  1 ; 0x4 4 x6 otherwise > # Vi du f:=piecewise((0 plot([x,y,t=-Pi Pi]); 4.6 Đồ thị động theo tham số t hàm biến Lệnh: animate(f(x,t),x=a b,t=t1 t2,options); > #Vi du > f:=t*sin(t*x); > animate(f,x=-Pi Pi,t=1 3); Ấn phím phải chuột vào đồ thị, xuất menu phụ, chọn: animation/continuous/play/stop 4.7 Vẽ miền ràng buộc tuyến tính > g1:=x1+4*x2=0; G:=piecewise((g1 and g2 and g3),16); >implicitplot(G=16,x1=0 4,x2=0 4,color=green, grid=[300,300]); Vẽ đồ thị 3D Gói lệnh: with(plots) 5.1 Đồ thị hàm biến: mặt f(x,y), contour, gradient Lệnh: plot3d(f,x=a b,y=c d,options); contourplot(f,x=a b,y=c d,contours=n,options); gradplot(f,x=a b,y=c d,options); ># Ve mat f(x,y): > f:=x*exp(-x^2-y^2); > plot3d(f,x=-2 2,y=-2 2,axes=box,title=”DO THI 3D”); ># Ve contour,gradient: > P1:=contourplot(f,x=-2 2,y=-2 2,contours=10): P2:=gradplot(f,x=-2 2,y=-2 2): display(P1,P2); ># Ve nhieu mat: > f1:=x*exp(-x^2-y^2);f2:=x^2+y^2; > P1:=plot3d(f1,x=-2 2,y=-2 2): P2:=plo3d(f2,x=-2 2,y=-2 2): display(P1,P2,axes=box); 5.2 Đồ thị số liệu biến > x:=[1,2,3,4]; y:=[9,7,12,14]; z:=[-2,12,7,20]; > pointplot3d(x,y,z, axes=normal,symbol=box): 5.3 Đồ thị động theo tham số t hàm biến Lệnh: animate3d(f(x,y,t),x=a b,y=c d,t=t1 t2); > #Vi du > f:=t*x*exp(-(t*x)^2-(t*y)^2); > animate3d(f,x=-2 2,y=-2 2,t=1 3); Ấn phím phải chuột vào đồ thị, xuất menu phụ, chon: animation/continuous/play/stop 5.4 Đồ thị quỹ đạo > x:=sin(3*t); y:=2*cos(0.5*t);z:=t^2; > spacecurve([x,y,z],t=0 3,axes=normal); 5.5 Dùng giao diện chọn loại đồ thị > with(plots): > f1:=x1^2-2*x1*x2^2; f2:=x1^3+x2^2-x1*x2; > Interactive((f1,f2),variables=[x1,x2]); Sau Enter, xuất giao diện, select Plot: 3-Dplot; 3-Dcontour plot; 2-Dcontour plot; BÀI 2: GIẢI PHƯƠNG TRÌNH Giải phương trình (PT) Lệnh: solve(PT,{biÕn},options); solve(PT,options); > # Vi du > PT:=a*x^3+b*x^2+c*x+d=0; a:=1;b:=2;c:=3;d:=4; print(TAP_NGHIEM); N:=solve(PT,{x}); ># Danh gia rieng tung nghiem N:=solve(PT); print(TACH_NGHIEM); nghiem_1:=evalf(N[1]);nghiem_2:=evalf(N[2]); nghiem_3:=evalf(N[3]); Giải hệ PT Lệnh: solve({PT1,PT2, },{biÕn1,biÕn2, },options); solve({PT1,PT2, },options); > # Vi du > PT1:=2*x*y+x^2*tan(alpha)-30=0; PT2:=y^2-4*x*y-10=0; alpha:=Pi/4; print(TAP_NGHIEM); N:=solve({PT1,PT2},{x,y}); ># Tach nghiem > N:=solve({PT1,PT2}); print(TACH_NGHIEM); nghiem_1:=evalf(N[1]);nghiem_2:=evalf(N[2]); ># Lay nghiem duong N:=evalf(N); x1:=select(i->sign(i)>0,N); Bất phương trình (BPT) Lệnh: solve(BPT,{biến},options); > #Vi du > BPT:=x^2-2*x #Vi du > BPT1:=x^3-11*x^2+10*x0; Print(TAP_NGHIEM); N:=solve({BPT1,BPT2},{x}); nghiem_1:=evalf(N[1]);nghiem_2:=evalf(N[2]) BÀI 3: ĐẠI SỐ TUYẾN TÍNH Gói lệnh: with(linalg) with(LinearAlgebra) Tạo vectơ, ma trận ># Vi du > with(linalg) > v:=vector(3,[1,2,3]);v:=[1,2,3] # Vecto dong > v1:=; # Vecto cot >A:=matrix(3,3,[[1,-2,3],[4,-5,6],[7,8,9]]); A:=matrix([[1,-2,3],[4,-5,6],[7,8,9]]); >a21:=A[2,1]; # phan tu a(2,1) >d:=det(A); # đinh thuc >A1:=transpose(A);# chuyen vi >A2:=inverse(A); # nghich đao >A3:=diag(a,b,c); # duong cheo > A:=[]; # matran rong > vk:=row(A,k); # dong k cua matran A > vk:=col(A,k); # cot k cua matran A > P:=augment(A,B,C);# ghep ma tran theo hang # A,B,C cung so hang > Q:=stackmatrix(A,B,C);# ghep ma tran theo cot # A,B,C cung so cot Tích vơ hướng, tích vectơ hai vectơ > v1:=[5,7,9];v2:=[4,8,10]; > M:=dotprod(v1,v2); # tich vo huong > N:=crossprod(v1,v2); # tich vecto Các phép tính ma trận > v:=; > A1:=matrix(3,3,[[1,-3,5],[2,4,6],[-1,0,8]]); A2:=matrix(2,3,[[1,-2,3],[4,-5,6]]); > B1:=matrix(2,3,[[1,3,5],[2,4,6]]); B2:=matrix(3,2,[[1,3],[2,4],[6,8]]); > d:=det(A1); # Định thức > k:=rank(B2); # Hạng > lambda:=evalf(Eigenvals(B2)); # Gia tri rieng > C1:=evalm(A2+B1);C2:=evalm(A2-B1); # Tong, hieu matran > C3:=multiply(A2,B2); C3:=evalm(A2&*B2);# Tich matran > C4:=multiply(A1,v); # Tich matran va vectơ Lập phương trình Ax = b từ hệ phương trình ngược lại Lệnh: genmatrix genqns > PT1:=3*x+5*z=10; PT2:=x-4*y=4*z; > A:=genmatrix({PT1,PT2},[x,y,z],’b’); #Tao Ax=b tu PT1,PT2 > print(b); > HPT:=genqns(A,[x,y,z],b); #Tao PT1,PT2 tu Ax=b Giải phương trình Ax = b Lệnh : x=linsolve(A,b); >#Vi du > A:=matrix([[3,-5,2,1],[-2,3,1,5],[1,2,0,4],[1,-1,-4,10]]); d=det(A);# PT co nghiem d  b=[3,4,-3,15]; x=linsolve(A,b);x:=evalf(%); x1:=x[1]; x2:=x[2];x3:=x[3];x4=x[4]; BÀI 4: GIỚI HẠN, ĐẠO HÀM, TÍCH PHÂN Gói lệnh: with(linalg) Tính giới hạn Lệnh: limit(f(x),x=a); limit(f(x),x=infinity) > # Vi du > with(linalg): > f:=(sqrt(1+x)-1)/(x); M:=limit(f,x=0); N:=limit(f,x=infinity); Tính đạo hàm hàm biến Lệnh: diff(f(x),x); # đao ham cap dif(f(x),x,x); # đao ham cap diff(f(x),x$k);# đao ham cap k > # Vi du > f:=x^2*exp(-k*x); > d1:=diff(f,x); > d2:=diff(f,x,x);d2:=diff(f,x$2); Tính đạo hàm hàm nhiều biến 3.1 Tính đạo hàm riêng > # Vi du > f:=4*x^2+y^2+3*x*z-5*y*z^2; > fx:=diff(f,x);fy:=diff(f,y);fz:=diff(f,z); > fxx:=diff(fx,x);fxy:=diff(fx,y);fxz:=diff(fx,z); > fyx:=diff(fy,x);fyy:=diff(fy,y);fyz:=diff(fy,z); 3.2 Tính vectơ gradient ma trận Hessian hàm nhiều biến f Lệnh: gradf:= grad(f,[bien1,bien2, ]); Hf:=hessian(f,[bien1,bien2, ]); > # Vi du > f:=4*x^2+y^2+3*x*z-5*y*z^2; gradf:=grad(f,[x,y,z]); Hf:=hessian(f,[x,y,z]); 3.3 Tính đạo hàm (jacobian) hàm vectơ v Lệnh: j:=jacobian(v,[bien1,bien2, ]); > > > > > > > > > 57 Ví dụ : TAY MÁY b S F a M O B C2 C1  Xylanh: Khối lượng m1, mơmen qn tính JO, độ dài a, mômen ngẫu lực M Pitông: Khối lượng m2, mômen quán tình JC2, độ dài b, lực F Dùng PT Lagrange, lập PTVP trạng thái  , S Đưa hệ PTVP cấp Lập PTVP hệ điều khiển Giải hệ PTVP hệ điều khiển Xác định mục tiêu tối ưu J* Vẽ đồ thị: Điều khiển tối ưu, trạng thái tối ưu, quỹ đạo pha, qũy đạo B Số liệu m1  1; m2  0.5; J  0.4; J C  0.02; g  10; a  0.3; b  0.4 t f  1;  (0)  0; S (0)  2a;  (0)  0; S (0)   (t f )   ; S (t f )  4a;  (t f )  0; S (t f )  Ví dụ giải MAPLE > > > > > > > > > > > > > > > 58 > > > > > > > > > > > > > > > > > > > > 59 > > > > > > > > > > > > > > 60 > > > Ghi chú: Khi ràng buộc quỹ đạo B phần tư đường tròn, bán kính L = 4a: > > 61 > Ví dụ : BANG BANG CONTROL PT chuyển động ô tô x1  x2 x2  u Lượng xăng tiêu thụ tf J   (k1 x1  k2 x2  k3u )dt  Tìm u trạng thài chuyển động tương ứng Giải ví dụ Maple > > > > > > > > > 62 > > > > > > > > > > > > > 63 > Ví dụ : TỐI ƯU VỀ THỜI GIAN Phương pháp bắn (Shooting method) PTVP hệ bậc tự x1  x2 (u  2bx2  cx1 ) m 1  u  1 Điều kiện đầu : x10  4, x20  Điều kiện cuối: x1c  0, x2 c  u +1 x2  t s1 ts t -1 Các bước Shooting method: 1) Giả thiết thời điểm chuyển đổi ts1 , t s  t f u có dạng bangbang control hình vẽ 2) Giải PTVP với Điều kiện đầu, nhận x1 f  x1 (t f ) ; x2 f  x2 (t f ) 3) Tính vectơ độ lệch:  x1 f  x1c  F    x2 f  x2 c  4) Tính ma trận Jacobian:  F1 F1   t t s  s1   J  F2 F2     t s1 t s  5) Tính vectơ: Del  J 1  F 6) Hiệu chỉnh thời điểm chuyển đổi: t sj  t sj   Del ;   const , tự chọn 7) Tiến hành lặp khi: norm( F )   ;  : sai số, tự chọn Chú ý: Để tính thành phần J, dùng cơng thức gần đúng: Fi Fi (tsj  tsj )  Fi (t sj ) ; t sj  const , tự chọn  tsj t sj 64 Giải ví dụ Maple > > > > > > > > > > > > > > > > > > > 65 > 66 - > > > > 67 > Ví dụ : PHƯƠNG TRÌNH ĐẠI SỐ RICCATI (Linear Quadratic Regulator Problem) x = A.x + B.u x C y u = -K.x Tuyến tính hóa hệ PTVP- Giải PT đại số Riccati- Mơ hệ mở- Mơ hệ đóng Giải ví dụ Maple: > > > > > > 68 > > > > > > > > > > > > 69 > > > > > > > > > > 70 > ># OK HẾT 71 ... biểu thức BT số lệnh thường dùng: > subs(x=a,b=5 ,BT) ; # Thay x=a,b=5 vao BT > simplify (BT) ; # Đon gian BT > value (BT) ; > evalf (BT, m); > evalf(%,5) # Đanh gia BT # Gia tri thap phan cua BT voi m... chu so # so thap phan cua BT sat tren > assign(%); # Lay ket qua vua tinh đuoc sat tren > simplify(%); # Don gian BT sat tren > convert (BT, trig);# Bien doi luong giac BT > alias(s1=sin(q1),c1=cos(q1),... PT:=3*diff(x(t),t,t)+0.02*diff(x(t),t)+50*x(t)=3*sin(t); > DKD:=x(0)=0.1, D(x)(0)=0;tf:=2; > # Tim nghiem duoi dang giai tich > nghiem_GT=dsolve({PT,DKD},{x(t)});assign(%); evalf(nghiem_GT); > # Tim nghiem duoi dang

Ngày đăng: 20/01/2018, 09:39

Xem thêm:

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w