Giải phương trình vi phân bằng Matlab symbolic

Giáo trình MatLabSymbolicCHƯƠNG 4: SYMBOLICChương này giới thiệu cách thức dùng Symbolic để giải các phương trình toánhọc.1. SymbolicSymbolic là công cụ thực hiện tính toán các biểu thức toán học ở dạng ký tự. Khitính toán, phải thực hiện thông qua một chuỗi biểu thức biểu diễn hàm toán học. Nhưvậy, cần phải định nghĩa hàm dưới dạng các ký hiệu. Để định nghĩa các ký hiệu sử dụngtrong biểu thức, trong MatLab khai báo như sau:>>syms bien_1 bien_2Một số hàm sử dụng trong symbolic:Chức năngTên hàmTên hàmChức năngsymsKhai báo biếnfindsyms Tìm biến trong biểu thứcsymKhai báo mảngprettySắp xếp biểu thứcdiffĐạo hàm và vi phâncollectTách các hệ sốsimplifyRút gọn biểu thứcsolveGiải phương trìnhintTích phândsolveGiải phương trình vi phânsubsThay thế các ký hiệu bằng giá trị laplaceBiến đổi LaplacefactorPhân tích ra thừa số nguyên tốilaplaceBiến đổi Laplace ngượcexpandKhai triển biểu thứcfourierBiến đổi FourierezplotVẽ biểu thứcifourierBiến đổi Fourier ngượclimitTìm giới hạnfinverseTính hàm ngược1.1.Đạo hàm và vi phânDùng hàm diff để xác định đạo hàm của một hàm số.>>syms x>> y=diff[cos[x]]y =Phạm Hùng Kim KhánhTrang 81Giáo trình MatLabSymbolic-sin[x]>>diff['x^3+3*x^2+2*x-1',2] %Đạo hàm cấp 2ans =6*x + 6>>y = diff['x/[1+x^3]']y =1/[x^3 + 1] - [3*x^3]/[x^3 + 1]^2>> simplify[y]ans =-[2*x^3 - 1]/[x^3 + 1]^21.2.Tích phânDùng hàm int để tính tích phân.>>y = int['1/[1+x^2]'] %Tích phân bất địnhy =atan[x]>> y = int[log[x]/exp[x^2]] %Không thực hiện được khihàm phức tạpWarning: Explicit integral could not be found.y =int[log[x]/exp[x^2], x]>> y = int[x*log[1+x],0,1] %Tích phân xác địnhy =1/41.3.Hàm ngượcDùng hàm finverse để tìm hàm ngược.>> finverse[1/x]Phạm Hùng Kim KhánhTrang 82Giáo trình MatLabSymbolicans =1/x>> finverse[a*x+b]ans =-[b - x]/a>> finverse[x^2] %Warning do có 2 kết quả khác nhauWarning: finverse[x^2] is not unique.ans =x^[1/2]1.4.Vẽ đồ thịDùng hàm ezplot vẽ đồ thị hàm số.>> syms x>> ezplot[sin[x]/x]>> ezplot[sin[x]/x,0,4*pi]Dùng hàm ezsurf vẽ đồ thị 3D.>>ezsurf['x*exp[-x^2 - y^2]']1.5.Định dạng biểu thức>> syms s>> y=int['sin[s+2*x]','s',pi/2,pi]y =cos[2*x] - sin[2*x]>> pretty[y]cos[2 x] - sin[2 x]Khai triển hằng đẳng thức:>> f = sym['x^2-1'];>> factor[f]Phạm Hùng Kim KhánhTrang 83Giáo trình MatLabSymbolicans =[x - 1]*[x + 1]>> y=expand[[x+1]^3-2*[x-1]^2]y =x^3 + x^2 + 7*x - 1Đơn giản biểu thức:>> y=simplify[sin[x]^2+cos[x]^2]y =1>> y=simplify[[1-x^2]/[1-x]]y =x + 1>> simple[[1/x^3+6/x^2+12/x+8]^[1/3]]simplify:[[2*x + 1]^3/x^3]^[1/3]radsimp:[12/x + 6/x^2 + 1/x^3 + 8]^[1/3]simplify[100]:[[2*x + 1]^3/x^3]^[1/3]combine[sincos]:[12/x + 6/x^2 + 1/x^3 + 8]^[1/3]combine[sinhcosh]:[12/x + 6/x^2 + 1/x^3 + 8]^[1/3]combine[ln]:[12/x + 6/x^2 + 1/x^3 + 8]^[1/3]factor:Phạm Hùng Kim KhánhTrang 84Giáo trình MatLabSymbolic[12/x + 6/x^2 + 1/x^3 + 8]^[1/3]expand:[12/x + 6/x^2 + 1/x^3 + 8]^[1/3]combine:[12/x + 6/x^2 + 1/x^3 + 8]^[1/3]rewrite[exp]:[12/x + 6/x^2 + 1/x^3 + 8]^[1/3]rewrite[sincos]:[12/x + 6/x^2 + 1/x^3 + 8]^[1/3]rewrite[sinhcosh]:[12/x + 6/x^2 + 1/x^3 + 8]^[1/3]rewrite[tan]:[12/x + 6/x^2 + 1/x^3 + 8]^[1/3]mwcos2sin:[12/x + 6/x^2 + 1/x^3 + 8]^[1/3]collect[x]:FAILans =[[2*x + 1]^3/x^3]^[1/3]1.6.Giải phương trình và hệ phương trìnhDùng hàm solve giải phương trình và hệ phương trình, dsolve để giải phương trìnhvi phân.Giải phương trình bậc n:>> y=solve['x^3+2*x^2+1']y =Phạm Hùng Kim KhánhTrang 85Giáo trình MatLabSymbolic- 4/[9*[43/54 - [59^[1/2]*108^[1/2]]/108]^[1/3]][43/54 - 1/108*59^[1/2]*108^[1/2]]^[1/3] - 2/3-2/[9*[43/54[59^[1/2]*108^[1/2]]/108]^[1/3]]+[43/54[59^[1/2]*108^[1/2]]/108]^[1/3]/2[3^[1/2]*i*[4/[9*[43/54 - [59^[1/2]*108^[1/2]]/108]^[1/3]]- [43/54 - 1/108*59^[1/2]*108^[1/2]]^[1/3]]]/2 - 2/32/[9*[43/54[59^[1/2]*108^[1/2]]/108]^[1/3]]+[43/54[59^[1/2]*108^[1/2]]/108]^[1/3]/2+[3^[1/2]*i*[4/[9*[43/54 - [59^[1/2]*108^[1/2]]/108]^[1/3]]- [43/54 - 1/108*59^[1/2]*108^[1/2]]^[1/3]]]/2 - 2/3>> eval[y]ans =-2.20560.1028 - 0.6655i0.1028 + 0.6655i>> [x,y]=solve['x^2+x*y+y=1','x^2-4*y=3']x =-1- 11^[1/2] - 211^[1/2] - 2y =-1/211^[1/2] + 33 - 11^[1/2]>> eval[x]ans =-1.0000Phạm Hùng Kim KhánhTrang 86Giáo trình MatLabSymbolic-5.31661.3166>> eval[y]ans =-0.50006.3166-0.3166Giải phương trình lượng giác:>> solve['2*cos[x]+2']ans =pi>> solve['2*cos[x]']ans =pi/2>> solve['cos[x]=sin[x]']ans =pi/4>> y=solve['exp[x]=tan[x]']y =matrix[[[-226.19467105846511316931032359612]]]>> eval[y]ans =-226.1947Phạm Hùng Kim KhánhTrang 87Giáo trình MatLabSymbolicGiải hệ phương trình:>> y1=sym['2*x1+3*x2-2*x3=1'];>> y2=sym['x1-x2+3*x3=2'];>> y3=sym['x2-2*x3=4'];>> [x1,x2,x3]=solve[y1,y2,y3,'x1,x2,x3']x1 =35/2x2 =-19x3 =-23/2>> y3=sym['x2^2-2*x3=4'];>> [x1,x2,x3]=solve[y1,y2,y3,'x1,x2,x3']x1 =21/64 - [7*329^[1/2]]/64[7*329^[1/2]]/64 + 21/64x2 =329^[1/2]/8 + 5/85/8 - 329^[1/2]/8x3 =[5*329^[1/2]]/64 + 49/6449/64 - [5*329^[1/2]]/64>> eval[[x1,x2,x3]]ans =-1.65582.89232.18272.3120-1.6423-0.6514Phạm Hùng Kim KhánhTrang 88Giáo trình MatLabSymbolicGiải phương trình vi phân:>> y=dsolve['Dy=y*tan[x]+cos[x]','x']kiện đầu%KhôngcóđiềuĐiềukiệny =[x/2 + sin[2*x]/4]/cos[x] + C5/cos[x]>> simplify[y]ans =[4*C5 + 2*x + sin[2*x]]/[4*cos[x]]>> pretty[y]xsin[2 x]- + -------24C5------------ + -----cos[x]>>y[0]=1cos[x]y=dsolve['Dy=1+y^2','y[0]=1','x']%đầuy =tan[pi/4 + x]>> y=dsolve['D2y=cos[2*x]-y','Dy[0]=1','y[0]=1','x']Giải phương trình vi phân cấp 2%y =Phạm Hùng Kim KhánhTrang 89Giáo trình MatLabSymbolic[5*cos[x]]/3+sin[x]+[8*tan[x/2]^2*sin[x]]/[3*[tan[x/2]^2[2*cos[x]*[3*tan[x/2]^4+1]]/[3*[tan[x/2]^2 + 1]^3]sin[x]*[sin[x]+1]^2]]6*tan[x/2]^2+>>y= simplify[y]y =[2*tan[x/2]^3 + [16*tan[x/2]^2]/38/3]/[tan[x/2]^2 + 1]^2 - 5/3+2*tan[x/2]+>> pretty[y]/ x \216 tan| - |/ x \32 tan| - |\ 2 // x \8+ ------------ + 2 tan| - | + -\ 2 /3\ 2 /35------------------------------------------- - // x \2| tan| - |\\ 2 /\23+ 1 |/>> y=dsolve['D2y-2*Dy-3*y=0','y[0]=0','y[1]=1','x']y =1/[exp[x]*[1/exp[1] - exp[3]]] - exp[3*x]/[1/exp[1] exp[3]]>> y=simple[y]y =Phạm Hùng Kim KhánhTrang 90Giáo trình MatLabSymbolic[1/exp[x] - exp[3*x]]/[1/exp[1] - exp[3]]>> pretty[y]1------ - exp[3 x]exp[x]----------------1------ - exp[3]exp[1]>> [f,s] = dsolve ['Dz=3*z+4*y', 'Dy=-4*z+3*y''z[0]=0','y[0]=1','x'] %Giải hệ phương trình vi phân,f =cos[4*x]*exp[3*x]s =sin[4*x]*exp[3*x]1.7.Tìm giới hạnDùng hàm limit tìm giới hạn của hàm.>> syms x a t h>> y=limit[sin[x]/x] % x  0y =1>> y=limit[sin[x]/x,inf] % x  y =0>> limit[1/x,x,0,'right'] % Giới hạn phảiPhạm Hùng Kim KhánhTrang 91Giáo trình MatLabSymbolicans =Inf>> limit[1/x,x,0,'left'] % Giới hạn tráians =-Inf>> limit[[sin[x+h]-sin[x]]/h,h,0]ans =cos[x]2. Phần thực hành-Tính và vẽ đạo hàm của hàm số y = sinx3Tính tích phân:∫-Giải hệ phương trình:{-Vẽ mặt có phương trình sau:-Tính đạo hàm cấp 2 của hàm số sau:-Giải các bài toán trong chương 3 bằng cách dùng Symbolic.Phạm Hùng Kim KhánhTrang 92

