查看: 486|回复: 2|关注: 0

[已答复] S函数输入信号的未定义问题

[复制链接]

新手

5 麦片

财富积分


050


1

主题

2

帖子

0

最佳答案
发表于 2018-3-13 21:16:40 | 显示全部楼层 |阅读模式
本帖最后由 tjjx19 于 2018-3-13 21:43 编辑

本人正在做关于车辆协同避撞的毕业论文,其中需要使用S函数求非线性规划函数的最优解。但是每次运行后都会出现"Undefined function 'u' for input arguments of type 'double'"这个提示,恳求各位大神帮忙看看,不胜感激。完整程序如下:

  1. function [sys,x0,str,ts,simStateCompliance] = A1Transfer(t,x,u,flag)
  2. switch flag,
  3.   case 0,
  4.     [sys,x0,str,ts,simStateCompliance]=mdlInitializeSizes;   
  5.   case 3,
  6.     sys=mdlOutputs(t,x,u);
  7.   case {1,2,4,9},
  8.     sys=[];
  9.   otherwise
  10.     DAStudio.error('Simulink:blocks:unhandledFlag', num2str(flag));
  11. end

  12. function [sys,x0,str,ts,simStateCompliance]=mdlInitializeSizes(x0)
  13. sizes = simsizes;
  14. sizes.NumContStates  = 0;
  15. sizes.NumDiscStates  = 2;
  16. sizes.NumOutputs     = 3;
  17. sizes.NumInputs      = 4;
  18. sizes.DirFeedthrough = 1;
  19. sizes.NumSampleTimes = 1;   
  20. sys = simsizes(sizes);
  21. x0  = [1;1];
  22. str = [];
  23. ts  = [-1 0];
  24. simStateCompliance = 'UnknownSimState';

  25. function sys=mdlOutputs(t,x,u)
  26. X0=[1;1];
  27. A=[];b=[];
  28. Aeq=[];beq=[];
  29. lb=[0;0.001]; ub=[9.6;inf];
  30. [x,fval]=fmincon('target1',X0,A,b,Aeq,beq,lb,ub,'constrait1');
  31. sys=[x(1);x(2);fval];
复制代码

target1.m文件
  1. function f=target1(x)
  2.     f=u(4)*x(2)+0.5*x(1)*x(2)^2;
  3. end
复制代码

constrait1.m文件
  1. function [c,ceq]=constrait1(x)
  2.     c=[];
  3.     ceq=[(u(2)-x(1))*x(2)+u(1)-u(4);0.5*(u(2)-x(1))*x(2)^2+(u(1)-u(4))*x(2)-u(3)];
  4. end
复制代码


另附上simulink框图和错误信息


截图05.png
截图04.png

新手

5 麦片

财富积分


050


1

主题

2

帖子

0

最佳答案
 楼主| 发表于 2018-3-13 23:52:14 | 显示全部楼层
运行上面第一个程序后报错如下
not enough input arguments.
Error in A1Transfer (line 2)
switch flag

论坛优秀回答者

专家

2434 麦片

财富积分


20003000


4

主题

4717

帖子

544

最佳答案
  • 关注者: 511
发表于 2018-3-16 12:20:43 | 显示全部楼层
target1.m里f=x(4)吧?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐上一条 /3 下一条

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