[已答复] s-function中调用matlab函数问题

[复制链接]
青山依旧 发表于 2008-12-7 20:26:14
大家好,在编写s函数时需要调用matlab的辛普森积分函数,但总是遇到问题,现在把程序放出来希望高手解答谢谢!
function [sys,x0,str,ts] = test(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,
    sys=mdlGetTimeOfNextVarHit(t,x,u);
  case 9,
    sys=mdlTerminate(t,x,u);
  otherwise
    error(['Unhandled flag = ',num2str(flag)]);
end
function [sys,x0,str,ts]=mdlInitializeSizes
sizes = simsizes;
sizes.NumContStates  = 0;
sizes.NumDiscStates  = 0;
sizes.NumOutputs     = 2;
sizes.NumInputs      = 1;
sizes.DirFeedthrough = 1;
sizes.NumSampleTimes = 1;   % at least one sample time is needed

sys = simsizes(sizes);
x0  = [];
str = [];
ts  = [0 0];
function sys=mdlDerivatives(t,x,u)
sys = [];
function sys=mdlUpdate(t,x,u)
sys = [];

function sys=mdlOutputs(t,x,u)

if u<500
a=0;
b=0;
else if u>500 & u<570
        a=(0-1/sk(1,4))/(sk(1,1)-sk(1,3));
        b=0-a*sk(1,1);
    else
        a=0;
        b=1/sk(1,4);
    end
end
k=a*u+b;
fxj=quad('k',0,u);
xzb=100+quad('cos(fxj)',0,u);
yzb=100+quad('sin(fxj)',0,u);
sys = [xzb,yzb];

function sys=mdlGetTimeOfNextVarHit(t,x,u)

sampleTime = 1;    %  Example, set the next hit to be one second later.
sys = t + sampleTime;

function sys=mdlTerminate(t,x,u)

sys = [];

% end mdlTerminate


这是错误提示:Undefined function or method 'k' for input arguments of type 'double'.
可能是K这个函数错了,我定义K=a*u+b;

6 条回复


anbcjys 发表于 2008-12-8 08:36:40
写成quad(@(x)a*u+b;,0,2); 不过你这个问题用不着s函数。

青山依旧 发表于 2008-12-8 15:24:19
原帖由 anbcjys 于 2008-12-8 08:36 发表
写成quad(@(x)a*u+b;,0,2); 不过你这个问题用不着s函数。


你好,我按照你的方法试了一下,好像又出现新的问题
出错提示是Index exceeds matrix dimensions.

青山依旧 发表于 2008-12-8 16:51:50
原帖由 青山依旧 于 2008-12-8 15:24 发表


你好,我按照你的方法试了一下,好像又出现新的问题
出错提示是Index exceeds matrix dimensions.


可能是quad(@(x)a*u+b,0,u)这里有问题,我换成quad(@(x)a*x+b,0,u)然后仿真就没问题

青山依旧 发表于 2008-12-8 17:06:25
问题解决了一部分,计算fxj=quad(@(x)a*x+b,0,u)现在搞定了
但是xzb=100+quad('cos(fxj)',0,u);和yzb=100+quad('sin(fxj)',0,u);不知怎么算
我试着把fxj=quad(@(x)a*x+b,0,u)代入得到xzb=100+quad(@(x)cos(quad(@(x)a*x+b,0,u)),0,u);但仿真后出现错误提示:Index exceeds matrix dimensions.
该怎么解决,其实我想就是一个双重积分吧?

Gaub-HIT 发表于 2012-12-26 14:21:19
大牛   怎么解决的?:)

laihaibin08 发表于 2012-12-26 16:54:22
学习了,解决了我的一个疑问。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

相关帖子
相关文章
热门教程
站长推荐
快速回复 返回顶部 返回列表