Error using symengine Invalid operands. Error in sym/privBinaryOp (line 1013) Csym = mupadmex(op,args{1}.s, args{2}.s, varargin{:}); Error in / (line 369)

10 views (last 30 days)
these are a control equations for a robotic arm with a motor
the final equation is a state space and it values are A,B,C in a matrix form
syms X EI A P R S CM L
E=71.7e9;R=2810;Rp=7800;Gc=1e7;e31=-16;EP=5e10;ta=0.46e-3;tb=2e-3;b=0.035;alfa=0.216;beta=6.044e-4;d31=-320e-12;
I=(1/12)*b*tb^3;
Ip=(1/12)*b*ta^3+(b*ta)*((ta+tb)/2)^2;
a=b*tb;
z=(ta+tb)/2;
zc=(tb/2)+ta;
s=a*R;
EI=E*I;
S1=b*(R*tb+2*Rp*ta);
EI1=EI+2*EP*Ip;
Ne=6;
F=[1,X,X^2,X^3];
Tv=[1 0 0 0 ; 0 1 0 0 ; -3/L^2 -2/L 3/L^2 -1/L ; 2/L^3 1/L^2 -2/L^3 1/L^2;];
N= F*Tv;
n1=diff(N);
n2=diff(N,2);
M=s*int((transpose(N)*N),0,L);
Mp=S1*int((transpose(N)*N),0,L);
K=EI*int((transpose(n2)*n2),0,L);
KP=EI1*int((transpose(n2)*n2),0,L);
L=55.3e-3;
plas=2;
hf=EP*d31*b*z*int((transpose(n1)),0,L);
hff=((Ne*2)-(plas*2));
hf2=zeros(hff,1);
hf1=zeros((Ne*2-4)-hff,1);
h14=[hf1;hf;hf2];
temp=sym(h14)
h4=sym(temp);
h=subs(h4);
p=Gc*zc*e31*b*int((transpose(n2)),0,L);
cp2=[hf1;p;hf2];
cp=transpose(cp2);
cp4=sym(cp);
cp1=subs(cp4);
m=(Ne*4)-2*(Ne-1);
Me=sym(M);
Melem=subs(Me);
Kh=sym(K);
Kelem=subs(Kh);
syms Ko1 Ko2 Ko3 Ko4 Ko5 Ko6
Ko1= zeros(m);
Ko2=zeros(m);
Ko3= zeros(m);
Ko4 = zeros(m);
Ko5 = zeros(m);
Ko6 = zeros(m);
Ko1 = sym(Ko1);
Ko2 = sym(Ko2);
Ko3 = sym(Ko3);
Ko4 = sym(Ko4);
Ko5 = sym(Ko5);
Ko6 = sym(Ko6);
for i1 = 1:4
for j1 = 1:4
Ko6(i1+10,j1+10)=subs( K(i1,j1));
Ko5(i1+8,j1+8)= subs (K(i1,j1));
Ko4(i1+6,j1+6)= subs( K(i1,j1));
Ko3(i1+4,j1+4)= subs (K(i1,j1));
Ko2(i1+2,j1+2)=subs (KP(i1,j1));
Ko1(i1,j1)= subs (K(i1,j1));
end
end
Ko1;
Ko2;
Ko3;
Ko4;
Ko5;
Ko6;
Ksys=Ko1+Ko2+Ko3+Ko4+Ko5+Ko6;
Ksys
Ksy=sym(Ksys);
Ksyst=subs(Ksys);
syms mo1 mo2 mo3 mo4 mo5 mo6
mo1 = zeros(m);
mo2 = zeros(m);
mo3 = zeros(m);
mo4 = zeros(m);
mo5 = zeros(m);
mo6 = zeros(m);
mo1 = sym(mo1);
mo2 = sym(mo2);
mo3 = sym(mo3);
mo4 = sym(mo4);
mo5 = sym(mo5);
mo6 = sym(mo6);
for i1 = 1:4
for j1 = 1:4
mo6(i1+10,j1+10) = M(i1,j1);
mo5(i1+8,j1+8) = M(i1,j1);
mo4(i1+6,j1+6) = M(i1,j1);
mo3(i1+4,j1+4) = M(i1,j1);
mo2(i1+2,j1+2) = Mp(i1,j1);
mo1(i1,j1) = M(i1,j1);
end
end
mo1;
mo2;
mo3;
mo4;
mo5;
mo6;
Msys=mo1 + mo2 + mo3 + mo4 + mo5 + mo6;
Msys
Mss=sym(Msys);
Msyst = subs(Mss);
cm=alfa*Msyst+beta*Ksyst;
ccm=Msyst\cm;
MMo=Msyst\Ksyst;
aaz=eye(m-2,m-2);
cc=-1*ccm;
M2=-1*MMo;
tot=(Ne*4);
a1=zeros(tot);
a2=zeros(tot);
a3=zeros(tot);
a1=sym(a1);
a2=sym(a2);
a3=sym(a3);
Nee=Ne*2;
for i1 = 1:Nee
for j1 = 1:Nee
a1(i1+Nee,j1) = M2(i1,j1);
a2(i1,j1+Nee) = aaz(i1,j1);
a3(i1+Nee,j1+Nee) = cc(i1,j1);
end
end
a1;
a2;
a3;
At=a1+a2+a3;
Att=sym(At);
A=subs(Att);
bm = zeros(1,Nee);
Bm =Msyst/h;
B=[bm ,Bm];
cm=zeros(1,Nee);
Cii=[cm,cp1];
Ci=sym(Cii);
C=subs(Ci);
A=double(A);
B=double(B);
C=double(C);

