MATLAB: I got this error message ‘Subscripted assignment dimension mismatch’

for loopiterationMATLABsubscripted assignment dimension mismatch

x=rand(16,1301);
y=rand(16,4);
k=0:0.01:1;
I=eye(size(x'*x));
b=zeros(size(x'*x));
for j=1:length(k)
b(:,j)=(pinv(x'*x+k(j)*I)*x')*y;
end
It seems the size of b(:,j)= 1301 x 1 and the size for (pinv(x'*x+k(j)*I)*x')*y= 1301 x 4. How to write a code for output variable to get equal size? Please help.

Best Answer

  • This runs:
    x=rand(16,1301);
    y=rand(16,4);
    k=0:0.01:1;
    I=eye(size(x'*x));
    b=zeros(size(x,2), size(y,2), size(k,2));
    for j=1:length(k)
    b(:,:,j)=(pinv(x'*x+k(j)*I)*x')*y;
    end
    I only ran it through k=6 because it takes an excruciatingly long time. But it doesn’t throw the error. The solution was the correct preallocation of ‘b’.