3

该链接显示matlab中有一个kronecker delta函数。然而:

>> help kroneckerDelta

    kroneckerDelta not found

我正在使用 R2011b,所以也许这还没有被编程到工具包中?

编辑:: 它适用于 MuPad,只是不适用于 matlab ......

.

4

4 回答 4

4

如果 j==k,Kronecker delta 返回 1...

所以你可以简化表达式:

function d=kronDel(j,k)

d=j==k

end

幸运的是,MATLAB 将布尔值表示为 (0,1)

于 2013-07-18T20:31:10.510 回答
2

我在我的 R2012b 中没有看到它,所以可能没有。除非您需要符号数学,否则您总是可以自己编写。像这样简单的东西

function d = kronDel(j,k)

if j == k
    d = 1;
else
    d = 0;
end
于 2013-07-18T19:44:58.120 回答
2

您也可以内联执行此操作,例如

( a == b )

但是,使用匿名函数是将这样的单行转换为更具可读性的好方法

kronDel = @(j, k) j==k ;

kronDel( 2, 1 )
kronDel( 2, 2 )
于 2014-12-08T14:59:49.870 回答
0

您指向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
于 2013-07-18T23:14:04.180 回答