for loop returns NaN

3 次查看(过去 30 天)
I am trying to do this in my code:
for i=1:c+1
load(row) = load(row)+(ro(row,i)* MinRateCurrentUserRRH(row,i))/(log(1+SINR(row,i)));
end
ro is a matrix of 1 and 0 s and MinRateCurrentUserRRH and SINR s are other matrixes. before running the for loop, load (row) is fine and for example 0.3, after first loop, it turns to NaN, so it gives errors, I can't figure out the problem. can anyone help me with it?
  3 个评论
negin tebyani
negin tebyani 2018-2-10
编辑:negin tebyani 2018-2-10
SINR and currnetminrate are zero matrices that are filled in the code in other loops, in the time of running this, they look like:
and
and c is 1.
dpb
dpb 2018-2-10
As other poster says, nothing anybody here can do without actual data but you've got all the information you need; just use the debugger and see where your logic fails.
While not the specific problem, you can probably replace all the loops with Matlab array operations; "the MATLAB way". Look at the "dot" operators under
>> help punct
Punctuation.
. Decimal point. 325/100, 3.25 and .325e1 are all the same.
. Array operations. Element-by-element multiplicative operations
are obtained using .* , .^ , ./ , .\ or .'. For example,
C = A ./ B is the matrix with elements c(i,j) = a(i,j)/b(i,j).
...

请先登录,再进行评论。

采纳的回答

Walter Roberson
Walter Roberson 2018-2-10
Your row is a vector, so (log(1+SINR(row,i)) is a vector, so your / operator is mrdivide, the matrix right division operator, with A/B being approximately equivalent to A * pinv(B) where the * indicates mtimes, the algebraic matrix multiplication operator. For vector row you need the ./ operator instead of /
You will also need to watch out for the * operator earlier in the line: you probably want it to be .*

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Creating and Concatenating Matrices 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by