声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 1450|回复: 2

请教几个关于S-FUNCTION的问题

[复制链接]
发表于 2007-5-21 15:44 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
1.编写S函数,M语言还是C语言更方便一些?
2.编写这些函数必须用自带的模板码?
3.C函数转化成M函数,指令是否是“MEX”,但是我用了这个指令,生成文件为什么是*.DLL文件?
回复
分享到:

使用道具 举报

发表于 2007-5-21 16:21 | 显示全部楼层
1:M语言和C语言哪个方便这个问题,当然M文件方便些,不用转化,当然你想用什么语言写都行,看你哪个方面强些:)总之,条条大路通罗马.
2:一般情况下都用自带的模板,因为S函数有它特定的形式但也可以写成下面的样子
function [sys,x0]=bbmodel(t,x,u,flag)

if abs(flag) == 1
   sys(1)=x(2);
   sys(2)=0.7143*(x(1)*x(2)^2-9.81*sin(x(3)));
   sys(3)=x(4);
   sys(4)=u;
%with disturbence
%   sys(4)=u+sin(20*t);

  elseif flag == 3
    sys=x;
   
  elseif flag == 0
    x0=[2.4;-0.1;0.6;0.1];
    %x0=[1.6;0.05;-0.6;-0.05];
    %x0=[-1.6;-0.05;0.6;0.05];
    %x0=[-2.4;0.1;-0.6;-0.1];
    %x0=[0.1;0;-1.5;0];
    sizes(1)=4;     %number of continuous states
    sizes(2)=0;     %number of discrete states
    sizes(3)=4;     %number of outputs  
    sizes(4)=1;     %number of inputs
    sizes(5)=0;     %number of discontinuous roots
    sizes(6)=0;     %flag of direct feedthough...
                    %(used for finding algebraic loops)
    sys=sizes;

  else
    sys = [ ];
end
也就是说function [sys,x0]=bbmodel(t,x,u,flag)必须要有,然后根据FLAG来写。
如果你是纯的M文件,那么可以采用MATLAB FCN
3:看下http://forum.vibunion.com/forum/ ... ght=mex%CE%C4%BC%FE
你看下simulink的help里面的S函数的介绍,里面有如何用C来写S函数等等你所问的问题。
 楼主| 发表于 2007-5-22 12:25 | 显示全部楼层
:handshake 谢谢你的解答。
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-12-26 21:17 , Processed in 0.117042 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表