回 帖 发 新 帖 刷新版面

主题:关于Matlab的矩阵的运算效率

以下是一个余度很大的高斯约当消元法Matlab实现,我不关心他的改进问题,而关心这个程序的效率问题,整个程序的运行耗时非常有意思,每次遇到K为2^n(也即方程为2^n阶时)时,程序会出现一个异常长的耗时,而后有回复正常的时间增长。我没有学过数值分析也不知道是否是必然,谁能不能解释一下这个现象?
function T=linear_solve(K,P)
A=[K P]; %线性方程的扩充系数矩阵
for i=1:size(A,1)
    A(i,:)=A(i,:)/A(i,i);
    for j=1:size(A,1)
        if (i~=j) 
            A(j,:)=A(j,:)-A(j,i)*A(i,:);
        end
    end
end
T=A(:,size(A,2));

这是127-129阶方程的运行耗时
0.1003    0.1900    0.1082
这是255-257阶方程的运行耗时
1.0734    5.2123    1.1457

回复列表 (共3个回复)

沙发

A(i,:)=A(i,:)/A(i,i);
这里是不是要./啊

数值分析里的直接消元法是确定时间复杂度的,O(n3)

还有,需要选主元,不然结果不准确

板凳

Rick0ne兄我已经说了这个程序余度很大,我关心的不是哪个地方有问题,而是时间为什么会出现跳跃。至于计算复杂度的问题那太容易分析了。
有点所答非所问啊!

3 楼

看来没人知道了?
Matlab内部实现没人清楚吗?

我来回复

您尚未登录,请登录后再回复。点此登录或注册