资源描述:
《利用matlab编写s函数求解微分方程》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、自动化专业综合设计报告自动化专业综合设计报告设计题目:利用matlab编写S函数求解微分方程所在实验室:自动化系统仿真实验室指导教师:郭卫平学生姓名律迪迪班级文自0921学号200990519114成绩评定:自动化专业综合设计报告一、设计目的了解使用simulink的扩展工具——S-函数,s函数可以利用matlab的丰富资源,而不仅仅局限于simulink提供的模块,而用c或c++等语言写的s函数还可以实现对硬件端口的操作,还可以操作windowsAPI等的,它的魅力在于完美结合了simulink框图简洁明快的特点和编程灵活方便的优点,提供
2、了增强和扩展sinulink能力的强大机制,同时也是使用RTW实现实时仿真的关键。二、设计要求求解解微分方程y’=y-2x/yy(0)=1要求利用matlab编写S函数求解三、设计内容(可加附页)【步骤1】获取状态空间表达式。在matlab中输入dsolve(‘Dy=y-2*x/y’,’y(0)=1’,’x’)得到y=(2*x+1).^(1/2);【步骤2】建立s函数的m文件。利用21·用S函数模板文件。以下是修改之后的模板文件sfuntmpl.m的内容。function[sys,x0,str,ts]=sfuntmpl(t,x,u,flag
3、)%SFUNTMPLGeneralM-fileS-functiontemplate%WithM-fileS-functions,youcandefineyouownordinarydifferential%equations(ODEs),discretesystemequations,and/orjustabout%anytypeofalgorithmtobeusedwithinaSimulinkblockdiagram.%%ThegeneralformofanM-FileS-functionsyntaxis:%[SYS,X0,STR,TS
4、]=SFUNC(T,X,U,FLAG,P1,...,Pn)%%WhatisreturnedbySFUNCatagivenpointintime,T,dependsonthe%valueoftheFLAG,thecurrentstatevector,X,andthecurrent%inputvector,U.%%FLAGRESULTDESCRIPTION%-------------------------------------------------------%0[SIZES,X0,STR,TS]Initialization,return
5、systemsizesinSYS,%initialstateinX0,stateorderingstrings自动化专业综合设计报告%inSTR,andsampletimesinTS.%1DXReturncontinuousstatederivativesinSYS.%2DSUpdatediscretestatesSYS=X(n+1)%3YReturnoutputsinSYS.%4TNEXTReturnnexttimehitforvariablestepsample%timeinSYS.%5Reservedforfuture(rootfin
6、ding).%9[]Termination,performanycleanupSYS=[].%%%Thestatevectors,XandX0consistsofcontinuousstatesfollowed%bydiscretestates.%%Optionalparameters,P1,...,PncanbeprovidedtotheS-functionand%usedduringanyFLAGoperation.%%WhenSFUNCiscalledwithFLAG=0,thefollowinginformation%shouldb
7、ereturned:%%SYS(1)=Numberofcontinuousstates.%SYS(2)=Numberofdiscretestates.%SYS(3)=Numberofoutputs.%SYS(4)=Numberofinputs.%AnyofthefirstfourelementsinSYScanbespecified%as-1indicatingthattheyaredynamicallysized.The%actuallengthforallotherflagswillbeequaltothe%lengthoftheinp
8、ut,U.%SYS(5)=Reservedforrootfinding.Mustbezero.%SYS(6)=Directfeedthroughflag(1=yes,0=no).