function[sys,x0,str,ts]=MY_MPCController(t,x,u,flag)

switch flag,

case 0

[sys,x0,str,ts]=mdlInitializeSizes;

case 2

sys=mdlUpdates(t,x,u);

case 3

sys=mdlOutputs(t,x,u);

case {1,4,9}

sys=[];

otherwise

error(['unhandled flag=',num2str(flag)]);

end

%s函数主程序结束

function[sys,x0,str,ts]=mdlInitializeSizes

sizes=simsizes;

sizes.NumContStates=0;

sizes.NumDiscStates=3;

sizes.NumOutputs=2;

sizes.NumInputs=3;

sizes.DirFeedthrough=1;

sizes.NumSampleTimes=1;

sys=simsizes(sizes);

x0=[0;0;0];

global U;

U=[0;0];

str=[];

ts=[0.05 0];

%初始化子函数结束

function sys=mdlUpdates(t,x,u)

sys=x;

%end of mdlUpdate.

function sys=mdlOutputs(t,x,u)

global a b u_piao;

global U;

global kesi;

Nx=3;%状态量的个数

Nu=2;%控制量的个数

Np=60;%预测步长

Nc=30;%控制步长

Row=10;

fprintf('Update start,t=%6.3f\n',t)

t_d=u(3)*3.14159265/180;%角度和弧度的转化

r(1)=25*sin(0.2*t);

r(2)=25+10-25*cos(0.2*t);

r(3)=0.2*t;

vd1=5;

vd2=0.104;

%半径为25m的圆形轨迹,速度为5m

%参数的设计

kesi=zeros(Nx+Nu,1);

kesi(1)=u(1)-r(1);

kesi(2)=u(2)-r(2);

kesi(3)=t_d-r(3);

kesi(4)=U(1);

kesi(5)=U(2);

fprintf('Update start,u(1)=%4.2f\n',U(1))

fprintf('Update start,u(2)=%4.2f\n',U(2))

T=0.05;

T_all=40;

L=2.6;

%Mobile Robor/Vehicle variable

u_piao=zeros(Nx,Nu);

Q=eye(Nx*Np,Nx*Np);

R=5*eye(Nu*Nc);

a=[1 0 -vd1*sin(t_d)*T;0 1 vd1*cos(t_d)*T;0 0 1;];

b=[cos(t_d)*T 0;sin(t_d)*T 0;tan(vd2)*T/L vdl*T/((cos(vd2)^2)*L);];

%对应4.6

A_cell=cell(2,2);

B_cell=cell(2,1);

A_cell{1,1}=a;

A_cell{1,2}=b;

A_cell{2,1}=zeros(Nu,Nx);

A_cell{2,2}=eye(Nu);

B_cell{1,1}=b;

B_cell{2,1}=eye(Nu);

A_cell2mat(A_cell);

B_cell2mat(B_cell);

C=[1 0 0 0 0;0 1 0 0 0;0 0 1 0 0;];

%对应4.10

PHI_cell=cell(Np,1);

THETA_cell=cell(Np,Nc);

for j=1:1:Np

PHI_cell{j,1}=C*A^j;

for k=1:1:Nc

if k<=j

THETA_cell{j,k}=C*A^(j-k)*B;

else

THETA_cell{j,k}=zeros(Nx,Nu);

end

end

end

PHI=cell2mat(PHI_cell);

THETA=cell2mat(THETA_cell);

%对应4.12

H_cell=cell(2,2);

H_cell{1,1}=THETA'*Q*THETA+R;

H_cell{1,2}=zeros(Nu*Nc,1);

H_cell{2,1}=zeros(1,Nu*Nc);

H_cell{2,2}=0;

H=cell2mat(H_cell);

error=PHI*kesi;

f_cell=cell(1,2);

f_cell{1,1}=2*error'*Q*THETA;

f_cell{1,2}=Row;

f=cell2mat(f_cell);

%对应4.19

A_t=zeros(Nc,Nc);

for p=1:1:Nc

for q=1:1:Nc

if q<=p

A_t(p,q)=1;

else

A_t(p,q)=0;

end

end

end

A_I=kron(A_t,eye(Nu));

%对应4.17

Ut=kron(one(Nc,1),U);

umin=[-0.2;-0.54;];

umax=[0.2;0;0.332];

delta_umin=[-0.05;-0.0082;];

delta_umax=[0.05;0.0082];

Umin=kron(one(Nc,1),umin);

Umax=kron(one(Nc,1),umax);

A_cons_cell={A_I zeros(Nu*Nc,1);-A_I zeros(Nu*Nc,1)};

b_cons_cell={Umax-Ut;-Umin+Ut};

A_cons=cell2mat(A_cons_cell);

%状态量不等式约束增益

b_cons=cell2mat(b_cons_cell);

M=10;

delta_Umin=kron(ones(Nc,1),delta_umin);

delta_Umax=kron(ones(Nc,1),delta_umax);

lb=[delta_Umin;0];

ub=[delta_Umax;M];

%开始求解

options=optimset('Algorithm','active-set');

%options=optimset('Algorithm','interior-point-convex');

[X,fval,exitflag]=quadprog(H,f,A_cons,b_cons,[],[],lb,ub,[],options);

u_piao(1)=X(1);

u_piao(2)=X(2);

U(1)=kesi(4)+u_piao(1);

U(2)=kesi(5)+u_piao(2);

