找回密码
 注册
Simdroid-非首页
查看: 136|回复: 9

S-function during flag=1 call must be a real vector of length 4.

[复制链接]
发表于 2009-3-27 15:05:21 | 显示全部楼层 |阅读模式 来自 上海
运行S函数时,提示错误“during flag=1 call must be a real vector of length 4.”
程序是 :
function [sys,x0,str,ts]=sregulation_k(t,x,u,flag)
switch flag
    case  0
sizes=simsizes;
sizes.NumContStates=4;
sizes.NumDiscStates=0;
sizes.NumOutputs=4;
sizes.NumInputs=2;
sizes.DirFeedthrough=1;
sizes.NumSampleTimes=1;
sys=simsizes(sizes);
x0=[0 0 0 0]';str=[ ];ts=[0 0];
   case 1   
    sys=mdlderiative(t,x,u);
   case  3
   C=diag([1 1 1 1]);D=[0 0];
          sys=C*x+D*u;
    case {2 4 9}
   sys=[];
    otherwise
    error(['unvalid flag=',num2str(flag)]);
end;
%================================
function sys=mdlderiative(t,x,u)
     if t<=10
            speed=10;
        elseif t<=20
            speed=30;
        elseif  t<=30
            speed=20;
        elseif  t<=40
            speed=25;
        else
            speed=15;
        end
Mw=40;Mb=320;Ks=2*10^5;Kt=2*10^6;Cs=1000;
A11=-Cs/Mb;A12=-A11;A13=-Ks/Mb;A14=-A13;
A21=Cs/Mw;A22=-A21;A23=Ks/Mw;A24=(-Kt-Ks)/Mw;
A=[A11 A12 A13 A14;...
    A21 A22 A23 A24;...
    1 0 0 0;...
    0 1 0 0];
B11=1/Mb;B12=-1/Mw;A25=Kt/Mw;
B1=[B11 B12 0 0]';%U
B2=[0 A25 0 0]';%Xg
B=[B1,B2];
C=[1 0 0 0];
D=[0 0];
%===============================
t1=[0.0:0.005:50]';
w1=wgn(10001,1,20);%wgn
fo=0.1;Go=5.0*10^(-6);
A55=-2*pi*fo;F5=2*pi*sqrt(Go*speed);
a=[A55];b=[F5];c=[1];d=[0];
sys_xg=ss(a,b,c,d);
[xg,t]=lsim(sys_xg,w1,t1);
Qn=var(xg);
Rn=0.03*Qn;
Nn=0;
%===============================
sys_plant=ss(A,B,C,D);
[kest,L,P] = kalman(sys_plant,Qn,Rn,Nn);
sys_kalman=ss(kest.a ,kest.b ,kest.c([2 3 4 5],:),kest.d([2 3 4 5],:));
sys=kest.a*x+kest.b*[u(1) u(2)]';
 楼主| 发表于 2009-3-27 15:27:47 | 显示全部楼层 来自 上海
Simdroid开发平台
S函数求解状态时,没有 ’a real vector ‘ ,图像显示出现极大值
[img][/img]
回复 不支持

使用道具 举报

 楼主| 发表于 2009-3-27 15:44:48 | 显示全部楼层 来自 上海
在网上找到相关信息: “flag=1这个回调函数中,自己书写的函数(线性或非线性),在MATLAB按照仿真步长求解的时候遇到解为复数或者出现了分母为0等情况,当解为复数的时候应将复数作为实部或者虚部输出,所以报这样的 错误”
不知如何解决?
回复 不支持

使用道具 举报

发表于 2009-11-11 10:46:53 | 显示全部楼层 来自 陕西西安
遇到同样的问题 ,不知楼主解决了没有,探讨一下
回复 不支持

使用道具 举报

发表于 2009-11-11 10:48:05 | 显示全部楼层 来自 陕西西安
貌似要在函数输出时对结果进行判端
回复 不支持

使用道具 举报

发表于 2009-11-12 23:49:12 | 显示全部楼层 来自 北京
在网上找到相关信息: “flag=1这个回调函数中,自己书写的函数(线性或非线性),在MATLAB按照仿真步长求解的时候遇到解为复数或者出现了分母为0等情况,当解为复数的时候应将复数作为实部或者虚部输出,所以报这样 ...
walker 发表于 2009-3-27 15:44

就是这个问题
回复 不支持

使用道具 举报

发表于 2011-3-8 16:23:10 | 显示全部楼层 来自 重庆沙坪坝区
请问个高手,遇到类似问题
“Output returned by S-function 'sfun_fiala1' in 'Machinery_S_model/car/four_tire/Tire_F1' during flag=3 call must be a real vector of length 2.”
该怎样解决?
回复 不支持

使用道具 举报

发表于 2011-3-8 19:37:32 | 显示全部楼层 来自 湖南湘潭
问题大部分原因是:应该赋值的某一个变量实际上并没有赋值!
回复 不支持

使用道具 举报

发表于 2011-3-10 15:08:30 | 显示全部楼层 来自 重庆沙坪坝区
问题已解决,主要是S-function中的会存在分母为零的情况。
回复 不支持

使用道具 举报

发表于 2011-3-15 16:56:27 | 显示全部楼层 来自 江苏南京
好好好好好好!

评分

1

查看全部评分

回复 不支持

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Simapps系列直播

Archiver|小黑屋|联系我们|仿真互动网 ( 京ICP备15048925号-7 )

GMT+8, 2024-10-4 23:32 , Processed in 0.056323 second(s), 18 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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