带参数条件的matlab内联函数
各位 我想知道是否有可能在matlab中编写以下r函数作为内联函数。我试着把这个条件作为一个单独的因子,比如*(r>a),当r为0时,由于1/r^3的除法,我得到了NaN 你可以试试带参数条件的matlab内联函数,matlab,inline,Matlab,Inline,各位 我想知道是否有可能在matlab中编写以下r函数作为内联函数。我试着把这个条件作为一个单独的因子,比如*(r>a),当r为0时,由于1/r^3的除法,我得到了NaN 你可以试试 chi = 1; %// arbitrary value a = 1; %// arbitrary value theta = pi/3; %// arbitrary value nu = @( r ) (r>a).*( (chi/3).*((a.^3)./(r.^3)).*(3*cos(theta).^2
chi = 1; %// arbitrary value
a = 1; %// arbitrary value
theta = pi/3; %// arbitrary value
nu = @( r ) (r>a).*( (chi/3).*((a.^3)./(r.^3)).*(3*cos(theta).^2 -1);
首先,您没有说明如果
r=0
实际应该发生什么。从数学上讲,该项得到无穷大。我假设您更希望将其设置为零。对于r=a
,会发生什么?又是一个定义不清的例子,你确定你的公式是正确的吗
如果你有统计工具箱,你可以使用。如果没有,我想说没有办法编写类似于nansum的函数,而nansum不能内联完成
r = -5:1:5;
a = 1;
R = 42; %// rest of your function
%// not working, or removing of nan afterwards required
X = @( r ) (r>=a).*(a./r).^3*R;
%// inline solution with statistics toolbox
Y = @( r ) arrayfun(@(x) nansum( (x>=a)*(a/x)^3*R ), r);
output = [X(r)' Y(r)']
nansum
未矢量化,如果仍要将其用于矢量,请将其包装到arrayfun中
nansum
的代码完全符合注释中的建议(output(isnan(output))=0
),我可能不允许复制并粘贴到这里。它过滤掉所有的NaN
,然后对输入求和。使用open nansum
获得洞察力
正如Jigg所指出的,类似的函数如
nanmean
也会起到作用。我找到了一个简单的解决方法。这基本上是Shai和Jigg建议的,即使用额外的乘法因子(r>a)
为了去除NaN,我们只需要将eps添加到1/r3的分母,即
1/(r+eps)^3 *(r>a)
a
的值是多少?a是一个正数,比如说1。你绝对需要它成为一个内联函数吗?或者你可以简单地用nu(isnan(nu))=0
之类的东西去掉NaNs a后验数吗?你的答案和我的类似,但问题是0*NaN
=NaN
。我的函数确实是不连续的,r==1的情况应该是r>1。@不,好的,我添加了它。这确实是一个很好的解决方法,但是如果a>0,因为否则你会引入一种无意义的值,它应该是无穷大。