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

1 回表示 (過去 30 日間)
tevzia
tevzia 2013 年 9 月 3 日
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

回答 (1 件)

Walter Roberson
Walter Roberson 2013 年 9 月 3 日
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)

カテゴリ

Help Center および File ExchangeResizing and Reshaping Matrices についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by