translating commands from python

2 次查看(过去 30 天)
HC98
HC98 2020-1-31
编辑: Stephen23 2020-1-31
So I'm trying to translate the following code from Python:
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)
And end up stuck with an incorrect if statement:
% 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
Where am I going wrong?
  2 个评论
Geoff Hayes
Geoff Hayes 2020-1-31
HC98 - m appears to be an array with 400 elements, so what are you expecting to happen with
if m<=1
Is this logic that you want to apply to each element of m? Also, why is u used if m<=1 but v used for the else?
HC98
HC98 2020-1-31
the expectation is that this function is applied to values of m less than 1.

请先登录,再进行评论。

回答(1 个)

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)
Using if is a red herring (it would require a loop, which is a waste of MATLAB).

类别

Help CenterFile Exchange 中查找有关 Logical 的更多信息

标签

Community Treasure Hunt

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

Start Hunting!

Translated by