声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 1301|回复: 2

用MATLAB中S函数仿真模型参考自适应遇到的问题

[复制链接]
发表于 2007-4-12 10:32 | 显示全部楼层 |阅读模式

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

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

x
我在做感应电机参数辨识,采取模型参考自适应的方法,采用参数误差逼近的方法.用S函数编写控制模型时,遇到一些问题,我的程序如下:
function [sys,x0,str,ts] = ac_model(t,x,u,flag)

switch flag,
   
  case 0,
    [sys,x0,str,ts]=mdlInitializeSizes;
   
  case 1,
    sys=mdlDerivatives(t,x,u);
   
case 3,
    sys=mdlOutputs(t,x,u);
   
case{2,4,9}
    sys=[];

  otherwise
    error(['Unhandled flag = ',num2str(flag)]);

end

function [sys,x0,str,ts]=mdlInitializeSizes(x0);
sizes = simsizes;

sizes.NumContStates  = 7;
sizes.NumDiscStates  = 0;
sizes.NumOutputs     = 7;
sizes.NumInputs      = 10;
sizes.DirFeedthrough = 0;
sizes.NumSampleTimes = 1;  

sys = simsizes(sizes);
x0  = [0;0;0;0;0;0;20];
str = [];
ts  = [0 0];

function sys=mdlDerivatives(t,x,u)
g1=100;g2=500;g3=500;g4=10;g5=10;k=100;
dx(1)=x(3)*u(1)-u(5)*u(2)+x(4)*u(7)+x(5)*u(9)+x(6)*u(5)*u(8)+x(7)*(u(5)*(u(10)+u(3)))-k*u(6);
dx(2)=x(3)*u(2)+u(5)*u(1)+x(4)*u(7)+x(5)*u(10)-x(6)*u(5)*u(7)+x(7)*(u(4)-u(5)*u(9));
dx(3)=-g1*u(6)*u(1);
dx(4)=-g2*u(6)*u(7);
dx(5)=-g3*u(6)*u(9);
dx(6)=-g4*u(6)*u(5)*u(8);
dx(7)=-g5*u(6)*(u(5)*u(10)+u(3));

sys=dx;

function sys=mdlOutput(t,x,u)

tspan=[t0;tf];
options=odeset('RelTol',1e-3,'AbsTol',1e-3);
[t,x]=ode45('ac_model',tspan,x0,options);

if abs(u(6))>1e-8
    sys=[];
else
   sys = [x(1);x(2);x(3);x(4);x(5);x(6);x(7)];
end

老是出现 flag = 3 (output), at time 0. MATLAB error message:
Undefined function or variable 'mdlOutputs'为什么呢?
望不舍赐教,谢谢
回复
分享到:

使用道具 举报

发表于 2007-4-12 11:02 | 显示全部楼层
你定义的是mdlOutput
但你上面用的是mdlOutputs
如红笔所示
function [sys,x0,str,ts] = ac_model(t,x,u,flag)

switch flag,
   
  case 0,
    [sys,x0,str,ts]=mdlInitializeSizes;
   
  case 1,
    sys=mdlDerivatives(t,x,u);
   
case 3,
    sys=mdlOutputs(t,x,u);
   
case{2,4,9}
    sys=[];

  otherwise
    error(['Unhandled flag = ',num2str(flag)]);

end

function [sys,x0,str,ts]=mdlInitializeSizes(x0);
sizes = simsizes;

sizes.NumContStates  = 7;
sizes.NumDiscStates  = 0;
sizes.NumOutputs     = 7;
sizes.NumInputs      = 10;
sizes.DirFeedthrough = 0;
sizes.NumSampleTimes = 1;  

sys = simsizes(sizes);
x0  = [0;0;0;0;0;0;20];
str = [];
ts  = [0 0];

function sys=mdlDerivatives(t,x,u)
g1=100;g2=500;g3=500;g4=10;g5=10;k=100;
dx(1)=x(3)*u(1)-u(5)*u(2)+x(4)*u(7)+x(5)*u(9)+x(6)*u(5)*u(8)+x(7)*(u(5)*(u(10)+u(3)))-k*u(6);
dx(2)=x(3)*u(2)+u(5)*u(1)+x(4)*u(7)+x(5)*u(10)-x(6)*u(5)*u(7)+x(7)*(u(4)-u(5)*u(9));
dx(3)=-g1*u(6)*u(1);
dx(4)=-g2*u(6)*u(7);
dx(5)=-g3*u(6)*u(9);
dx(6)=-g4*u(6)*u(5)*u(8);
dx(7)=-g5*u(6)*(u(5)*u(10)+u(3));

sys=dx;

function sys=mdlOutput(t,x,u)

tspan=[t0;tf];
options=odeset('RelTol',1e-3,'AbsTol',1e-3);
[t,x]=ode45('ac_model',tspan,x0,options);

if abs(u(6))>1e-8
    sys=[];
else
   sys = [x(1);x(2);x(3);x(4);x(5);x(6);x(7)];
end
发表于 2007-4-13 09:43 | 显示全部楼层
细心呀~~
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

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

GMT+8, 2024-12-27 11:36 , Processed in 0.085003 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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