dimension error with * operator

14 次查看(过去 30 天)
Douglas Brenner
Douglas Brenner 2018-9-28
评论: OCDER 2018-9-28
This line of code: asynch = C1(:)*N(:)*C(:)'/(delta-2) throws an error: Error using * Inner matrix dimensions must agree. That would seem to be right C1 is a 1X100 double and N is a 100x100 double. So I changed the code to T = transpose(C1); asynch = C1(:)*N(:)*T(:)'/(delta-2). This makes T a 100X1 double and the code should run but I get the same error. What's wrong. Thanks
  1 个评论
OCDER
OCDER 2018-9-28
synch = C1(:)*C1(:)'/(delta-2)
^
This works because of the transpose operator.
C1(:) = Nx1 vector
C1(:)' = 1xN vector
so C1(:)*C1(:)' works as a (Mx1) * (1xM) = MxM vector (inner dimension agrees)
In your case, you have a matrix N that is 100x100.
N = 100x100 matrix
N(:) = 10000x1 vector
C(:)*N(:) will NOT WORK because it's a (Mx1) * (10000x1) = ????

请先登录,再进行评论。

回答(3 个)

OCDER
OCDER 2018-9-28
Although N is a 100x100 matrix, when you do N(:), you make it into a 10000x1 vector. Get rid of the "(:)" when you want to proper matrix math.

Pratik Bajaria
Pratik Bajaria 2018-9-28
Hello,
Try .* operator. It is the normal matrix multiplication, the one you are trying is doing a Hadamard multiplication.
Regards, Pratik

Douglas Brenner
Douglas Brenner 2018-9-28
The paper from which I got the code uses * and that works in this line: synch = C1(:)*C1(:)'/(delta-2). Not only do I not get an error but I get what I think is the right answer. For asynch = C1(:)*N(:)*C(:)'/(delta-2), I think the problem is that N is 2D and C1 is one D but I got that code from the paper too.

类别

Help CenterFile Exchange 中查找有关 Mathematics 的更多信息

产品


版本

R2014a

Community Treasure Hunt

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

Start Hunting!

Translated by