创建分段匿名函数matlab

时间:2017-03-08 05:08:39

标签: matlab

我有一个表达式,如果两个变量的总和是偶数,我想要为0,如果和是奇数,我想要一个函数。我试过这个:

fmn = @(m,n) (mod(m+n,2)~=0)*16*m*n/(pi^2*(m^2-n^2)^2);

我的问题是,如果我为m = n执行此操作,那么我得到的是NaN而不是0.如何解决此问题,以便给出0这样的东西?

1 个答案:

答案 0 :(得分:4)

1/(m^2-n^2)正在生成正在破坏您的功能的NaN。为了解决这个问题,您可以为分母(即机器epsilon)添加一个小的有限性:

fmn = @(m,n) (mod(m+n,2)~=0)*16*m*n/(pi^2*((m^2-n^2)^2 + eps()));

或当mn足够接近时,其字词仅为非零:

fmn = @(m,n) (mod(m+n,2)~=0)*16*m*n/(pi^2*((m^2-n^2)^2 + abs(m-n)<=eps(m)));