Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 当零元素已知时,改进朴素高斯消去法_Matlab_Linear Algebra - Fatal编程技术网

Matlab 当零元素已知时,改进朴素高斯消去法

Matlab 当零元素已知时,改进朴素高斯消去法,matlab,linear-algebra,Matlab,Linear Algebra,我写了没有旋转的朴素高斯消去法: function [x] = NaiveGaussianElimination(A, b) N = length(b); x = zeros(N,1); mulDivOp = 0; subAddOp = 0; for column=1:(N-1) for row = (column+1):N mul = A(row,column)/A(column,column);

我写了没有旋转的朴素高斯消去法:

function [x] = NaiveGaussianElimination(A, b)
    N = length(b);
    x = zeros(N,1);
    mulDivOp = 0;
    subAddOp = 0;
    for column=1:(N-1)
        for row = (column+1):N
            mul = A(row,column)/A(column,column);
            A(row,:) = A(row,:)-mul*A(column,:);
            b(row) = b(row)-mul*b(column);
            mulDivOp = mulDivOp+N-column+2; 
            subAddOp = subAddOp +N-column+1;
        end
    end

    for row=N:-1:1
        x(row) = b(row);
        for i=(row+1):N
            x(row) = x(row)-A(row,i)*x(i);
        end
        x(row) = x(row)/A(row,row);
        mulDivOp = mulDivOp + N-row + 1;
        subAddOp = subAddOp + N-row;
    end
    x = x';
    mulDivOp
    subAddOp
    return
end
但我很好奇,如果我知道矩阵的哪些元素为0,我是否可以减少乘法/除法和加法/减法的数量:

对于N=10:

A =

    96   118     0     0     0     0     0     0     0    63
   154   -31  -258     0     0     0     0     0     0     0
     0  -168   257  -216     0     0     0     0     0     0
     0     0   202    24   308     0     0     0     0     0
     0     0     0  -262   -36  -244     0     0     0     0
     0     0     0     0   287  -308   171     0     0     0
     0     0     0     0     0   197   229  -258     0     0
     0     0     0     0     0     0   -62  -149   186     0
     0     0     0     0     0     0     0   -43   255  -198
  -147     0     0     0     0     0     0     0  -147  -220

非零值来自randi。一般来说,当absi-j可能不是时,非零元素是a{1,N},a{N,1}和a{i,j}。有一些很好的算法可以减少三对角矩阵,但它们与对角矩阵非常接近。实际上,这是一种使用正交相似变换而不是高斯消去法生成矩阵奇异值分解的方法


问题是,当您使用高斯消去法删除第一列中的非零项时,您将在其他列中引入额外的非零项。你走得越远,你破坏的矩阵结构就越多。对于您试图解决的问题,高斯消去法可能只是一种错误的方法,至少在您试图利用矩阵的结构时是这样。

这是否有帮助@感谢链接,但我阅读了这个问题和答案,但我有一个任务要实现我自己的朴素高斯消去算法,然后找出如何减少这种特殊情况下的操作数量。所以我实现了高斯,现在我试图解决第二部分。