所以我有以下功能:
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,我不知道为什么。
答案 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)。