可爱猫咪的后脑勺 2024-04-24 20:28 采纳率: 0%
浏览 20
已结题

MATLAB报错输入参数太多

运行simulink时报错,以下是FLS代码:

function [sys,x0,str,ts] = FLS(t,x,u,flag)  
switch flag
    case 0
    [sys,x0,str,ts]=mdlInitializeSizes;
    case 1
    sys=mdlDerivatives(t,x,u,flag);
    case 2
    sys=mdlUpdate(t,x,u,flag);
    case 3
    sys=mdlOutputs(t,x,u,flag);
    case 9
    sys=mdlTerminate(t,x,u);
  otherwise
    error(['Unhandled flag = ',num2str(flag)]);
end
end
%**************************************************************************************************
function [sys,x0,str,ts]=mdlInitializeSizes
sizes = simsizes;
sizes.NumContStates  =0;
sizes.NumDiscStates  =0 ;
sizes.NumOutputs     =2;
sizes.NumInputs      =12;
sizes.DirFeedthrough = 0;
sizes.NumSampleTimes = 1;   % at least one sample time is needed
sys = simsizes(sizes);
x0=[];
str = [];
ts  = [0 0];
end
function sys=mdlDerivatives(t,x,u,flag)
sys = [];
end
%**************************************************************************************************
function sys=mdlUpdate(t,x,u,flag)
sys = [];
end
%**************************************************************************************************
function sys=mdlOutputs(t,x,u,flag)

% D=100;
% step=1;
% r1=0.6;
% r2=0.108;
% r3=0.5;
tau2=0.001;
tau3=0.001;

yr=u(1);%参考信号
yr_dot=u(2);%参考信号的导数
x1=u(3);
v0=u(4);
kesai0=u(5);
san=u(6);
z2=u(7);
z3=u(8);
Kv=u(9);
ita=u(10);
theta=u(11);
l_hat=u(12);

k=1.5;
l1=40;
l2=5;
l3=3;
% gama_ita=1.2;
% deta_ita=0.0002;
% gama_theta=8;
% deta_theta=0.02;
% gama_K=6;
% deta_K=0.00015;
% gama_l=5;
% deta_l=0.0002;

% step=pa.step;
% D=pa.D;
O=diag(1,k,k^2);
% A0=[-3,1,0;-2,0,1;-1,0,0];
q1=3;
q2=2;
q3=1;
q=[q1;q2;q3];


xx=O*kesai0+O*Kv*v0+O*san*theta;%xhathat
h=7;
d=0.3*[-3,-2,-1,0,1,2,3;
   -3,-2,-1,0,1,2,3;
   -3,-2,-1,0,1,2,3;];
theta1=[0,0,ones(1,h)]*theta;
for i=1:1:h
    miu(i)=exp(-(norm(xx+d(:,i)-2.35))^2/2);%miu_l
end
sum=0;
for i=1:1:h
    sum=sum+miu(i);
end
for l=1:1:h
    fai_l(l)=miu(l)/sum;
end
fai=[fai_l(1);fai_l(2);fai_l(3);fai_l(4);fai_l(5);fai_l(6);fai_l(7)];
Y=fai'*theta1;



e=x1-yr;
p1=0.3*exp(-6*t)+0.015;%w_;
kap1=(1/p1)*(pi/2)*( 1/(cos( (pi/2)*(e/p1) )^2) );%大x
dp=-1.8*exp(-6*t);% dot w_


S1=tan( (pi/2)*(e/p1) );
v_02=(-l1*S1-kap1*(k*[0,1,0]*kesai0+[0;0;theta1]'*k*san'*[0;1;0]+dp/p1*e-yr_dot)-(k^2+2)*kap1^2*S1/2)/(kap1*k);%v'_0.2
%自适应律 3
% dita=-gama_ita(kap1*k*v_02*S1+deta_ita*ita);
% dtheta=gama_theta*(k*kap1*san'*[0;1;0]*S1-deta_theta*theta);
dz2=(ita*v_02-z2)/tau2;


S2=[0,1,0]*v0-z2;
v_03=(-l2*S2+k*q2*[1,0,0]*v0+dz2-Kv*kap1*k*S1)/k;
%自适应律 2
% dKv=gama_K*(kap1*k*S1*S2-deta_K*Kv);
dz3=(v_03-z3)/tau3;


S3=[0,0,1]*v0-z3;
v_04=l3*S3+S3/2-k*q3*[1,0,0]*v0-dz3;
c=1;
%自适应律 1
% dl_hat=gama_l*(S3*v_04-deta_l*l_hat);

ud=-S3*(l_hat*v_04)^2/(abs(S3*l_hat*v_04)+c);


sys(1)=ud;
sys(2)=Y;

end

%**************************************************************************************************
function sys=mdlTerminate(t,x,u)
sys = [];
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

![img](https://img-mid.csdnimg.cn/release/static/image/mid/ask/de24c104954143cf8b8885436f6c3be6.png "#left")


img

  • 写回答

13条回答 默认 最新

  • 阿齐Archie 嵌入式领域优质创作者 2024-04-24 20:42
    关注

    以下参考免费微信小程序:皆我百晓生 作答,并由阿齐Archie整理回复,若还有疑问可评论或留言。

    根据您提供的错误信息,问题出现在 mdlOutputs 函数中。错误提示是“输入参数太多”,这通常是因为函数定义中的输入参数数量与实际调用时提供的参数数量不匹配。

    在您的 mdlOutputs 函数定义中,您使用了以下语法:

    function sys=mdlOutputs(t,x,u,flag)
    

    这里的问题是,mdlOutputs 函数不需要 t(时间)参数,因为在 Simulink 中,S函数的 mdlOutputs 部分不需要时间参数。您应该将 t 参数从函数定义中移除,如下所示:

    function sys=mdlOutputs(x,u,flag)
    

    然后,您需要确保函数内部使用 xuflag 的方式与它们在函数定义中的位置相匹配。在您的代码中,您已经正确地使用了这些参数,所以您只需要更新函数定义。

    此外,您的 mdlOutputs 函数返回一个名为 sys 的输出,但是在您的代码中,sys 被用作一个数组。在 S-Function 中,sys 应该是一个单一的输出,即使您想返回多个输出,也需要将它们封装在一个数组中。根据您提供的代码,您有两个输出,因此您需要这样做:

    function sys=mdlOutputs(x,u,flag)
        % ... 您的代码 ...
        sys = [ud; Y]; % 将两个输出合并为一个 sys 数组
    end
    

    请对代码进行这些更改,然后重新运行仿真。如果问题仍然存在,请确保您的 Simulink 模型中的 S-Function 块使用了正确的数据类型和维度。

    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 4月25日
  • 赞助了问题酬金15元 4月24日
  • 创建了问题 4月24日

悬赏问题

  • ¥15 使用ue5插件narrative时如何切换关卡也保存叙事任务记录
  • ¥20 软件测试决策法疑问求解答
  • ¥15 win11 23H2删除推荐的项目,支持注册表等
  • ¥15 matlab 用yalmip搭建模型,cplex求解,线性化处理的方法
  • ¥15 qt6.6.3 基于百度云的语音识别 不会改
  • ¥15 关于#目标检测#的问题:大概就是类似后台自动检测某下架商品的库存,在他监测到该商品上架并且可以购买的瞬间点击立即购买下单
  • ¥15 神经网络怎么把隐含层变量融合到损失函数中?
  • ¥15 lingo18勾选global solver求解使用的算法
  • ¥15 全部备份安卓app数据包括密码,可以复制到另一手机上运行
  • ¥20 测距传感器数据手册i2c