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

Symbolic Toolkit - Piecewise function gives NaN

所以我有以下功能:

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

然而,对于 mu>2,这给了我 psi(z,mu) = NaN,我不确定为什么。

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

我发现一个有效的修复方法是将 mod 替换为 mu-2*floor(mu/2),这是 mod 的定义,通常用于没有 [=15] 的语言=]函数。

另一种解决方法是调用 MuPAD's modulo operator with 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) 将 return sin(4)。如果 mu 不是整数,NaN 仍然是 returned.

(请注意,psi 也是您正在跟踪的 built-in Matlab 函数的名称:polygamma)。