Why does my <= statement not work?

3 ビュー (過去 30 日間)
HC98
HC98 2020 年 1 月 31 日
編集済み: Stephen23 2020 年 1 月 31 日
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 件のコメント
Stephen23
Stephen23 2020 年 1 月 31 日
編集済み: Stephen23 2020 年 1 月 31 日
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
Shekhar Vats 2020 年 1 月 31 日
Can you please say more about your issue ? It's working as expected for me.
  7 件のコメント
HC98
HC98 2020 年 1 月 31 日
All I need is a clue why it won't work. I'm trying to transcribe it in MATLAB having found a copy of the code in Python which reads:
def chabrier03individual(m):
k = 0.158 * exp(-(-log(0.08))**2/(2 * 0.69**2))
return numpy.where(m <= 1,\
0.158*(1./m) * exp(-(log(m)-log(0.08))**2/(2 * 0.69**2)),\
k*m**-2.3)
Stephen23
Stephen23 2020 年 1 月 31 日
編集済み: Stephen23 2020 年 1 月 31 日
The equivalent to numpy's where is to use indexing:
x = ...;
y = ...;
idx = m<=1;
z = y;
z(idx) = x(idx)

サインインしてコメントする。

カテゴリ

Help Center および File ExchangeLoops and Conditional Statements についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by