利用matlab编写S函数求解微分方程.docx

上传人:b****5 文档编号:27948122 上传时间:2023-07-06 格式:DOCX 页数:11 大小:37.80KB
下载 相关 举报
利用matlab编写S函数求解微分方程.docx_第1页
第1页 / 共11页
利用matlab编写S函数求解微分方程.docx_第2页
第2页 / 共11页
利用matlab编写S函数求解微分方程.docx_第3页
第3页 / 共11页
利用matlab编写S函数求解微分方程.docx_第4页
第4页 / 共11页
利用matlab编写S函数求解微分方程.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

利用matlab编写S函数求解微分方程.docx

《利用matlab编写S函数求解微分方程.docx》由会员分享,可在线阅读,更多相关《利用matlab编写S函数求解微分方程.docx(11页珍藏版)》请在冰豆网上搜索。

利用matlab编写S函数求解微分方程.docx

利用matlab编写S函数求解微分方程

利用matlab编写S函数求解微分方程

 

自动化专业综合设计报告

 

设计题目:

利用matlab编写S函数求解微分方程

所在实验室:

自动化系统仿真实验室

指导教师:

郭卫平

学生姓名律迪迪

班级文自0921学号200990519114

成绩评定:

 

一、设计目的

了解使用simulink的扩展工具——S-函数,s函数可以利用matlab的丰富资源,而不仅仅局限于simulink提供的模块,而用c或c++等语言写的s函数还可以实现对硬件端口的操作,还可以操作windowsAPI等的,它的魅力在于完美结合了simulink框图简洁明快的特点和编程灵活方便的优点,提供了增强和扩展sinulink能力的强大机制,同时也是使用RTW实现实时仿真的关键。

二、设计要求

求解解微分方程

y’=y-2x/y

y(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)

%SFUNTMPLGeneralM-fileS-functiontemplate

%WithM-fileS-functions,youcandefineyouownordinarydifferential

%equations(ODEs),discretesystemequations,and/orjustabout

%anytypeofalgorithmtobeusedwithinaSimulinkblockdiagram.

%

%ThegeneralformofanM-FileS-functionsyntaxis:

%[SYS,X0,STR,TS]=SFUNC(T,X,U,FLAG,P1,...,Pn)

%

%WhatisreturnedbySFUNCatagivenpointintime,T,dependsonthe

%valueoftheFLAG,thecurrentstatevector,X,andthecurrent

%inputvector,U.

%

%FLAGRESULTDESCRIPTION

%-------------------------------------------------------

%0[SIZES,X0,STR,TS]Initialization,returnsystemsizesinSYS,

%initialstateinX0,stateorderingstrings

%inSTR,andsampletimesinTS.

%1DXReturncontinuousstatederivativesinSYS.

%2DSUpdatediscretestatesSYS=X(n+1)

%3YReturnoutputsinSYS.

%4TNEXTReturnnexttimehitforvariablestepsample

%timeinSYS.

%5Reservedforfuture(rootfinding).

%9[]Termination,performanycleanupSYS=[].

%

%

%Thestatevectors,XandX0consistsofcontinuousstatesfollowed

%bydiscretestates.

%

%Optionalparameters,P1,...,PncanbeprovidedtotheS-functionand

%usedduringanyFLAGoperation.

%

%WhenSFUNCiscalledwithFLAG=0,thefollowinginformation

%shouldbereturned:

%

%SYS

(1)=Numberofcontinuousstates.

%SYS

(2)=Numberofdiscretestates.

%SYS(3)=Numberofoutputs.

%SYS(4)=Numberofinputs.

%AnyofthefirstfourelementsinSYScanbespecified

%as-1indicatingthattheyaredynamicallysized.The

%actuallengthforallotherflagswillbeequaltothe

%lengthoftheinput,U.

%SYS(5)=Reservedforrootfinding.Mustbezero.

%SYS(6)=Directfeedthroughflag(1=yes,0=no).Thes-function

%hasdirectfeedthroughifUisusedduringtheFLAG=3

%call.Settingthisto0isakintomakingapromisethat

%UwillnotbeusedduringFLAG=3.Ifyoubreakthepromise

%thenunpredictableresultswilloccur.

%SYS(7)=Numberofsampletimes.ThisisthenumberofrowsinTS.

%

%

%X0=Initialstateconditionsor[]ifnostates.

%

%STR=Stateorderingstringswhichisgenerallyspecifiedas[].

%

%TS=Anm-by-2matrixcontainingthesampletime

%(period,offset)information.Wherem=numberofsample

%times.Theorderingofthesampletimesmustbe:

%

%TS=[00,:

Continuoussampletime.

%01,:

Continuous,butfixedinminorstep

%sampletime.

%PERIODOFFSET,:

Discretesampletimewhere

%PERIOD>0&OFFSET

%-20];:

Variablestepdiscretesampletime

%whereFLAG=4isusedtogettimeof

%nexthit.

%

%Therecanbemorethanonesampletimeproviding

%theyareorderedsuchthattheyaremonotonically