u_real(1)=U(1)+vd1;

u_real(2)=U(2)+vd2;

sys=u_real;

toc

%End of mdlOutputs.

这是我的程序

matlab中的myerr,Error in 'MPC1/S-Function' while executing MATLAB S-function 'MY_MPCCon...相关推荐

  1. matlab方程近似求根,第七讲MATLAB中求方程的近似根(解)教学目的学习matlab中求根命令.doc...

    第七讲MATLAB中求方程的近似根(解)教学目的学习matlab中求根命令 第七讲 MATLAB中求方程的近似根(解) 教学目的:学习matlab中求根命令,了解代数方程求根求解的四种方法,即图解法. ...

  2. matlab中矩阵的累加,累加和与累乘积在matlab中-read.ppt

    累加和与累乘积在matlab中-read 多项式 多项式表达方式的约定 创建多项式的方法 多项式运算函数 常用列表参阅表2-10 多项式表达方式的约定 MATLAB约定降幂多项式P(x)=a0xn+ ...

  3. matlab中结束脚本运行_疫情当前,生活向前 | MATLAB 一直 Online 等你

    疫情当前,生活向前,希望如期而至的不止是春天,还有疫情过后平安而充实的你 ! MATLAB 连夜帮你整理了我们所有网上的学习资源,为了注定不平凡的你. ◆  ◆  ◆   三大工具,在家开学也不怕[1 ...

  4. matlab中x从0到5不含0,关于MATLAB的数学建模算法学习笔记

    关于MATLAB的数学建模算法学习笔记 目录 线性规划中应用: (3) 非线性规划: (3) 指派问题;投资问题:(0-1问题) (3) 1)应用fmincon命令语句 (3) 2)应用指令函数:bi ...

  5. MATLAB中(:,1)是什么含义?/MATLAB中冒号的用法

    f(:,1)就是取f 矩阵的第1列. f=[1,2,3; 3,4,6; 7,8,9] f(:,1) matlab中冒号的用法总结: 1) a:b 表示[a,a+1,--,b] A=1:5 A = 1 ...

  6. matlab中估计丢失的数据,空间计量经济学基本模型的matlab估计

    原标题:空间计量经济学基本模型的matlab估计 空间计量经济学 Matlab应用学习手册 空间计量经济学创造性地处理了经典计量方法在面对空间数据时的缺陷,考察了数据在地理观测值之间的关联.近年来在人 ...

  7. matlab中input输入多个数_你可能不知道的MATLAB操作技巧#第二话

    回顾链接  这是#第一话#的超链接,让大家对MATLAB有一个感性认识. 第二话 1-梳理一下MATLAB中的字符char.符号变量symbol和数值型变量double等的区别.经过图图长时间调研,发 ...

  8. matlab中连续信号的卷积,连续时间信号卷积运算的MATLAB实现

    . . . .. .. 连续时间信号卷积运算的MATLAB 实现 一.实验目的 (1) 理解掌握卷积的概念及物理意义. (2) 理解单位冲击响应的概念及物理意义. 二.实验原理 根据前述知识,连续信号 ...

  9. matlab怎么增加图例,matlab中legend函数在添加图例时的使用方法 - matlab资源网

    功能 在图形上添加图例.该命令对有多种图形对象类型(线条图,条形图,饼形图等)的窗口中显示一个图例.对于每一线条,图例会在用户给定的文字标签旁显示线条的线型,标记符号和颜色等.当所画的是区域(patc ...

最新文章

  1. 前后端分离的接口规范
  2. STM32F0xx_EXIT中断配置详细过程
  3. 定时任务:Java中Timer和TimerTask的使用
  4. Linux环境源码编译安装SVN
  5. 云炬Qtpy5开发与实战笔记 1开发第一个桌面应用Hello World
  6. 大数系列三——斐波那契数列——高效万进制,亿进制
  7. 计算机网络分代核心的属性,高职单招计算机类模拟试卷二(环职职专)
  8. Ubuntu下修改file descriptor
  9. 二 SVN代码冲突的解决
  10. python爬虫 去哪网数据分析
  11. omnet++tictoc14案例解析
  12. 老师用计算机教我们画画拼音,小学一年级语文《汉语拼音13angengingong》第三课时教学设计.docx...
  13. 电脑热点和虚拟机网卡冲突
  14. 混合策略与混合策略纳什均衡
  15. 微信游戏奇迹暖暖选取服务器失败,奇迹暖暖微信怎么登录失败
  16. img标签引入和背景图片引入雪碧图的使用
  17. 可长时间佩戴的耳机真的存在吗?骨传导耳机是否对耳朵伤害更小?
  18. Eclipse 官方网站
  19. printf(fmt, ##__VA_ARGS__)
  20. VBA基础语法:循环语句

热门文章

  1. Android系统进程Zygote启动过程的源代码分析(3)
  2. 联想亮出智能手机全面投身移动互联网
  3. Linux 命令(123)—— iostat 命令
  4. Linux 命令(121)—— cal 命令
  5. 2018腾讯内部转岗面试题2——打印A-Z 26个字母的所有子集
  6. 数据迁移期间进程命令
  7. iOS 手记 - 计算文字高度/宽度:- (CGSize)sizeWithAttributes:(NSDictionaryNSString *,id *)attrs...
  8. 12306订票助手秘笈:2013春节我要回家
  9. win10下添加ssh服务
  10. Linux之cp命令