Error using .* Matrix dimensions must agree.

I worked on a machine at my Uni and wrote a code. It had a very long equation, consists of plenty of single value variables, except for 2. One was 1x15,000, the other was 2x1. The code worked perfectly providing me a 2x15,000 array as predicted. Then I went home and tried the code on my machine, ran the code (without any changes) and got the: "Error using .* Matrix dimensions must agree.".
So I decided to check the problem on a much simpler calculation, so I entered:
x=[1 2];
y=[3;4];
z=x.*y
I got the same error again:
Error using .*
Matrix dimensions must agree.
Error in Test (line 3)
z=x.*y
Clearly, the result I should've gotten is this:
z =
3 6
4 8
So I suspect something is off with my MATLAB version. Maybe something in my MATLAB's preferences could be causing this to fail?

 Respuesta aceptada

Star Strider
Star Strider el 27 de Dic. de 2017
You may have to use the bsxfun (link) function to make it work on both machines without encountering compatibility problems. In R2016b (if I remember correctly) ‘implicit expansion’ became the default, so operations that previously required bsxfun would then work without it. So I suspect your machine is running R2016a or earlier, and the uni machine is running R2016b or later.
This bsxfun call:
x=[1 2];
y=[3;4];
z = bsxfun(@times, x, y)
z =
3 6
4 8
will give you the result you expect.

3 comentarios

Star Strider
Star Strider el 27 de Dic. de 2017
Alo Gr’s “Answer” moved here:
Yep, It makes a lot of sense, my uni has a 2017 while I have a 2015 version. The expression I'm using is very long and complicated, so using the bsxfun you suggested would be very difficult to use. Is there a way maybe to enable 'implicit expansion' in older versions?
Thanks for your prompt response.
Star Strider
Star Strider el 27 de Dic. de 2017
My pleasure.
‘Is there a way maybe to enable 'implicit expansion' in older versions?’
Not ot my knowledge. You need to go through each such multiplication and replace it with a bsxfun call. You can write an anonymous function that would make that a bit easier.
Most MATLAB changes are enhancements. This one causes significant backward-compatibility problems. That is the reason I continue to use bsxfun in my Answers, even when the Question specifically mentions versions R2016b or later.
You have my most profound sympathies. Unfortunately, that is the best that either — or MathWorks — can do to solve your problem.
Matt J
Matt J el 27 de Dic. de 2017
Thanks for your prompt response.
@Alo Gr, If Star Strider's answer has solved your issue, you should "Accept" click it.

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Más información sobre MATLAB en Centro de ayuda y File Exchange.

Productos

Preguntada:

el 27 de Dic. de 2017

Comentada:

el 27 de Dic. de 2017

Community Treasure Hunt

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

Start Hunting!

Translated by