"Error using *". Help with my Monte Carlo Simulation

I have created code on low rank assumption using nuclear norm using CVX. I'm thinking this error code is being caused by the variable X not being recognised but im not sure. Here is the following error code -
Error using *
Incorrect dimensions for matrix multiplication. Check that the
number of columns in the first matrix matches the number of rows
in the second matrix. To perform elementwise multiplication, use
'.*'.
Error in Untitled34 (line 36)
y(i_p) = trace(M_p{i_p}*X);
Related documentation
Here is my code :
clear all;
clc;
MONTE_CARLO = 10;
n = 10;
m = 20;
k = 5;
U = randn(m,k);
V = randn(k,n);
X = U*V
for p = 1 : 50 : n^2 % Number of measurements
for mc = 1 : MONTE_CARLO % Monte Carlo simulations
M_p = cell(p, 1); % Cell with measurement matrices
y = zeros(p, 1); % Vector of measurements
for i_p = 1 : p % Generate measurement matrices
M_p{i_p} = randn(n, n);
y(i_p) = trace(M_p{i_p}*X);
end
cvx_begin
variable Xe(n,n);
minimize(norm_nuc(Xe));
subject to
for i_p = 1 : p
trace(Xe*M_p{i_p}) == y(i_p);
end
cvx_end
end
end

8 commentaires

Jan
Jan le 25 Jan 2021
Do you see, that your code is hard to read? Please format it as code and remove the pile of blank lines.
@ Ok I have removed most of the blank lines it should be better now
'Please format it as code'
Jan is referring to the option to 'Insert a line of code' in the posting section. You can also select the block of code and press Alt+Enter.
It looks like X is defined to be a 20 x 10 size matrix, but M_p{i_p} is defined as a 10 x 10 matrix. You can multiply X*M_p{i_p}, but not the other way around.
Perhaps you want the transpose of X?
@Bob Thompson By using X*M_p{i_p} instead of M_p{i_p} will cause the matrix not to be squared and the matrix has to be sqaured.
This means I will have to change the value of X or transpose it.
but how would I transpose X
Transposing a matrix is simple, just add an apostrophe after it.
X_Transpose = X';
You can also just include this in a greater equation
y(i_p) = trace(M_p{i_p}*X');
Now that I think about it, transposing X isn't going to give you a square matrix anyway. X is not a square matrix, but M_p{i_p} is, so no matter how you multiply them together they will not result in a square matrix output.
@Bob Thompson What would you recommend then to fix this issue?
I don't know, because I don't know your problem statement to understand what X is supposed to be, or why you need a square matrix. It seems to me that this is not a MATLAB specific issue, and I recommend taking another look at the purpose for your code, rather than the specifics of the code itself. Sorry I can't be more help.

Connectez-vous pour commenter.

Réponses (0)

Catégories

Community Treasure Hunt

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

Start Hunting!

Translated by