该链接显示matlab中有一个kronecker delta函数。然而:
>> help kroneckerDelta
kroneckerDelta not found
我正在使用 R2011b,所以也许这还没有被编程到工具包中?
编辑:: 它适用于 MuPad,只是不适用于 matlab ......
.
如果 j==k,Kronecker delta 返回 1...
所以你可以简化表达式:
function d=kronDel(j,k)
d=j==k
end
幸运的是,MATLAB 将布尔值表示为 (0,1)
我在我的 R2012b 中没有看到它,所以可能没有。除非您需要符号数学,否则您总是可以自己编写。像这样简单的东西
function d = kronDel(j,k)
if j == k
d = 1;
else
d = 0;
end
您也可以内联执行此操作,例如
( a == b )
但是,使用匿名函数是将这样的单行转换为更具可读性的好方法
kronDel = @(j, k) j==k ;
kronDel( 2, 1 )
kronDel( 2, 2 )
您指向MuPAD函数的链接 - 请kroneckerDelta
注意示例的 URL 和时髦的排版。您不会在任何版本的 Matlab 中看到它,因为它只能通过 MuPAD 获得(mupad
在您的命令窗口中输入并在启动的窗口中尝试)。我不知道它何时被添加到 MuPAD,我知道它至少在 R2012b 中。即使help
命令没有返回任何内容,您也可能拥有它。
如果您kroneckerDelta
在 R2011b 中,您将无法从常规命令窗口或编辑器以正常方式运行它。
evalin(symengine,'kroneckerDelta(1,1)')
或更灵活
feval(symengine,'kroneckerDelta',1,1)
在这里查看更多。但是,如果您不使用符号数学,则真的没有理由使用我可以看到的这个函数 - 它甚至没有向量化!我会选择一个完全模拟kroneckerDelta
双精度行为的解决方案:
function d=kronDel(m,n)
if nargin == 1
d = double(m==0);
else
d = double(m==n);
end