符号工具包 - 分段函数给出 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)。
所以我有以下功能:
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)。