开发者

Matrix dimension error while calling mldivide in MATLAB

I am getting this error while running my code:

Error using ==> mldivide Matrix dimensions must agree.

Here is my code :

%make the plots of phase and group velocity vs discreteness of the grid
c=1;

a=input('Please enter the ratio cdt/dx : ')

figure(1)
R=2:40;
plot(R,phase_vel(R,a)/c)
xlabel('R=l/dx')
ylabel('u_phase/c')

%figure(2)
%plot(group_vel(R,a),R,0,40)
%xlabel('R=l/dx')
%ylabel('u_group/c')

and here are my functions :

function phase_velocity = phase_vel(R,a)
    %numerical phase velocity of the discrete wave 
    c=1;
    phase_velocity=(2*pi*c)/(R*knum(R,a)开发者_如何学编程);
end

function group_velocity =group_vel(R,a )
    %numerical group velocity of the discrete wave
    c=1;
    group_velocity=(a*sin(knum(R,a)))/(sin(2*pi*a/R))
end

function knumber = knum(R,a)
    %This is the k wave number
    knumber=acos((1/a)^2*(cos(2*pi*a/R)-1)+1);
end

How can I resolve this error?

EDIT: I used . operator in every equation and i changed the limits of R=4:40


If your goal is to apply your formulas to each individual value in the vector R then you should be performing all of your computations using the element-wise arithmetic operators .*, ./, and .^ instead of the matrix operators *, /, and ^.

Your error is probably occurring in the first call to your function knum, specifically when you try to compute 2*pi*a/R. Since 2*pi*a is a single scalar value, you get an error when trying to perform matrix right division / using the row vector R. The really weird thing is the error message:

??? Error using ==> mldivide
Matrix dimensions must agree.

which implies you are using the matrix left division operator \, which you clearly aren't. I tested this in MATLAB R2010b and I get the same incorrect function name appearing in my message. I think this may just be a typo in the error message, and I've dropped a note to the MATLAB folks to take a look at it and clear it up.


I don't have the Symbolic Math Toolbox, but your problem seems to be that you are using plot, a function which can deal with arrays of numbers, and feeding it the result of a symbolic calculation. Have a look at the Matlab Help, where the Topic Creating Plots of Symbolic Functions suggests using ezplot(). Alternatively you need to evaluate your symbolic expression for certain input values to create an array of numbers that plot can deal with - but you can't use double() for that since it wouldn't know what numbers to plug into your variables.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