Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带参数条件的matlab内联函数_Matlab_Inline - Fatal编程技术网

带参数条件的matlab内联函数

带参数条件的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

各位

我想知道是否有可能在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 -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,因为否则你会引入一种无意义的值,它应该是无穷大。