【问题标题】:KroneckerDelta in matlabmatlab中的KroneckerDelta
【发布时间】:2013-07-18 19:24:23
【问题描述】:

This link 表明matlab中有一个克罗内克三角函数。然而:

>> help kroneckerDelta

    kroneckerDelta not found

我正在使用 R2011b,所以可能还没有将它编程到工具包中?

编辑:: 它可以在 MuPad 中工作,只是不能在 matlab 中......

.

【问题讨论】:

  • 另外,为了将来参考,您必须检查您的版本文档,因为您可能会注意到该链接提供了 R2013a 文档(所有搜索也是如此)。所以尝试从 Mathworks >> 支持 >> 文档中心 >> 其他版本。

标签: matlab delta


【解决方案1】:

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

所以你可以简化表达式:

function d=kronDel(j,k)

d=j==k

end

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

【讨论】:

  • 你应该格式化你的代码。此外,这个问题被标记为 [matlab],而不是 [octave],所以应该使用 end。将输出转换为 double 或输入变量的类可能也是一个好主意。
【解决方案2】:

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

这样简单的东西
function d = kronDel(j,k)

if j == k
    d = 1;
else
    d = 0;
end

【讨论】:

    【解决方案3】:

    你也可以内联,比如

    ( a == b )
    

    但是,使用 anonymous function 是一种将这样的单行代码转换为更易读的内容的好方法

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

    【讨论】:

      【解决方案4】:

      您的链接指向MuPAD 函数kroneckerDelta - 请注意示例的URL 和时髦的排版。您不会在 任何 版本的 Matlab 中看到它,因为它只能通过 MuPAD 使用(在命令窗口中输入 mupad 并在启动的窗口中尝试)。我不知道它是什么时候添加到 MuPAD 中的,我知道它至少在 R2012b 中。即使help 命令没有返回任何内容,您也可能拥有它。

      如果您在 R2011b 中有 kroneckerDelta,您将无法从常规命令窗口或编辑器以正常方式运行它。

      evalin(symengine,'kroneckerDelta(1,1)')
      

      或者更灵活的

      feval(symengine,'kroneckerDelta',1,1)
      

      more here。但是,如果您不使用符号数学,则真的没有理由使用我可以看到的这个函数 - 它甚至没有向量化!我会选择一个完全模拟kroneckerDelta 双精度行为的解决方案:

      function d=kronDel(m,n)
      if nargin == 1
          d = double(m==0);
      else
          d = double(m==n);
      end
      

      【讨论】:

      • ...刚刚看到您对它在 MuPAD 中的编辑。好了,剩下的故事就讲到这里了……
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-10-26
      • 2011-01-04
      • 2016-09-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-04
      相关资源
      最近更新 更多