%increasing.Onlytheneededsampletimesshouldbe

%specifiedinTS.Whenspecifyingthanone

%sampletime,youmustcheckforsamplehitsexplicitlyby

%seeingif

%abs(round((T-OFFSET)/PERIOD)-(T-OFFSET)/PERIOD)

%iswithinaspecifiedtolerance,generally1e-8.This

%toleranceisdependentuponyourmodel'ssamplingtimes

%andsimulationtime.

%

%YoucanalsospecifythatthesampletimeoftheS-function

%isinheritedfromthedrivingblock.Forfunctionswhich

%changeduringminorsteps,thisisdoneby

%specifyingSYS(7)=1andTS=[-10].Forfunctionswhich

%areheldduringminorsteps,thisisdonebyspecifying

%SYS(7)=1andTS=[-11].

%Copyright1990-2002TheMathWorks,Inc.

%$Revision:

1.18$

%

%ThefollowingoutlinesthegeneralstructureofanS-function.

%

switchflag,

%%%%%%%%%%%%%%%%%%

%Initialization%

%%%%%%%%%%%%%%%%%%

case0,

[sys,x0,str,ts]=mdlInitializeSizes;

%%%%%%%%%%%%%%%

%Derivatives%

%%%%%%%%%%%%%%%

case1,

sys=mdlDerivatives(t,x,u);

%%%%%%%%%%

%Update%

%%%%%%%%%%

case{2,3,9},

sys=[];

%%%%%%%%%%%

%Outputs%

%%%%%%%%%%%

 

%%%%%%%%%%%%%%%%%%%%%%%

%GetTimeOfNextVarHit%

%%%%%%%%%%%%%%%%%%%%%%%

%%%%%%%%%%%%%

%Terminate%

%%%%%%%%%%%%%

 

%%%%%%%%%%%%%%%%%%%%

%Unexpectedflags%

%%%%%%%%%%%%%%%%%%%%

otherwise

error(['Unhandledflag=',num2str(flag)]);

end

%endsfuntmpl

%

%=============================================================================

%mdlInitializeSizes

%Returnthesizes,initialconditions,andsampletimesfortheS-function.

%=============================================================================

%

function[sys,x0,str,ts]=mdlInitializeSizes

%

%callsimsizesforasizesstructure,fillitinandconvertittoa

%sizesarray.

%

%Notethatinthisexample,thevaluesarehardcoded.Thisisnota

%recommendedpracticeasthecharacteristicsoftheblockaretypically

%definedbytheS-functionparameters.

%

sizes=simsizes;

sizes.NumContStates=1;

sizes.NumDiscStates=0;

sizes.NumOutputs=0;

sizes.NumInputs=0;

sizes.DirFeedthrough=1;

sizes.NumSampleTimes=1;%atleastonesampletimeisneeded

sys=simsizes(sizes);

%

%initializetheinitialconditions

%

x0=[01.0000];

%

%strisalwaysanemptymatrix

%

str=[];

%

%initializethearrayofsampletimes

%

ts=[00];

%endmdlInitializeSizes

%

%=============================================================================

%mdlDerivatives

%Returnthederivativesforthecontinuousstates.

%=============================================================================

%

functionsys=mdlDerivatives(t,x,u)

sys

(1)=(u-2*x/u)*t+u;

【步骤3】利用matlab调用函数得到结果。

利用sys=sfuntmpl([],[x],[],1)调用S函数,

替换x得到不同的结果

四、设计实验结果及分析

替换不同德x得到不同结果。

为检验结果是否正确

在命令窗口运行

x1

(1)=0;y1

(1)=1;h=0.1;

fork=1:

10

x1(k+1)=x1(k)+h;

end

x=0:

0.1:

1;

y=(2*x+1).^(1/2);

x1=x1(1:

11),y=y(1:

11),

与S函数所对应,所以上述实验结果正确。

五、结论

上述为本次解微分方程得到的结果。

六、设计感受

通过本次试验充分理解了S函数的框图简洁明快的特点和编程灵活方便的优点。

同时复习总结了matlab程序的使用。

实验过程遇到得问题通过咨询老师,同学讨论,查阅资料的都得到了解决,充分锻炼了自己认识问题解决问题的能力。

另外,通过本次实验回忆起好多以前学过的知识,不仅在本次实验中得到应用更对以后的学习生活起到了极大的启发。

编译时间总是那么短暂,不知不觉本次课程设计就要结束,严谨的程序语句,适当的编译顺序是我本次课程设计的最大收获,相信这对我以后的课程设计、毕业设计乃至工作生活的影响都是巨大的。

通过分组形式的进行课程设计,加强了同学间的交流与了解,也在不断的培养团队精神,团队意识就体现在组员之间的默契协作.以确保做的项目能够保质保量按期完成,在设计中出现的问题,也不仅限于组员间协商解决,但前提是组员的努力还是没法解决,可以向其他同学或是指导老师寻求帮助,最终将问题解决.

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > PPT模板 > 动态背景

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1