Matrix must agree HELP

Subscript indices must either be real positive integers or logicals.
Error in Skeleton_NS_solver (line 559)
plot(y(:,max(length(y)/2,ceil(length(y)/2)))',pp(:,max(length(pp)/2,ceil(length(pp)/2))+0.5*Uuu(:,max(length(Uuu)/2,ceil(length(Uuu)/2))).^2)','k-','Linewidth',1.5)

2 Kommentare

Bob Thompson
Bob Thompson am 19 Feb. 2018
Could you include more of the code, specifically the area where the matrices are defined?
Also, it is easier to read if you could use the {}Code option to display the pasted code as regular coded format. Just makes it easier to see as separate lines, rather than a large block.
paula García Ruiz
paula García Ruiz am 19 Feb. 2018
Okey, better? :)

Antworten (2)

Guillaume
Guillaume am 19 Feb. 2018

0 Stimmen

y, pp, etc. are obviously at least 2D, so length of these can be the number of rows or columns depending on the matrix, whichever is the largest. So using length to filter the column sounds very iffy. No idea if that is the cause of the problem, but replacing length by size with an explicit dimension would be wise.
As per Bob comment, knowing the actual size of the matrices would help in diagnosing the true cause.

6 Kommentare

paula García Ruiz
paula García Ruiz am 19 Feb. 2018
Bearbeitet: Walter Roberson am 19 Feb. 2018
Subscript indices must either be real positive integers or logicals.
Error in Skeleton (line 559)
plot(y(:,max(size(y)/2,ceil(size(y)/2)))',pp(:,max(size(pp)/2,ceil(size(pp)/2))+0.5*Uuu(:,max(size(Uuu)/2,ceil(size(Uuu)/2))).^2)','k-','Linewidth',1.5)
K>>
The sane happens.. Oh god
paula García Ruiz
paula García Ruiz am 19 Feb. 2018
y is 3x3 , pp is 3x3 Uuu is 4x4
Guillaume
Guillaume am 19 Feb. 2018
Bearbeitet: Guillaume am 19 Feb. 2018
I wrote size with an explicit dimension. If that length is supposed to be the number of columns, then it should be size(y, 2).
I also don't really understand the purpose of
max(x/2, ceil(x/2)) %with x > 0
It's always going to be
ceil(x/2)
However, that's not the problem. The problem is clear now that we have the size of the variables, you're trying to add a 3x1 vector pp(:, 2) with a 4x1 vector 0.5*Uuu(:, 2).^2. Adding vectors of different length is not something that matlab (or I) knows how to do.
edit: actually, that's also not your immediate problem. Your immediate problem is that one of your closing bracket is misplaced and thus you're doing:
pp(:, 2 + 0.5*Uuu(:, 2).^2)
instead of
pp(:, 2) + 0.5*Uuu(:, 2).^2
which of course is most likely to result in non-integer indices.
Once you fix that problem you'll run into the dimension mismatch error.
paula García Ruiz
paula García Ruiz am 19 Feb. 2018
Bearbeitet: Walter Roberson am 19 Feb. 2018
plot(y(:,max(length(y)/2,ceil(length(y)/2))',pp(:,max(length(pp)/2,ceil(length(pp)/2))+0.5*(Uuu(:,max(length(Uuu)/2,ceil(length(Uuu)/2))).^2)','k-','Linewidth',1.5)
That's the idea, the equation in the photo
paula García Ruiz
paula García Ruiz am 19 Feb. 2018
Bearbeitet: Walter Roberson am 19 Feb. 2018
okey by changing this: now the problem is in 483:
Error using horzcat
Dimensions of matrices being concatenated are not consistent.
Error in Skeleton_NS_solver (line 483)
uut = [ones(1,N+1)*U_wall_bot, ones(N,1)*U_wall_left AA ones(N,1)*U_wall_right,ones(1,N+1)*U_wall_top];
483----->>> uut = [ones(1,N+1)*U_wall_bot, ones(N,1)*U_wall_left AA ones(N,1)*U_wall_right,ones(1,N+1)*U_wall_top];
Guillaume
Guillaume am 19 Feb. 2018
Bearbeitet: Guillaume am 19 Feb. 2018
Debugging by forum is not an efficient method. You would be better off using Jan's advice and using matlab's debugger.
You also need to start thinking about what you write
uut = [ones(1, N+1)*..., ones(N, 1)*...
The first expression is going to result in a matrix with 1 row, the second in a matrix with N rows. Of course they can't be concatenated horizontally since they don't have the same number of rows, just as the error message tells you.
And please, use the {}Format button when posting code. Can't you see that my post is a lot more readable than yours?
Jan
Jan am 19 Feb. 2018

0 Stimmen

You can examine the reason of errors using the debugger: https://www.mathworks.com/help/matlab/matlab_prog/debugging-process-and-features.html. Eitehr set a breakpoint in the failing line or stop Matlab automatically:
dbstop if error
The check the parts of the failing command:
plot(y(:, max(length(y)/2, ceil(length(y)/2)))', ...
pp(:, max(length(pp)/2, ...
ceil(length(pp)/2)) + 0.5 * Uuu(:, max(length(Uuu)/2,ceil(length(Uuu)/2))).^2)', ...
'k-', 'Linewidth', 1.5)
This is a very ugly command. Prefer to split it into parts, because it is easier to read and to maintain. Use spaces around operators and after commas.
tmpx = y(:, max(length(y) / 2, ceil(length(y) / 2)))';
tmpP = max(length(pp) / 2, ceil(length(pp) / 2));
tmpU = max(length(Uuu) / 2, ceil(length(Uuu) / 2));
tmpy = pp(:, tmpP + 0.5 * Uuu(:, tmpU) .^ 2)';
plot(tmpx, tmpy, 'k-', 'Linewidth', 1.5)
Now it is easier to find the error.

Diese Frage ist geschlossen.

Gefragt:

am 19 Feb. 2018

Geschlossen:

am 20 Aug. 2021

Community Treasure Hunt

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

Start Hunting!

Translated by