找回密码
 注册
Simdroid-非首页
查看: 81|回复: 2

矩阵的LU分解,怎么修改啊?

[复制链接]
发表于 2010-11-3 07:31:01 | 显示全部楼层 |阅读模式 来自 美国
下面是自己写的一段,总是不对。求达人修改~
谢谢!!
function [L,U]=lu_self(A)
[n,m]=size(A);
L=eye(n,m);
U=A;
for k=1:n-1
    if U(k,k)==0
        stop;
    else      
        for i=k+1:n
            L(i,k)=U(i,k)/U(k,k);         
            for j=k+1:n
            U(i,j)=U(i,j)-L(i,k)*U(k,j);
            end           
        end
    end
end
end

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
发表于 2010-11-3 08:46:00 | 显示全部楼层 来自 河北廊坊
Simdroid开发平台
1.我建议你测试一个小例子,设置断点,检查每一步,这样对你自己也是提高
2.stop我很很在程序中用,是不是可以考虑用其他的关键字呢?

评分

1

查看全部评分

回复 不支持

使用道具 举报

发表于 2010-11-3 15:29:43 | 显示全部楼层 来自 辽宁沈阳
你的U明显不对的,你程序中U的上三角上始终和A一样 没有动;可以细读下 help里面lu分解的lu子程序
  1. function [L,U,P] = lu(A)
  2. %LU  Lower-upper triangular factorization of GF array.
  3. %   [L,U,P] = LU(X) performs Gaussian elimination on the square
  4. %   GF matrix X and returns arguments as does the LU function
  5. %   of MATLAB for double matrices.  Specifically:
  6. %
  7. %   [L,U] = LU(X) stores an upper triangular matrix in U and a
  8. %   "psychologically lower triangular matrix" (i.e. a product
  9. %   of lower triangular and permutation matrices) in L, so
  10. %   that X = L*U.  X must be square.
  11. %
  12. %   [L,U,P] = LU(X) returns lower triangular matrix L, upper
  13. %   triangular matrix U, and permutation matrix P so that
  14. %   P*X = L*U.
  15. %
  16. %   See also LSOLVE, USOLVE, INV.

  17. %    Copyright 1996-2002 The MathWorks, Inc.
  18. %    $Revision: 1.5.4.1 $  $Date: 2002/11/13 16:53:08 $

  19. global GF_TABLE_M GF_TABLE_PRIM_POLY GF_TABLE1 GF_TABLE2

  20. n=length(A);
  21. U=A;
  22. if ~isequal(U.m,GF_TABLE_M) | ~isequal(U.prim_poly,GF_TABLE_PRIM_POLY)
  23.     [GF_TABLE_M,GF_TABLE_PRIM_POLY,GF_TABLE1,GF_TABLE2] = gettables(U);
  24. end
  25. %  piv=A;
  26. piv=zeros(1,n);
  27. for k=1:n-1,
  28.     %max_row = find(U(k:n,k)==max(U(k:n,k))) + k - 1;  % find maximums
  29.     max_row = find(U.x(k:n,k)~=0) + k - 1;  % find non zero elements
  30.     if isempty(max_row)
  31.         error('matrix not invertible')
  32.     end
  33.     max_row = max_row(1);        % allow for repeated maximums
  34.     if (max_row ~= k),
  35.         U.x([k max_row],1:n) = U.x([max_row k],1:n);  % swap rows
  36.     end;
  37.     piv(k) = max_row;
  38.     %U(k+1:n,k) = U(k+1:n,k)/U(k,k);
  39.     Ukk_inv = gf_mex(U.x(k,k),U.x(k,k),U.m,'rdivide',...
  40.         A.prim_poly,GF_TABLE1,GF_TABLE2);
  41.     U.x(k+1:n,k) = gf_mex(U.x(k+1:n,k),Ukk_inv(ones(length(k+1:n),1)),U.m,'times',...
  42.         A.prim_poly,GF_TABLE1,GF_TABLE2);
  43.     % U(k+1:n,k+1:n) = U(k+1:n,k+1:n) - U(k+1:n,k)*U(k,k+1:n);
  44.     temp = gf_mex(U.x(k+1:n,k),U.x(k,k+1:n),U.m,'mtimes',...
  45.         A.prim_poly,GF_TABLE1,GF_TABLE2);
  46.     U.x(k+1:n,k+1:n) = gf_mex(U.x(k+1:n,k+1:n),temp,U.m,'plus',...
  47.         A.prim_poly,GF_TABLE1,GF_TABLE2);
  48. end;

  49. %    L=tril(U)+eye(U)-diag(diag(U));
  50. L=A;
  51. L.x=uint16(eye(n));
  52. for i=2:n
  53.     L.x(i,1:i-1)=U.x(i,1:i-1);
  54. end;
  55. U.x=triu(U.x);

  56. % Create Permutation matrix:
  57. P=A;
  58. P.x=uint16(eye(n));    % start with identity
  59. for k=1:n-1,
  60.     P.x([k piv(k)],:)=P.x([piv(k) k],:);   % exchange row k with row p(k)
  61. end;

  62. % Adjust L according to the Permutation matrix
  63. if(nargout==2)
  64.     L = P'*L;
  65. end
复制代码

评分

1

查看全部评分

回复 不支持

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Simapps系列直播

Archiver|小黑屋|联系我们|仿真互动网 ( 京ICP备15048925号-7 )

GMT+8, 2024-10-5 11:17 , Processed in 0.045943 second(s), 19 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表