Why does my <= statement not work?
이전 댓글 표시
I'm running a simple loop that applies a less than or equal to inequality to a value. Unfortunately, it is overlooking this value and not working. Here is my code
% Initial Conditions
clearvars
close all
Ms=1.989E30;
m = logspace(-2, 2, 400);
% m = 1E2:100:1E4
% (m<0.08, m**-0.3, numpy.where(m < 0.5, 0.08**-0.3 * (m/0.08)**-1.3, 0.08**-0.3 * (0.5/0.08)**-1.3 * (m/0.5)**-2.3))
%% def chabrier03individual(m):
k = 0.158*exp(-(-log(0.08))^2/(2*0.69^2))
if m<=1
u = 0.158*(1./m)*exp(-(log(m)-log(0.08))^2/(2 * 0.69^2));
else
v = k*m;
end
댓글 수: 1
The comprison works as documented. Note the if documentation states " An expression is true when its result is nonempty and contains only nonzero elements (logical or real numeric). Otherwise, the expression is false."
You provided if with a 1x400 logical vector as its condition, it contains no non-zero elements:
>> nnz(m<=1)
ans = 0
Based on this I would expect the else part to be executed, and this is indeed what occurs when i run your code.
Note that your vector m contains just one value repeated 400 times over:
>> unique(m)
ans = 100
It is not clear why you wanted to create that 1x400 vector in such an obfuscated way.
EDIT: the OP originally defined
m = logspace(2, 2, 400);
but has since edited the question and changed it to:
m = logspace(-2, 2, 400);
The relevance of reading the if documentation is unchanged.
답변 (1개)
Shekhar Vats
2020년 1월 31일
0 개 추천
Can you please say more about your issue ? It's working as expected for me.
댓글 수: 7
HC98
2020년 1월 31일
Stephen23
2020년 1월 31일
"I couldn't get the u value to print,"
Because your if condition is not true, I see no reason to expect u to be defined.
Stephen23
2020년 1월 31일
HC98' "Answer" moved here:
Apologies, I made an error in my code, I've added the correct version here
HC98
2020년 1월 31일
"U shoiuld be defined."
No. Your non-scalar logical vector does not contain only non-zeros:
>> nnz(m<=1)
ans = 200
>> numel(m)
ans = 400
Read the if documenttion to understand why this is relevant.
Most likely using if is entirely the wrong approach anyway, and you should be using indexing.
HC98
2020년 1월 31일
x = ...;
y = ...;
idx = m<=1;
z = y;
z(idx) = x(idx)
카테고리
도움말 센터 및 File Exchange에서 Loops and Conditional Statements에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!