1

因此,我使用 MATLAB 的 Coder 工具包尝试了矩阵指数函数,并构建了它。我继续测试,看看结果是否可靠和更有效。虽然代码更快,但它产生的答案非常轻微。

我运行了原始函数并得到了答案:

p =
            1            0            0            0            0            0            0            0            0            0            0            0
        -0.05            1    -1.25e-07        5e-06            0            0            0            0            0            0            0            0
            0            0            1            0            0            0            0            0            0            0            0            0
     1.25e-07       -5e-06        -0.05            1            0            0            0            0            0            0            0            0
            0            0            0            0            1            0            0            0            0            0            0            0
            0            0            0            0        -0.05            1            0            0            0            0            0            0
  -2.0833e-05      0.00125  -5.2083e-11   4.1667e-09            0            0            1         0.05            0     1.25e-07            0            0
     -0.00125         0.05  -4.1667e-09      2.5e-07            0            0            0            1            0        5e-06            0            0
   5.2083e-11  -4.1667e-09  -2.0833e-05      0.00125            0            0            0    -1.25e-07            1         0.05            0            0
   4.1667e-09     -2.5e-07     -0.00125         0.05            0            0            0       -5e-06            0            1            0            0
            0            0            0            0  -2.0833e-05      0.00125            0            0            0            0            1         0.05
            0            0            0            0     -0.00125         0.05            0            0            0            0            0            1

然后我用相同的输入运行了函数的混合版本:

p2 =
            1            0            0            0            0            0            0            0            0            0            0            0
        -0.05            1    -1.25e-07        5e-06            0            0            0            0            0            0            0            0
            0            0            1            0            0            0            0            0            0            0            0            0
     1.25e-07       -5e-06        -0.05            1            0            0            0            0            0            0            0            0
            0            0            0            0            1            0            0            0            0            0            0            0
            0            0            0            0        -0.05            1            0            0            0            0            0            0
  -2.0833e-05      0.00125  -5.2083e-11   4.1667e-09            0            0            1         0.05            0     1.25e-07            0            0
     -0.00125         0.05  -4.1667e-09      2.5e-07            0            0            0            1            0        5e-06            0            0
   5.2083e-11  -4.1667e-09  -2.0833e-05      0.00125            0            0            0    -1.25e-07            1         0.05            0            0
   4.1667e-09     -2.5e-07     -0.00125         0.05            0            0            0       -5e-06            0            1            0            0
            0            0            0            0  -2.0833e-05      0.00125            0            0            0            0            1         0.05
            0            0            0            0     -0.00125         0.05            0            0            0            0            0            1

乍一看,这两个矩阵是相等的,但实际上它们相差很小:

p-p2
ans =
            0            0            0            0            0            0            0            0            0            0            0            0
  -6.9389e-18            0            0   8.4703e-22            0            0            0            0            0            0            0            0
            0            0            0            0            0            0            0            0            0            0            0            0
            0            0            0            0            0            0            0            0            0            0            0            0
            0            0            0            0            0            0            0            0            0            0            0            0
            0            0            0            0            0            0            0            0            0            0            0            0
  -3.3881e-21  -2.1684e-19  -3.2312e-26   8.2718e-25            0            0            0            0            0    5.294e-23            0            0
  -2.1684e-19            0  -8.2718e-25    5.294e-23            0            0            0            0            0   8.4703e-22            0            0
   6.4623e-27            0  -3.3881e-21   2.1684e-19            0            0            0            0            0            0            0            0
            0            0            0   6.9389e-18            0            0            0            0            0            0            0            0
            0            0            0            0            0            0            0            0            0            0            0            0
            0            0            0            0            0            0            0            0            0            0            0            0

大部分结果与原来的函数等价,但有些不是。此外,两者之间的差异是如此之小,以至于我无法相信这将是一个数学错误,而不是一个精度错误。我之所以如此关心这个,是因为这确实会导致我使用该功能的重叠原因出现问题。

mex 功能关闭这么少有什么原因,有没有办法解决这个问题?

4

1 回答 1

3

您观察到的差异是如此之小,以至于您可以认为结果实际上是相同的。

它们的计算方式不同,这就是为什么你没有得到完全相同的结果。然而,差异是粗略machine epsilon的,仅仅是因为计算机不是以无限的精度工作,而是对数字进行一些离散的表示。

于 2014-10-09T19:45:47.750 回答