为什么显示要串联的数组的维度不一致?
7 views (last 30 days)
Show older comments
close all
clear all
clc
% some global
global kappa1;
global kappa2;
global kappa3;
global R11;
global R22;
global R12;
global R21;
global R13;
global R23;
global R33;
global R32;
global R31;
global Q11;
global Q22;
global Q33;
global d1;
global d2;
global d3;
global i;
i=1;
d1=2;
d2=2;
d3=2;
c1=1;
c2=0;
c3=0;
%definitions of R
R11=0.1;
R12=0.01;
R13=0.01;
R31=0.01;
R22=0.1;
R23=0.01;
R33=0.1;
R32=0.01;
R21=0.01;
%definitions of Q
Q11=200*eye(2);
Q22=200*eye(2);
Q33=200*eye(2);
%initial conditions
x0=[1 1 1 1 1 1 rand(1,3) rand(1,3) rand(1,3) [1 1] [0.5 -0.5] [1.5 -1.5] [-1 -1] [2 -2] [0.5 -0.5] [1.5 -1.5] zeros(1,3)];
%call ode
options = odeset('OutputFcn',@odeplot);
[t,x]= ode23(@dynamicsfault,[0 30],x0,options);
%plots
% states
figure (1);
subplot(3,1,1)
plot(t,x(:,16:17));
hold on
plot(t,x(:,22),'r');
plot(t,x(:,23),'m');
legend ('$x_{11}$','$x_{12}$','$x_{01}$','$x_{02}$','interpreter','latex');
xlabel('Time (s)');
subplot(3,1,2)
plot(t,x(:,18:19));
hold on
plot(t,x(:,22),'r');
plot(t,x(:,23),'m');
legend ('$x_{21}$','$x_{22}$','$x_{01}$','$x_{02}$','interpreter','latex');
xlabel('Time (s)');
subplot(3,1,3)
plot(t,x(:,20:21));
hold on
plot(t,x(:,22),'r');
plot(t,x(:,23),'m');
legend ('$x_{31}$','$x_{32}$','$x_{01}$','$x_{02}$','interpreter','latex');
xlabel('Time (s)');
figure (2);
subplot(3,1,1)
plot(t,x(:,7:9));
title ('Critic 1');
xlabel('Time(s)')
% figure (3);
subplot(3,1,2)
plot(t,x(:,10:12));
title ('Critic 2');
xlabel('Time(s)')
% figure (4);
subplot(3,1,3)
plot(t,x(:,13:15));
title ('Critic 3');
xlabel('Time(s)')
figure (5);
plot3(kappa1,kappa2,kappa3);
title ('Controls');
figure (6);
plot(kappa1,'r');
hold on;
plot(kappa2,'b');
hold on;
plot(kappa3,'y');
legend ('u1', 'u2','u3');
figure (7)
grid on
plot(t,x(:,1:2));
hold on;
plot(t,x(:,3:4));
hold on;
plot(t,x(:,5:6));
title ('the agent error dynamic','interpreter','latex');
xlabel('Time(s)')
legend ('$\delta_{11}$', '$\delta_{12}$','$\delta_{21}$','$\delta_{22}$','$\delta_{31}$','$\delta_{32}$','interpreter','latex');
function xout=dynamicsfault(t,x)
%global variables
global kappa1;
global kappa2;
global kappa3;
global R11;
global R22;
global R12;
global R21;
global R13;
global R23;
global R33;
global R32;
global R31;
global Q11;
global Q22;
global Q33;
global d1;
global d2;
global d3;
global L1;
global L2;
global c1;
global c2;
global c3;
global i;
%constants
a1=1;
a2=1;
a3=1;
a4=1;
a5=1;
a6=1;
d1=2;
d2=2;
d3=2;
c1=1;
c2=0;
c3=0;
L1=300;L2=100;
delta1=[x(1) x(2)];
delta2=[x(3) x(4)];
delta3=[x(5) x(6)];
W1=[x(7) x(8) x(9)]';
W2=[x(10) x(11) x(12)]';
W3=[x(13) x(14) x(15)]';
x1=[x(16) x(17)];
x2=[x(18) x(19)];
x3=[x(20) x(21)];
x0=[x(22) x(23)];
x1f=[x(24) x(25)];
x2f=[x(26) x(27)];
x3f=[x(28) x(29)];
u1f=x(30);
u2f=x(31);
u3f=x(32);
%定义非线性动力学
f1=[x(17);-0.5*x(16)-x(17)+x(16)^2*x(17)-0.25*x(17)*(cos(2*x(16))+2)^2+0.25*x(17)*sin(4*x(17)^2+2)^2];
g1=[0; cos(2*x(16))+2];
f2=[x(19);-0.5*x(18)-x(19)+x(18)^2*x(19)-0.25*x(19)*(cos(2*x(18))+2)^2+0.25*x(19)*sin(4*x(19)^2+2)^2];
g2=[0; cos(2*x(18))+2];
f3=[-x(21);-0.5*x(20)-x(21)+x(20)^2*x(21)-0.25*x(21)*(cos(2*x(20))+2)^2+0.25*x(21)*sin(4*x(21)^2+2)^2];
g3=[0; cos(2*x(20))+2];
f0=[0.5*x(22)-x(23)*cos(x(22));sin(x(22))-x(23)];
f1f=[x(25);-0.5*x(24)-x(25)+x(24)^2*x(25)-0.25*x(25)*(cos(2*x(24))+2)^2+0.25*x(25)*sin(4*x(25)^2+2)^2];
g1f=[0; cos(2*x(24))+2];
f2f=[x(27);-0.5*x(26)-x(27)+x(26)^2*x(27)-0.25*x(27)*(cos(2*x(26))+2)^2+0.25*x(27)*sin(4*x(27)^2+2)^2];
g2f=[0; cos(2*x(26))+2];
f3f=[x(29);-0.5*x(28)-x(29)+x(28)^2*x(29)-0.25*x(29)*(cos(2*x(28))+2)^2+0.25*x(29)*sin(4*x(29)^2+2)^2];
g3f=[0; cos(2*x(28))+2];
phix1=[x(1)^2 x(1)*x(2) x(2)^2]';
dphix1=[2*x(1) 0; x(2) x(1); 0 2*x(2)];
phix2=[x(3)^2 x(3)*x(4) x(4)^2]';
dphix2=[x(3) 0; x(4) x(3); 0 2*x(4)];
phix3=[x(5)^2 x(5)*x(6) x(6)^2]';
dphix3=[2*x(5) 0; x(6) x(5); 0 2*x(6)];
u1=-0.5*(d1+c1)*inv(R11)*g1'*dphix1'*W1;
u2=-0.5*(d2+c2)*inv(R22)*g2'*dphix2'*W2;
u3=-0.5*(d3+c3)*inv(R33)*g3'*dphix3'*W3;
s1=dphix1*((d1+c1)*(f1-f0+g1*(u1)+(d2+c2)*(f2-f0+g2*u2)+(d3+c3)*(f3-f0+g3*u3)));
s2=dphix2*((d1+c1)*(f1-f0+g1*(u1)+(d2+c2)*(f2-f0+g2*u2)+(d3+c3)*(f3-f0+g3*u3)));
s3=dphix3*((d1+c1)*(f1-f0+g1*(u1)+(d2+c2)*(f2-f0+g2*u2)+(d3+c3)*(f3-f0+g3*u3)));
Y1=(-delta1*Q11*delta1'-u1*R11*u1'-u3*R13*u3'-u2*R12*u2');
Y2=(-delta2*Q22*delta2'-u2*R22*u2'-u1*R21*u1'-u3*R13*u3);
Y3=(-delta3*Q33*delta3'-u3*R33*u3'-u1*R31*u1'-u2*R32*u2');
e1=W1'*s1-Y1;
e2=W2'*s2-Y2;
e3=W3'*s3-Y3;
Win1=-a1*(s1./(s1'*s1+1)^2)*e1';
Win2=-a2*(s2./(s2'*s2+1)^2)*e2';
Win3=-a3*(s3./(s3'*s3+1)^2)*e3';
% sbar1=(s1/(s1'*s1+1));
% sbar2=(s2/(s2'*s2+1));
% sbar3=(s3/(s3'*s3+1));
%
% D1=dphix1*B1*inv(R11)*B1'*dphix1';
% D2=dphix2*B2*inv(R22)*B2'*dphix2';
% D3=dphix3*B3*inv(R33)*B3'*dphix3';
%
% F1=5*eye(length(W4));
% F2=5*eye(length(W5));
% F3=5*eye(length(W6));
%
% Win4=a4*(F1*W1-F1*W4)-0.25*D1*a4*W4*(s1./(s1'*s1+1)^2)'*W1-0.25*a4*dphix3*B3*inv(R33)*R13*inv(R33)*B3'*dphix3'*W4*(s1./(s1'*s1+1)^2)'*W3;
% Win5=a5*(F2*W2-F2*W5)-0.25*D2*a5*W5*(s2./(s2'*s2+1)^2)'*W2-0.25*a5*dphix1*inv(R11)*R21*inv(R11)*dphix1'*W5*(s2./(s2'*s2+1)^2)'*W1;
% Win6=a6*(F3*W3-F3*W6)-0.25*D3*a6*W6*(s3./(s3'*s3+1)^2)'*W3-0.25*a6*dphix1*inv(R11)*R31*inv(R11)*dphix1'*W6*(s3./(s3'*s3+1)^2)'*W1-0.25*a6*dphix2*inv(R22)*R32*inv(R22)*dphix2'*W6*(s3./(s3'*s3+1)^2)'*W2;
if 10<=t&&t<=20
u1f=cos(5*t/(2*pi))+sin(t);
else
u1f=0;
end
if 20<=t&&t<=25
u3f=10*sin(t/(2*pi))-cos(2*t);
else
u3f=0;
end
if t<=30
u2f=0;
unew1=((u1)+0*exp(-0.00*t)*(sin(t)^2*cos(t)+sin(2*t)^2*cos(0.1*t)+sin(-1.2*t)^2*cos(0.5*t)+sin(t)^5));
unew2=((u2)+0*exp(-0.00*t)*(sin(t)^2*cos(t)+sin(2*t)^2*cos(0.1*t)+sin(-1.2*t)^2*cos(0.5*t)+sin(t)^5));
unew3=((u3)+0*exp(-0.00*t)*(sin(t)^2*cos(t)+sin(2*t)^2*cos(0.1*t)+sin(-1.2*t)^2*cos(0.5*t)+sin(t)^5));
else
unew1=u1;
unew2=u2;
unew3=u3;
end
kappa1(i)=u1;
kappa2(i)=u2;
kappa3(i)=u3;
i=i+1;
size((d1+c1)*(f1-f0+g1*(unew1-u1f))+(d2+c2)*(f2-f0+g2*(unew2-u2f))+(d3+c3)*(f3-f0+g3*(unew3-u3f)))
size((d2+c1)*(f1-f0+g1*(unew1-u1f))+(d2+c2)*(f2-f0+g2*(unew2-u2f))+(d3+c3)*(f3-f0+g3*(unew3-u3f)))
size((d3+c1)*(f1-f0+g1*(unew1-u1f))+(d2+c2)*(f2-f0+g2*(unew2-u2f))+(d3+c3)*(f3-f0+g3*(unew3-u3f)))
size(Win1)
size(Win2)
size(Win3)
size(f1+g1*unew1-g1*u1f)
size(f2+g2*unew2-g2*u2f)
size(f3+g3*unew3-g3*u3f)
size(f0)
size(f1f+g1*(unew1-u1f)+L1*(x1-x1f))
size(f2f+g1*(unew2-u2f)+L1*(x2-x2f))
size(f3f+g1*(unew3-u3f)+L1*(x3-x3f))
size(-L2*g1f'*(x1-x1f)')
size(-L2*g2f'*(x3-x3f)')
size(-L2*g2f'*(x3-x3f)')
xout=[(d1+c1)*(f1-f0+g1*(unew1-u1f))+(d2+c2)*(f2-f0+g2*(unew2-u2f))+(d3+c3)*(f3-f0+g3*(unew3-u3f));...
(d2+c1)*(f1-f0+g1*(unew1-u1f))+(d2+c2)*(f2-f0+g2*(unew2-u2f))+(d3+c3)*(f3-f0+g3*(unew3-u3f));...
(d3+c1)*(f1-f0+g1*(unew1-u1f))+(d2+c2)*(f2-f0+g2*(unew2-u2f))+(d3+c3)*(f3-f0+g3*(unew3-u3f));...
Win1;Win2; Win3;...
f1+g1*unew1-g1*u1f;f2+g2*unew2-g2*u2f;f3+g3*unew3-g3*u3f;f0;...
f1f+g1*(unew1-u1f)+L1*(x1-x1f);f2f+g1*(unew2-u2f)+L1*(x2-x2f);f3f+g1*(unew3-u3f)+L1*(x3-x3f);...
-L2*g1f'*(x1-x1f)';-L2*g2f'*(x3-x3f)';-L2*g2f'*(x3-x3f)'];
end
错误使用 vertcat
要串联的数组的维度不一致。
出错 dynamicsfault (line 148)
xout=[(d1+c1)*(f1-f0+g1*(unew1-u1f))+(d2+c2)*(f2-f0+g2*(unew2-u2f))+(d3+c3)*(f3-f0+g3*(unew3-u3f));...
出错 odearguments (line 90)
f0 = feval(ode,t0,y0,args{:}); % ODE15I sets args{1} to yp0.
出错 ode23 (line 114)
odearguments(FcnHandlesUsed, solver_name, ode, tspan, y0, options, varargin);
出错 fault9_7 (line 65)
[t,x]= ode23('dynamicsfault',[0 30],x0,options);
0 Comments
Accepted Answer
Torsten
on 7 Sep 2023
As you can see in your code above,
f1f+g1*(unew1-u1f)+L1*(x1-x1f)
f2f+g1*(unew2-u2f)+L1*(x2-x2f)
f3f+g1*(unew3-u3f)+L1*(x3-x3f)
are 2x2 matrices. To be able to form xout, they have to be column vectors.
2 Comments
Torsten
on 7 Sep 2023
You are interested in how to debug a code ? As you can see, I inserted the commands
size((d1+c1)*(f1-f0+g1*(unew1-u1f))+(d2+c2)*(f2-f0+g2*(unew2-u2f))+(d3+c3)*(f3-f0+g3*(unew3-u3f)))
size((d2+c1)*(f1-f0+g1*(unew1-u1f))+(d2+c2)*(f2-f0+g2*(unew2-u2f))+(d3+c3)*(f3-f0+g3*(unew3-u3f)))
size((d3+c1)*(f1-f0+g1*(unew1-u1f))+(d2+c2)*(f2-f0+g2*(unew2-u2f))+(d3+c3)*(f3-f0+g3*(unew3-u3f)))
size(Win1)
size(Win2)
size(Win3)
size(f1+g1*unew1-g1*u1f)
size(f2+g2*unew2-g2*u2f)
size(f3+g3*unew3-g3*u3f)
size(f0)
size(f1f+g1*(unew1-u1f)+L1*(x1-x1f))
size(f2f+g1*(unew2-u2f)+L1*(x2-x2f))
size(f3f+g1*(unew3-u3f)+L1*(x3-x3f))
size(-L2*g1f'*(x1-x1f)')
size(-L2*g2f'*(x3-x3f)')
size(-L2*g2f'*(x3-x3f)')
in your code because it was obvious that one or several of them couldn't be column vectors.
For the general procedure of debugging this site may help:
More Answers (0)
See Also
Categories
Find more on Deep Learning Toolbox in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!