问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

matlab编写s函数,求解

发布网友 发布时间:2022-04-24 01:28

我来回答

1个回答

热心网友 时间:2023-10-18 13:40

就这个模型而言,我看不出使用S函数实现有什么好处。

 

如果用S函数实现,会涉及到一些具体的问题:

1、这些常数是在S函数中直接定义,还是要求可以在外部修改(例如在基本工作区中定义)?

2、是否需要把输入独立出来?mg项与状态无关,原则上可以作为一个输入处理,但也可以直接放在S函数里面。

3、初值是否要求从外部指定?

这几个方面的问题都是可以解决的,但取决于要求高低,实现的复杂程度不一样。

 

这里姑且按照最简单的情况来处理,即:

1、常数直接在S函数内部定义;

2、把m*g作为系统模型的一部分,不视为输入,而直接放在S函数中;

3、初值直接在S函数中,不从外部指定。

 

参考代码(只列出修改了的mdlInitializeSizes、mdlDerivatives和mdlOutputs三个函数,其它代码与模板sfuntmpl中的内容完全相同):

function [sys,x0,str,ts,simStateCompliance]=mdlInitializeSizes
%
% call simsizes for a sizes structure, fill it in and convert it to a
% sizes array.
%
% Note that in this example, the values are hard coded.  This is not a
% recommended practice as the characteristics of the block are typically
% defined by the S-function parameters.
%
sizes = simsizes;
sizes.NumContStates  = 2;
sizes.NumDiscStates  = 0;
sizes.NumOutputs     = 1;
sizes.NumInputs      = 0;
sizes.DirFeedthrough = 0;
sizes.NumSampleTimes = 1;   % at least one sample time is needed
sys = simsizes(sizes);
%
% initialize the initial conditions
%
x0  = [0; 0];
%
% str is always an empty matrix
%
str = [];
%
% initialize the array of sample times
%
ts  = [0 0];

% Specify the block simStateCompliance. The allowed values are:
%    'UnknownSimState', < The default setting; warn and assume DefaultSimState
%    'DefaultSimState', < Same sim state as a built-in block
%    'HasNoSimState',   < No sim state
%    'DisallowSimState' < Error out when saving or restoring the model sim state
simStateCompliance = 'UnknownSimState';
% end mdlInitializeSizes

function sys=mdlDerivatives(t,x,u)
k=5;
a1=1;
a2=1;
g=10;
m=70;
f = -k*x(1) * (x(1)>0);
sys = [x(2); (m*g+f-a1*x(2)-a2*x(2)*abs(x(2)))/m];
% end mdlDerivatives  

function sys=mdlOutputs(t,x,u)
sys = x(1);
% end mdlOutputs

热心网友 时间:2023-10-18 13:40

就这个模型而言,我看不出使用S函数实现有什么好处。

 

如果用S函数实现,会涉及到一些具体的问题:

1、这些常数是在S函数中直接定义,还是要求可以在外部修改(例如在基本工作区中定义)?

2、是否需要把输入独立出来?mg项与状态无关,原则上可以作为一个输入处理,但也可以直接放在S函数里面。

3、初值是否要求从外部指定?

这几个方面的问题都是可以解决的,但取决于要求高低,实现的复杂程度不一样。

 

这里姑且按照最简单的情况来处理,即:

1、常数直接在S函数内部定义;

2、把m*g作为系统模型的一部分,不视为输入,而直接放在S函数中;

3、初值直接在S函数中,不从外部指定。

 

参考代码(只列出修改了的mdlInitializeSizes、mdlDerivatives和mdlOutputs三个函数,其它代码与模板sfuntmpl中的内容完全相同):

function [sys,x0,str,ts,simStateCompliance]=mdlInitializeSizes
%
% call simsizes for a sizes structure, fill it in and convert it to a
% sizes array.
%
% Note that in this example, the values are hard coded.  This is not a
% recommended practice as the characteristics of the block are typically
% defined by the S-function parameters.
%
sizes = simsizes;
sizes.NumContStates  = 2;
sizes.NumDiscStates  = 0;
sizes.NumOutputs     = 1;
sizes.NumInputs      = 0;
sizes.DirFeedthrough = 0;
sizes.NumSampleTimes = 1;   % at least one sample time is needed
sys = simsizes(sizes);
%
% initialize the initial conditions
%
x0  = [0; 0];
%
% str is always an empty matrix
%
str = [];
%
% initialize the array of sample times
%
ts  = [0 0];

% Specify the block simStateCompliance. The allowed values are:
%    'UnknownSimState', < The default setting; warn and assume DefaultSimState
%    'DefaultSimState', < Same sim state as a built-in block
%    'HasNoSimState',   < No sim state
%    'DisallowSimState' < Error out when saving or restoring the model sim state
simStateCompliance = 'UnknownSimState';
% end mdlInitializeSizes

function sys=mdlDerivatives(t,x,u)
k=5;
a1=1;
a2=1;
g=10;
m=70;
f = -k*x(1) * (x(1)>0);
sys = [x(2); (m*g+f-a1*x(2)-a2*x(2)*abs(x(2)))/m];
% end mdlDerivatives  

function sys=mdlOutputs(t,x,u)
sys = x(1);
% end mdlOutputs

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
东北人眼中的南方人? 酒店管理研究生就业很难吗 在美国学酒店管理的就业前景 怎么样 美国酒店管理研究生的就业前景怎么样? 流放者柯南克立尔城堡在哪 克立尔的堡垒怎么进入 《刺客信条》兄弟会全版修改哪里有? 跪求 我的猫用直流12V直接供电 现在烧毁 打开电源现在无反应 应该是... 感情爱上你一生不放弃,是什么歌曲名字里的歌词 起亚嘉华商务车天一热空调就不工作 利用matlab M文件编写S函数的问题 matlab中S函数的编程问题 求助建立一个MATLAB中S函数的建立及用法 在matlab中如何编写多输入输出的s函数 屏幕上有条纹怎么回事? MATLAB S函数中的mdlDerivatives是怎么应用的?讲的越详细越好。 matlab中的s函数里可以调用函数吗 MATLAB中S函数问题。 matlab s函数 在MATLAB中S函数怎么生成? Matlab中的m函数,S函数,C函数都有什么区别,分别用在什么地方? ie浏览器使用出错 我的IE浏览器出错了该怎么办啊 IE浏览器出错崩溃的问题怎么解决? 为什么我的电脑浏览器功能异常,窗口布局混乱页面内容显示不正常?, 如果自己不关注过微信运动别人的微信榜上会显示自己的步数吗? ie浏览器经常出错是怎么回事 电脑上有一个插件可能导致IE功能异常,但电脑管家杀毒杀了好多次还是 电脑IE异常 IE浏览器不好用了怎么办? 乔司中国银行可以拉征信报告吗? Matlab中S函数怎么编写呀? 手机出现条纹,怎么回事? 关于matlab中S函数的问题 在MATLAB中用C语言编写S函数时,怎么生成动态链接库(DLL)文件 使用Matlab建立个simulink模型,其中用到 S函数,在执行时,S函数在一个步长时间周期里执行几次? MATLAB里面已知开环传递函数怎么写S函数? 3岁孩子离婚判给谁 3岁孩子离婚后应当判给谁 苹果14系统怎么更新下载 离婚三岁孩子一般判给谁 如何快速获取iOS10.2描述文件 你见过最好看的品牌logo是什么? 有哪些大学的logo很好看? 什么牌子的汽车的,标志最帅,最酷? 有哪些大学的 logo 很好看? 有没有象这样很帅的标志 我的吉利ICON,帅就完事了,展示它的魅力 家政公司的服务内容能做哪些 哪个logo帅!