matlab中optimitool,在Matlab中使用Opti-toolbox优化运动规律

我有一个关于使用Matlab中的Opti-toolbox进行理想运动定律的数值推导的问题 .

要遵循许多约束,但目标函数的主要原理如下所示:

H7yMO.png

此函数是周期性的,但仅使用1个周期 .

所有变量都是无量纲的,点数为n(奇数) .

在0和1处,函数产生0 .

在中间,在(n 1)/ 2处,该函数产生例如0.3 .

该功能需要在前半部分单调增加,在下半部分减少 .

速度需要介于-0.8和1之间 .

使用其他成本函数时,峰值加速度将受到限制 .

我希望加速度的峰值尽可能低 . 稍后此成本函数将被更改 .

我使用Opti-toolbox的尝试如下所示:

clear all

close all

%n is number of grid points, only odd numbers allowed!

n=11;

% parameters

tijd=[0:(1/(n-1)):1];

velmin=-0.8;

velmax=1;

accmax=100;

accmin=-100;

%First order derivative:

%Last value doesn't contribute, because function is periodic

%Implementation using FE: deltax=delta_i+1-delta_i-1/2*deltax

%With deltax=(1/(n-1))

A_1=zeros(n-1,n);

A_1(2:n-1,1:n-2)=A_1(2:n-1,1:n-2)-eye(n-2);

A_1(1:n-2,2:n-1)=A_1(1:n-2,2:n-1)+eye(n-2);

A_1(1,n-1)=-1;

A_1(n-1,1)=1;

A_1=A_1*(n-1)/2;

%Lower bound and upper bound + monotonically in and decreasing

lb_111=0.1*ones((n-1)/2,1);

ub_111=velmax*ones((n-1)/2,1);

lb_112=velmin*ones((n-1)/2,1);

ub_112=-0.1*ones((n-1)/2,1);

ub_1=[ub_111; ub_112];

lb_1=[lb_111; lb_112];

%2nd order derivative, same as before.

A_12=zeros(n-1,n);

A_12(2:n-1,1:n-2)=A_12(2:n-1,1:n-2)+eye(n-2);

A_12(1:n-2,2:n-1)=A_12(1:n-2,2:n-1)+eye(n-2);

A_12(1:n-1,1:n-1)=A_12(1:n-1,1:n-1)-2*eye(n-1);

A_12(1,n-1)=1;

A_12(n-1,1)=1;

A_12=A_12*((n-1)^2);

lb_12=accmin*ones(n-1,1);

ub_12=accmax*ones(n-1,1);

%First and last values are 0.

A_2=zeros(2,n);

A_2(1,1)=1;

A_2(2,n)=1;

lb_2=zeros(2,1);

ub_2=zeros(2,1);

%Middle value is known

A_4=zeros(1,n);

A_4(1,(n+1)/2)=1;

lb_4=zeros(1,1);

lb_4(1)=0.3;

ub_4=zeros(1,1);

ub_4(1)=0.3;

%Main derivatives

%1st

af_1=@(x) A_1*x;

%2nd

af_2=@(x) A_12*x;

%Will be needed later, not relevant.

% a_3 = zeros(n-1,n);

% a_3(1:(n-1)/2,(n+1)/2:n-1)=a_3(1:(n-1)/2,(n+1)/2:n-1)+eye((n-1)/2);

% a_3((n+1)/2:n-1,1:(n-1)/2)=a_3((n+1)/2:n-1,1:(n-1)/2)+eye((n-1)/2);

% a_fase=@(x) [a_3*x; x((n+1)/2)];

%Put all linear constraints together

A = [A_4;A_1;A_12;A_2];

lb = [lb_4;lb_1;lb_12;lb_2];

ub = [ub_4;ub_1;ub_12;ub_2];

%Cost function

f = @(x) norm(af_2(x),inf);

%Non linear function later

%nlcon = @(x) [norm(g(x),inf)];

%cl = [-15];

%cu = [15];

%Estimate x0

temp = fliplr(tijd);

x_0 = [tijd(1:(n+1)/2) temp(((n+1)/2+1):end)];

%Options in solver

opts = optiset('solver','ipopt','display','iter');

Opt = opti('fun',f,'lin',A,lb,ub,'x0',x_0,'options',opts);

%Extract solution

delta1 = solve(Opt);

%delta2=a_fase(delta1);

vel1=af_1(delta1);

%vel2=af_1(delta2);

acc1=af_2(delta1);

%acc2=af_2(delta2);

%Tas=g(delta1);

%%%%%%%%%%%%%%%%

%PLOTS

%%%%%%%%%%%%%%%%

figure

subplot(2,2,1);

plot(tijd,delta1)

title('positie')

subplot(2,2,2);

plot(tijd,[vel1;vel1(1)])

title('snelheid')

subplot(2,2,3);

plot(tijd,[acc1;acc1(1)])

title('acceleratie')

subplot(2,2,4);

%plot(tijd,Tas)

title('Askoppel')

但这产生了一个不可行的问题 .

有人知道我做错了什么吗?

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值