T véc tơ cột chỉ các thời điểm t.OPTIONS các giá trị tình trạng [xem thêm hàm ODESET]. Giá trị mặc định gồmsai lệch liên kết 'RelTol' = 1e-3 và véc tơ sai lệch tuyệt đối 'AbsTol' = 1e-6 [tất cả cácthành phần]. Nếu không thì OPTIONS=[].P1, P2, ... các tham số của hàm ODEFUN[T,Y,P1,P2,...] nếu có.Ví dụ: »[t,y]=ode45[@vdp1,[0 20],[2 0]];»plot[t,y[:,1]];2. ode23giải các phương trình và hệ phương trình vi phân.3. ode113giải các phương trình và hệ phương trình vi phân.3.6.2 Sử dụng symbolic **Dùng hàm dsolve trong toolbox symbolicCú pháp:dsolve['eqn1','eqn2', ...]Trong đó:‘eqn1’,’eqn2’,... các phương trình vi phân.Cách biểu diễn hàm dựa trên cú pháp D:Dy biểu diễn đạo hàm bậc 1 của hàm y [mặc nhiên]D2y, D3y, ..., DNy đạo hàm bậc 2,3, ..., N của hàm y [không được dùng t]Vậy ký hiệu: D2y biểu diễn của d 2 y//dt 2; Dy là biểu diễn của dy/dtBiến độc lập mặc nhiên là 't'. Nếu muốn thay đổi biến độc lập phải thêm tên biếnđó vào cuối cùng của biểu diễn hàm [không được dùng tên D].Các điều kiện đầu cũng ở dạng phương trình như là 'y[a]=b' hoặc 'Dy[a] = b' với ylà biến độc lập và a, b là các hằng số.Nếu thiếu điều kiện đầu thì các hằng số tích phân mặc nhiên thêm vào C1, C2, ...Với hệ phương trình vi phân, kết quả [nghiệm] là một cấu trúc.Ví dụ 1: »dsolve['Dx = -a*x']ans =exp[-a*t]*C1»x = dsolve['Dx = -a*x','x[0] = 1','s']x=exp[-a*s]»y = dsolve['[Dy]^2 + y^2 = 1','y[0] = 0']68 y=[ sin[t]][ -sin[t]]»S=dsolve['Df=f+g','Dg=-f+g','f[0]=1','g[0]=2'] %trả về cấu trúc SS.f =exp[t]*cos[t]+2*exp[t]*sin[t]S.g =-exp[t]*sin[t]+2*exp[t]*cos[t]»Y = dsolve['Dy = y^2*[1-y]']% Kết quảY=t+1/y-log[y]+log[-1+y]+C1=0Ví dụ 2: phương trình vi phân bậc 1:»y = dsolve['Dy= y0*y'] % giai phuong trinh dy/dt=y0*y %ket quay=C1*exp[y0*t]Chú ý: phương trình sau cho kết quả khác»y = dsolve[‘Dyt= y0*y’] % giai phuong trinh dy/dt=y0*y % ket quay=y0*y*t+C1Ví dụ 3: giải hệ phương trình vi phân đơn giản»[u,v] = dsolve['Du = v', 'Dv = u']u=1/2*C1*exp[t]-1/2*C1*exp[-t]+1/2*C2*exp[-t]+1/2*C2*exp[t]v=1/2*C1*exp[-t]+1/2*C1*exp[t]+1/2*C2*exp[t]-1/2*C2*exp[-t]Ví dụ 4: hệ pt vi phân 3 ẩn với kết quả dạng cấu trúc với 3 ẩn f, g, h»S = dsolve['Df=g','Dg=h','Dh=-f']S=f: [1x1 sym]g: [1x1 sym]h: [1x1 sym]69 Để hiển thị giá trị lệnh dạng cấu trúc, ta dùng cách gọi S.f để biểu diễn nghiệm f,tương tự với các nghiệm S.g, S.h.»S.hans =-1/3*C1*3^[1/2]*exp[1/2*t]*sin[1/2*t*3^[1/2]]1/3*C1*exp[1/2*t]*cos[1/2*t*3^[1/2]]+1/3*C1*exp[-t]1/3*C2*3^[1/2]*exp[1/2*t]*sin[1/2*t*3^[1/2]]+1/3*C2*exp[1/2*t]*cos[1/2*t*3^[1/2]]1/3*C2*exp[-t]+1/3*C3*exp[-t]+2/3*C3*exp[1/2*t]*cos[1/2*t*3^[1/2]]3.7 Các ví dụ ứng dụng **Giải phương trình vi phân với điều kiện đầud3u/dx3 =uu[0] = 1, u'[0] = –1, u''[0] = piTa có câu lệnh:»u = dsolve['D3u=u','u[0]=1','Du[0]=–1','D2u[0] = pi','x']Giải hệ phương trình vi phân có điều kiện đầu[f,g] = dsolve['Df=3*f+4*g, Dg =–4*f+3*g', 'f[0] = 0, g[0] = 1']dsolve['Df = f + sin[t]', 'f[pi/2] = 0']dsolve['D2y = -a^2*y', 'y[0] = 1, Dy[pi/a] = 0']S = dsolve['Dx = y', 'Dy = -x', 'x[0]=0', 'y[0]=1']S = dsolve['Du=v, Dv=w, Dw=-u','u[0]=0, v[0]=0, w[0]=1']w = dsolve['D3w = -w','w[0]=1, Dw[0]=0, D2w[0]=0']y = dsolve['D2y = sin[y]']; pretty[y]70 CHƯƠNG 4.LẬP TRÌNH TRỰC QUAN GIAO DIỆN NGƯỜI DÙNG[GUI: GRAPHIC USER INTERFACE]GUI là công cụ để lập các giao diện đồ hoạ người dùng trực quan “VISUAL”,giúp lập trình viên tạo các nút bấm, Menu điều khiển chương trình theo hướng sự kiện.4.1 Cách xây dựng các nút ấn và menu4.1.1 Phương pháp sử dụng UIMENU và UICONTROLViết một m-file trong đó sử dụng các lệnh uimenu để tạo ra menu và lệnhuicontrol để tạo ra các nút ấn cũng như các đối tượng giao diện khác. Cách này có nhượcđiểm là người sử dụng phải tốn nhiều công sức để truyền các thuộc tính đối tượng bằngdòng lệnh nên yêu cầu lập trình viên phải thành thạo.Ví dụ: Muốn tạo ra nút bấm có tên plot với lệnh Callback là plot[x,y]uicontrol['Style','pushbutton', ...'String','Plot', ...'Callback','plot[x,y]', ...'Units','point', ...'Position',[50 65 75 35]]1. Lệnh uicontrol tạo giao diện điều khiển người dùng.Cú pháp:uicontrol['PropertyName1',value1,'PropertyName2,'value2,...] tạo giao diện điềukhiển người dùng trong cửa sổ hình vẽ hiện tại và trả về một handle.uicontrol[FIG,...] tạo giao diện điều khiển người dùng trong cửa sổ hình vẽ [FIG].Các properties có thể thiết lập cặp tham số PropertyName/PropertyValue cho đốitượng hoặc được thay đổi sau đó bằng lệnh SET.Lệnh get[H] lấy danh sách và giá trị các thuộc tính của đối tượng [H] trongUICONTROL.Lệnh set[H] đặt danh sách và giá trị các thuộc tính của đối tượng [H] trongUICONTROL.2. Lệnh uimenutạo giao diện menu người dùng.Cú pháp:uimenu['PropertyName1',value1,'PropertyName2',value2,...] tạo một menu trênthanh menu bar tại đỉnh trên của cửa sổ hiện tại, và trả về handle.71

Video liên quan

Chủ Đề