符号工具包 - 分段函数给出NaN

时间:2018-03-29 14:30:12

标签: matlab symbolic-math

所以我有以下功能:

psi(z,mu) = piecewise(mod(mu,2)==1, sin((mu+1)*z), mod(mu,2)==0, cos(mu*z)) ;

然而,这给了我psi(z,mu)= NaN,mu> 2,我不知道为什么。

2 个答案:

答案 0 :(得分:3)

这似乎是一个非常奇怪的问题,在符号环境中使用mod似乎是一个问题。

我发现工作的一个修复就是用mu-2*floor(mu/2)取代mod,这是一个常用于没有mod函数的语言的mod的定义。

答案 1 :(得分:0)

另一种解决方法是使用MuPAD's modulo operator致电feval。在您的情况下,您可以创建一个新的mod函数:

syms z mu
mods(z,mu) = feval(symengine,'_mod',z,mu);
psi(z,mu) = piecewise(mods(mu,2)==1, sin((mu+1)*z), mods(mu,2)==0, cos(mu*z));

现在psi(1,3)将返回sin(4)。如果mu不是整数,则仍会返回NaN

(请注意,psi也是您正在遮蔽的内置Matlab函数的名称:polygamma)。