LU分解版本2_选主元、非原地存储

来源:互联网 发布:英语单词读法软件 编辑:程序博客网 时间:2024/06/04 18:52

LU分解版本2_选主元、非原地存储


function ex2_7_2%对系数矩阵A进行LU分解【自己写的版本,没有采用原地存储方式,进行选主元】%将L矩阵和U矩阵输出, A = [10 -7 0;      -3 2 6;      5 -1 5]; %对系数矩阵A进行LU分解,最终得到L 和 U矩阵 %初始化L和U矩阵. L = [0 0 0;      0 0 0;      0 0 0] U = [0 0 0;      0 0 0;      0 0 0]  [n,n] = size(A);  for k = 1:1:n      %%       % 在计算乘子之前,进行选主元       [m,q] = max(abs(A(k:n,k)));       % q返回的是一个行号,q的值是一个相对的值,当k=1时,q的值是相对k-1,而言的,       % 当k等于2的时候,q的值是相对于k-1而言的。       q = q + k - 1;       % 选主元       if(k ~= q)           % 当k!=q之后,说明主元所在列的最大值不是当前行,需要进行行交换,           % A(k,:) = A(q,:);===>这样写行交换的代码居然不对!不是有种方法不需要,中间变量吗!           B = A(k,:);           A(k,:) = A(q,:);           A(q,:) = B;       end      %%      i = k+1:n;      %计算乘子,将乘子填入到L矩阵的第(2、3)行,第1列      L(i,k) = A(i,k)/A(k,k);      %更新系数矩阵A,就是将A的第一行乘以相应的乘子的相反数,加到第二行和第三行      j = k:n;      A(i,j) = A(i,j) - L(i,k)*A(k,j);  end  U = A;  L   U


原创粉丝点击