Answers (1)

Walter Roberson
Walter Roberson on 17 Nov 2021
syms X EI A P R S CM L
E=71.7e9;R=2810;Rp=7800;Gc=1e7;e31=-16;EP=5e10;ta=0.46e-3;tb=2e-3;b=0.035;alfa=0.216;beta=6.044e-4;d31=-320e-12;
I=(1/12)*b*tb^3;
Ip=(1/12)*b*ta^3+(b*ta)*((ta+tb)/2)^2;
a=b*tb;
z=(ta+tb)/2;
zc=(tb/2)+ta;
s=a*R;
EI=E*I;
S1=b*(R*tb+2*Rp*ta);
EI1=EI+2*EP*Ip;
Ne=6;
F=[1,X,X^2,X^3];
Tv=[1 0 0 0 ; 0 1 0 0 ; -3/L^2 -2/L 3/L^2 -1/L ; 2/L^3 1/L^2 -2/L^3 1/L^2;];
N= F*Tv;
n1=diff(N);
n2=diff(N,2);
M=s*int((transpose(N)*N),0,L);
Mp=S1*int((transpose(N)*N),0,L);
K=EI*int((transpose(n2)*n2),0,L);
KP=EI1*int((transpose(n2)*n2),0,L);
L=55.3e-3;
plas=2;
hf=EP*d31*b*z*int((transpose(n1)),0,L);
hff=((Ne*2)-(plas*2));
hf2=zeros(hff,1);
hf1=zeros((Ne*2-4)-hff,1);
h14=[hf1;hf;hf2];
whos hf hf1 hf2
Name Size Bytes Class Attributes hf 4x1 8 sym hf1 0x1 0 double hf2 8x1 64 double
Notice that hf2 is size hff, and hf1 is size (Ne*2-4)-hff, so put the two together like you do in h14, and the total is going to be Ne*2-4 rows. In this case N2 = 6 so that would be 6*2-4 = 8. So h14 is going to be size number of rows in hf, plus 8. Meanwhile,with F and Tv both having length 4, F*Tv is going to have 4 rows, so N has 4 rows, and that leads to n1 having 4 rows, and since hf has the integral of something with 4 rows, hf is going to have 4 rows. At this point we have 4 rows in hf and add another (N2*2-4) = 8 rows, for a total of 12 rows in h14. A couple of mostly-useless transformations later, that becomes h
temp=sym(h14)
temp = 
h4=sym(temp);
h=subs(h4);
p=Gc*zc*e31*b*int((transpose(n2)),0,L);
cp2=[hf1;p;hf2];
cp=transpose(cp2);
cp4=sym(cp);
cp1=subs(cp4);
m=(Ne*4)-2*(Ne-1);
disp([m, Ne])
14 6
Now Ne*4 - 2*(Ne-1) is Ne*4 - Ne*2 + 2 = (Ne*2) + 2. With Ne being 6, that gives 14, and that is the size you use to create several matrices.
Me=sym(M);
Melem=subs(Me);
Kh=sym(K);
Kelem=subs(Kh);
syms Ko1 Ko2 Ko3 Ko4 Ko5 Ko6
Ko1= zeros(m);
Ko2=zeros(m);
Ko3= zeros(m);
Ko4 = zeros(m);
Ko5 = zeros(m);
Ko6 = zeros(m);
Ko1 = sym(Ko1);
Ko2 = sym(Ko2);
Ko3 = sym(Ko3);
Ko4 = sym(Ko4);
Ko5 = sym(Ko5);
Ko6 = sym(Ko6);
for i1 = 1:4
for j1 = 1:4
Ko6(i1+10,j1+10)=subs( K(i1,j1));
Ko5(i1+8,j1+8)= subs (K(i1,j1));
Ko4(i1+6,j1+6)= subs( K(i1,j1));
Ko3(i1+4,j1+4)= subs (K(i1,j1));
Ko2(i1+2,j1+2)=subs (KP(i1,j1));
Ko1(i1,j1)= subs (K(i1,j1));
end
end
Ko1;
Ko2;
Ko3;
Ko4;
Ko5;
Ko6;
Ksys=Ko1+Ko2+Ko3+Ko4+Ko5+Ko6;
Ksys
Ksys = 
Ksy=sym(Ksys);
Ksyst=subs(Ksys);
syms mo1 mo2 mo3 mo4 mo5 mo6
mo1 = zeros(m);
mo2 = zeros(m);
mo3 = zeros(m);
mo4 = zeros(m);
mo5 = zeros(m);
mo6 = zeros(m);
mo1 = sym(mo1);
mo2 = sym(mo2);
mo3 = sym(mo3);
mo4 = sym(mo4);
mo5 = sym(mo5);
mo6 = sym(mo6);
for i1 = 1:4
for j1 = 1:4
mo6(i1+10,j1+10) = M(i1,j1);
mo5(i1+8,j1+8) = M(i1,j1);
mo4(i1+6,j1+6) = M(i1,j1);
mo3(i1+4,j1+4) = M(i1,j1);
mo2(i1+2,j1+2) = Mp(i1,j1);
mo1(i1,j1) = M(i1,j1);
end
end
mo1;
mo2;
mo3;
mo4;
mo5;
mo6;
Msys=mo1 + mo2 + mo3 + mo4 + mo5 + mo6;
Msys
Msys = 
Mss=sym(Msys);
Msyst = subs(Mss);
cm=alfa*Msyst+beta*Ksyst;
ccm=Msyst\cm;
MMo=Msyst\Ksyst;
aaz=eye(m-2,m-2);
cc=-1*ccm;
M2=-1*MMo;
tot=(Ne*4);
a1=zeros(tot);
a2=zeros(tot);
a3=zeros(tot);
a1=sym(a1);
a2=sym(a2);
a3=sym(a3);
Nee=Ne*2;
for i1 = 1:Nee
for j1 = 1:Nee
a1(i1+Nee,j1) = M2(i1,j1);
a2(i1,j1+Nee) = aaz(i1,j1);
a3(i1+Nee,j1+Nee) = cc(i1,j1);
end
end
a1;
a2;
a3;
At=a1+a2+a3;
Att=sym(At);
A=subs(Att);
bm = zeros(1,Nee);
whos Msyst h
Name Size Bytes Class Attributes Msyst 14x14 8 sym h 12x1 8 sym
We can see here that h did indeed arrive with 12 rows as described. But Msyst is based on size m, which is 14. And you are trying to do an operation between those 14 rows of Msyst and the 12 rows of h, which is going to fail.
Bm =Msyst/h;
Error using / (line 485)
Invalid operands.
B=[bm ,Bm];
cm=zeros(1,Nee);
Cii=[cm,cp1];
Ci=sym(Cii);
C=subs(Ci);
A=double(A);
B=double(B);
C=double(C);

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!