error: Matrix dimensions must agree / Inner matrix dimensions must agree.

1 Ansicht (letzte 30 Tage)
tevzia
tevzia am 3 Sep. 2013
Hi, I tried to multiply two different matrix but program give me an error which is "Inner matrix dimensions must agree". here is my code:
Schedule=[1,4,3,1,1];
nstands=5;
nperiods=4;
adjacency = [0, 1, 1, 0, 1;
1, 0, 0, 1, 0;
1, 0, 0, 0, 0;
0, 1, 0, 0, 0;
1, 0, 0, 0, 0];
adj = tril(adjacency)
n=max(Schedule);
out=zeros(n);
for k=1:n
idx=find(Schedule==k);
out(k,idx)=1;
end
ady = sum((out * adj)') % Error using * Inner matrix dimensions must agree.
totaladdy = sum(ady)
i tried to change it with " .* " but this time it gives : "Matrix dimensions must agree"
This code works when i use on commond window or scipts without other code. whenever i add into the main code it gives an error. I tired to create function and call it in the main code as well. like this
function [ totaladdy ] = calcaddy( schedule, adjacency )
%UNTITLED3 Summary of this function goes here
% Detailed explanation goes here
adj = tril(adjacency);
n=max(schedule);
out=zeros(n);
for k=1:n
idx=find(schedule==k);
out(k,idx)=1;
end
ady = sum((out * adj)');
totaladdy = sum(ady);
end
in the main code i call function like this
[ totaladdy ] = calcaddy( breedingpopulation, adjacency );
Thank you

Antworten (1)

Walter Roberson
Walter Roberson am 3 Sep. 2013
Your adjacency matrix is 5 x 5. tril() of a 5 x 5 is 5 x 5.
Your Schedule has a maximum of 4, so "n" is 4. zeros(n) would be zeros(4) which would be 4 x 4.
You try to do a matrix multiplication of (5 x 5) x (4 x 4) . The second dimension of the first array, 5, does not match the first dimension of the second array, 4, so you cannot matrix multiply the two.
I would suggest
out = zeros(size(adjacency));
but leave n as max(Schedule)

Kategorien

Mehr zu Cell Arrays finden Sie in Help Center und File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by