【问题标题】:Matrix Inversion time矩阵反转时间
【发布时间】:2013-12-03 09:31:12
【问题描述】:

我在 matlab 中生成了一个对称(托佩利茨)矩阵。

  • 矩阵大小为 3200x3200 的矩阵求逆时间为 5.8 秒
  • 矩阵大小为 5000x5000 的矩阵求逆时间为 70.7 秒
  • 矩阵大小为 7200x7200 的矩阵求逆时间为 1700 秒

谁能告诉我这种指数增长的原因。我研究过它需要 N^3 次操作才能找到逆,但无法弄清楚。

实际上,我正在使用 MoM 构建矩阵,对于 9800x9800 矩阵大小,我收到“内存不足”错误。那么这个问题有什么解决办法呢?

谢谢

【问题讨论】:

  • 也许你使用了太多内存,以至于你迫使操作系统使用交换。
  • 一个 7200x7200 的矩阵只会消耗大约 400MB 的内存。 MATLAB 逆向命令是否会大大增加使用的内存量?
  • 测量更广泛的矩阵大小的执行时间。绘制执行时间与大小的关系图。图表中的不连续性可能是内存层次结构对计算的影响:缓存效果(每个缓存级别一个效果),以​​及正如@OliCharlesworth 建议的那样,从 RAM 交换到磁盘(内存层次结构中的倒数第二步) .

标签: matlab matrix


【解决方案1】:

您似乎发现 有几个可能的原因,例如:

  1. 鉴于矩阵的结构,您并不总是得到最坏情况的计算成本
  2. 你的时间不够
  3. 时间慢不是计算本身的结果

我自己做了一个快速测试,到目前为止,它的表现似乎很像 O(N^3),而不是指数陡峭。

mySize = (1:10:100).^2;
timings = [];
for isize=mySize 
    disp(isize)
    M = rand(isize);
    tic
    inv(M);
    t= toc;
    timings = [timings;t];
end


plot(mySize,timings)
hold all
plot(mySize,mySize.^1.5/mean(mySize.^1.5)*mean(timings))

【讨论】:

  • 我修复了代码并运行了它。为什么要添加n^1.5 参考线?完美匹配我电脑上的n^3。
  • @DanielR 我假设N 代表矩阵中的行数。如果它代表元素的数量,它确实应该是^3。很高兴听到它很适合。
  • 你是对的,由于某种原因它匹配我电脑上的 n^3,应该是 n^1.5
猜你喜欢
  • 2010-11-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多