如何在S函数中对变量或者输入信号进行求导 |
您所在的位置:网站首页 › z的一阶导数怎么写 › 如何在S函数中对变量或者输入信号进行求导 |
如何在S函数中对变量或者输入信号进行求导 经常在有的时候,我们需要使用S函数来进行仿真,但是有的时候我们往往需要对变量进行求导或者积分。看到这里,你可能会问在S函数的output函数的输出结果不是会对mdlDerivative函数的输出结果进行积分么?这个确实不假,但是有的时候你需要在其他函数中用到这个变量的积分,那这个时候应该怎么办呢?或者需要对变量进行求导呢?我们知道diff函数是用来对变量或者函数进行求导的,但是在S函数中变量只是一个时刻的采样点,根据数学我们知道都一个数进行求导,那么结果进行为零的。 自己经过一段的时间的折腾,好像也折腾出了一点的结果,因此分享出来和大家讨论一下,大家应该也有更好的方法,或者建议。废话太多了,直接上代码吧! function [sys,x0,str,ts]=daoshu(t,x,u,flag) switch flag, case 0, [sys,x0,str,ts]=mdlInitializeSizes; case 1, sys=mdlDerivatives(t,x,u); case 2, sys=mdlUpdate(t,x,u); case 3, sys=mdlOutputs(t,x,u); case { 4, 9 } sys = []; otherwise error([‘Unhandled flag = ‘,num2str(flag)]); end function [sys,x0,str,ts]=mdlInitializeSizes sizes = simsizes; sizes.NumContStates =1; %连续状态 sizes.NumDiscStates = 2; %离散状态 sizes.NumOutputs = 3; sizes.NumInputs = 1; sizes.DirFeedthrough = 1; sizes.NumSampleTimes = 0; sys=simsizes(sizes); x0=[0,0,0]; str=[]; ts=[]; function sys=mdlDerivatives(t,x,u) %实现对输入的积分 x(1)=u(1); sys=x(1); function sys=mdlUpdate(t,x,u) %实现对输入的求导 x(2)=u(1); x(3)=t; sys=[x(2),x(3)]; function sys=mdlOutputs(t,x,u) if (t-x(3))>0 %避免在最初的一个采样点,分母为零,导致输出结果异常的大 dt=(u(1)-x(2))/(t-x(3)); else dt=0; end xx=x(1); sys = [xx,dt,u(1)]; 模型图 |
今日新闻 |
点击排行 |
|
推荐新闻 |
图片新闻 |
|
专题文章 |
CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭 |