注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

易拉罐的博客

心静自然凉

 
 
 

日志

 
 

转 关于matlab中s-function参数设置的两个例子讲解  

2012-07-31 19:08:11|  分类: matlab仿真 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

例  采用S函数实现模块y=nx,即模块的功能是把一个输入信号n倍以后再输出。

(1) 利用MATLAB语言编写S函数。程序如下:
%*************************************************
%S函数timesn.m,其输出是输入的n倍
%*************************************************
function [sys,x0,str,ts]=timesn(t,x,u,flag,n)
switch flag,
case 0 %初始化
[sys,x0,str,ts]=mdlInitializeSizes;
case 3 %计算输出量
sys=mdlOutputs(t,x,u,n);
case {1,2,4,9} %未使用的flag 值
sys=[];
otherwise %出错处理
error(['Unhandle flag=',num2str(flag)]);
end
%*************************************************
%mdlInitializeSizes:当flag为0 时进行整个系统的初始化
%*************************************************

function [sys,x0,str,ts]=mdlInitializeSizes(T) %调用函数simsizes以创建结构体sizes
sizes=simsizes;
%用初始化信息填充结构体sizes
sizes.NumContStates=0; %无连续状态
sizes.NumDiscStates=0; %无离散状态
sizes.NumOutputs=1; %有一个输出量
sizes.NumInputs=1; %有一个输入信号
sizes.DirFeedthrough=1; %输出量中含有输入量
sizes.NumSampleTimes=1; %单个采样周期
%根据上面的设置设定系统初始化参数
sys=simsizes(sizes);
%给其他返回参数赋值。
x0=[]; %设置初始状态为零状态
str=[]; %将str变量设置为空字符串
ts=[-1,0]; %假定继承输入信号的采样周期
%初始化子程序结束
%*************************************************
%mdlOutputs:当flag值为3时,计算输出量
%*************************************************
function sys=mdlOutputs(t,x,u,n)
sys=n*u;
%输出量计算子程序结束。

 (2) 模块的封装与测试。

转 关于matlab中s-function参数设置的两个例子讲解 - 易拉罐bb - 易拉罐的博客 
转 关于matlab中s-function参数设置的两个例子讲解 - 易拉罐bb - 易拉罐的博客
转 关于matlab中s-function参数设置的两个例子讲解 - 易拉罐bb - 易拉罐的博客
 

 例  采用S函数来构造非线性分段函数。

转 关于matlab中s-function参数设置的两个例子讲解 - 易拉罐bb - 易拉罐的博客

 (1) 利用MATLAB语言编写S函数。程序如下:

function [sys,x0,str,ts]=sfunction(t,x,u,flag)
switch flag,
    case 0,
        [sys,x0,str,ts]=mdlInitializeSizes;
    case 3,
        sys=mdlOutputs(t,x,u);
    case {1,2,4,9}
        sys=[];
    otherwise
        error(['Unhandled flag=',num2str(flag)]);
end
function[sys,x0,str,ts]=mdlInitializeSizes
sizes= simsizes;
sizes.NumContStates= 0;
sizes.NumDiscStates= 0;
sizes.NumOutputs= 1;
sizes.NumInputs= 1;
sizes.DirFeedthrough= 1;
sizes.NumSampleTimes= 1;
sys=simsizes(sizes);
x0=[];
str=[];
ts=[0 0];
function sys=mdlOutputs(t,x,u)
if u<1
    sys=3*sqrt(u);
elseif u>=1&u<3
    sys=3;
elseif  u>=3&u<4
    sys=3-(u-3)^2;
elseif u>=4&u<5
    sys=2;
elseif u>=5&u<6
    sys=2-(u-5)^2;
else
    sys=1;
end
(2) 模块的测试。

转 关于matlab中s-function参数设置的两个例子讲解 - 易拉罐bb - 易拉罐的博客 
转 关于matlab中s-function参数设置的两个例子讲解 - 易拉罐bb - 易拉罐的博客 
转 关于matlab中s-function参数设置的两个例子讲解 - 易拉罐bb - 易拉罐的博客
  评论这张
 
阅读(1057)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017