# Left and right sides have a different number of elements

1 view (last 30 days)
Dawaylon Barnes on 10 Dec 2019
Answered: Image Analyst on 10 Dec 2019
n = 2
ang = 0 (however I'd like it to iterate throuhg 0 and 90 (I gave a quick shot at ang = [0,90] but no prevail))
U1 = 59.579
U2 = 64.881
U3 = 14.355
U4 = 17.072
My U values print out correctly. However, when I run the code:
for i=1:1:n
Qb11(i)=U1+U2*cosd(2*ang)+U3*cosd(4*ang)
Qb12(i)=U4-U3*cosd(ang*4)
Qb22(i)=U1-U2*cosd(ang*2)+U3*cosd(ang*4)
Qb16(i)=U2/2*sind(ang*2)+U3*sind(ang*4)
Qb26(i)=U2/2*sind(ang*2)-U3*sind(ang*4)
Qb66(i)=1/2*(U1-U4)-U3*cosd(ang*4)
i
Qb(i)=[Qb11(i) Qb12(i) Qb16(i); Qb12(i) Qb22(i) Qb26(i); Qb16(i) Qb26(i) Q66(i)]
end
My matrices fails to compile and I get the error "Unable to preform assignment because the left and right sides have a different number of elements". Any advice?

Image Analyst on 10 Dec 2019
You need to preallocate the 3-by-3-by-n array Qb. This works:
n = 2
ang = 0 % (however I'd like it to iterate throuhg 0 and 90 (I gave a quick shot at ang = [0,90] but no prevail))
U1 = 59.579
U2 = 64.881
U3 = 14.355
U4 = 17.072
% My U values print out correctly. However, when I run the code:
% Preallocate a 3-by-3-by-n array.
Qb = zeros(3, 3, n);
for k=1:1:n
Qb11(k)=U1+U2*cosd(2*ang)+U3*cosd(4*ang)
Qb12(k)=U4-U3*cosd(ang*4)
Qb22(k)=U1-U2*cosd(ang*2)+U3*cosd(ang*4)
Qb16(k)=U2/2*sind(ang*2)+U3*sind(ang*4)
Qb26(k)=U2/2*sind(ang*2)-U3*sind(ang*4)
Qb66(k)=1/2*(U1-U4)-U3*cosd(ang*4)
fprintf('Iteration #%d\n', k);
% Load up this slice of the 3-D array Qb.
Qb(:, :, k)=[Qb11(k) Qb12(k) Qb16(k); Qb12(k) Qb22(k) Qb26(k); Qb16(k) Qb26(k) Qb66(k)]
end