MATLAB and Simulink resources for Arduino, LEGO, and Raspberry Pi

Learn moreOpportunities for recent engineering grads.

Apply Today**New to MATLAB?**

Asked by Nourriee BB
on 9 Oct 2011

This is the script I am currently processing through MATLAB however it keeps returning me an error that says : ??? Error using ==> mtimes Inner matrix dimensions must agree.

Error in ==> Complexmodel at 12 T1=((elevator_mass+load_mass1)*g+X)*a;

My script:

g=9.81; elevator_mass=1000; load_mass1=1500; load_mass2=2000; load_mass3=2500; safe_load=4500; u=0.6:1:1.6; a=0:1:10; safty(1:11)=safe_load; X=3.*u.^2; xlabel_information='Elevator acceleration'; T1=((elevator_mass+load_mass1)*g+X)*a; T2=((elevator_mass+load_mass2)*g+X)*a; T3=((elevator_mass+load_mass3)*g+X)*a; plot(a,T1,'b-o',a,T2,'g-o',a,T3,'k-o',a,safty,'.'); xlabel(xlabel_information) ylabel('Cable Tension') title('Tension vs Acceleration'); legend('load mass 1','load mass 2','load mass 3','Safe load');

**[EDITED, JSimon, 09-Oct-2011 16:19 UTC]** Code formatted - please do this by your own, see Markup help

*No products are associated with this question.*

Answer by Jan Simon
on 9 Oct 2011

Accepted answer

You could use the debugger to locate the problem:

dbstop if error

Now MATLAB stops, if the error occurs and you can inspect the dimensions:

In: T1=((elevator_mass+load_mass1)*g+X)*a; ((elevator_mass+load_mass1)*g+X => [1 x 2] a => [1 x 11]

Of course the multiplication is not possible.

Show 1 older comment

Walter Roberson
on 9 Oct 2011

Andrei's version looks plausible, but you will need to decide whether you want .* (element by element multiplication) or if you want bsxfun() (create array with all of the combinations of values), or if you want to transpose one of the vectors and do a matrix multiplication.

Nourriee BB
on 10 Oct 2011

if i were to do a matrix multiplication. What would I need to change in my script to make it possible?

Walter Roberson
on 10 Oct 2011

if you have two vectors, A and B, each 1 x 11, then you can either do

A * B'

to get a 1 x 1 result,

or you can do

A' * B

to get an 11 x 1 result.

## 0 Comments