Incorrect dimensions for matrix multiplication

14 views (last 30 days)
Gautami Golani
Gautami Golani on 7 Mar 2019
Commented: Adarsh Ghimire on 9 Mar 2019
%Load the data
load data.mat;
%Extracting first 500 points
z = [y(1:500) u(1:500)];
%Plotting the data
%Using sampling interval of 80ms
idplot(z, 1:500, 0.08);
%Reserving the remaining data
zr = [y(501:1000) u(501:1000)];
%Removing constant levels and making data zero mean
z = dtrend(z);
zr = dtrend(zr);
%Loss function calaculation
V = arxstruc(z, zr, struc(2,2, 1:10));
value = V(1,:);
nk_value = min(value);
V = arxstruc(z, zr, struc(1:5, 1:5, 3));
%Searching for settled-in point
nns = selstruc(V);
%Model structure
for na = 1:5
for nb = 1:5
val(i,:) = na+nb;
th = arx(z,[na, nb, 3]);
mse(i,:) = [th.Report.Fit.MSE];
a = th.a;
b = th.b;
ysim = idsim(zr(:, 2), th);
matx = [val mse];
A = matx;
[A1u,~,idx] = unique(A(:,1));
MinVals = accumarray(idx, A(:,2), [], @(x)min(x));
Result = [A1u, MinVals];
m_one = Result(:,1);
m_two = Result(:,2);
plot(m_one, m_two)
title('Complexity vs Loss Function');
ylabel('Loss Function');
%A-parameter and B-parameter
th = arx(z,[4 4 3]);
th = sett(th, 0.08);
%Least Square Estimation
i = 1;
for k=6:length(z)
phi(i,1:5) = [-z(k-1,1) -z(k-2,1) z(k-3,2) z(k-4,2) z(k-5,2)];
i = i+1;
Y = z(6:end,1);
L = inv(phi'*phi)*phi*Y;
Getting an error that says 'Incorrect dimensions for matrix multiplication.'
Can anyone explain why this error comes up?
  1 Comment
Walter Roberson
Walter Roberson on 7 Mar 2019
This code requires idplot(), which existing in the MATLAB 3 (1987) to MATLAB 5 (1997) timeframe and which was removed from MATLAB before R13. A copy of the source appears to be at

Sign in to comment.

Answers (1)

Adarsh Ghimire
Adarsh Ghimire on 7 Mar 2019
Edited: Adarsh Ghimire on 7 Mar 2019
L = inv(phi ' * phi ) * phi' * Y;
your phi matrix dimension has to transposed to multiply with y. As i went through your code, I found that
phi = (z-6) x 6
and y = (z-6)x1
so transposing your phi and multiply with y will get you 6x1 matrix which can multiply with inverse result of 6x6 so you get 6x1 matrix as your L.

Sign in to comment.


Community Treasure Hunt

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

Start Hunting!