wuperseverance 2024-03-22 21:04 采纳率: 85.7%
浏览 5
已结题

杜利特尔消元matlab为什么结果不对


format longg;
A=[1.1348,3.8326,1.1651,3.4017;
   0.5301,1.7875,2.5330,1.5435;
   3.4129,4.9317,8.7643,1.3142;
   1.2371,4.9998,10.6721,0.0147;];
 b=[9.5342;6.3941;18.4231;16.9237;];
 L=zeros(4,4);
 U=zeros(4,4);
 U(1,:)=A(1,:);       %U第一行
 L(:,1)=A(:,1)/U(1,1);%L第一列
 for i=1:4           %L对角单位化
     L(i,i)=1;
 end
 
 sumU=0;%以下是求U的剩余位置元素
 for r=2:4
     for i=r:4
         for k=1:r-1
             sumU=sumU+L(r,k)*U(k,i);
         end
      U(r,i)=A(r,i)-sumU;
      sumU=0;
     end
 end
 
  sumL=0;%以下是求L的剩余位置元素
 for r=2:4
     for i=r+1:4
         for k=1:r-1 
             sumL=sumL+L(i,k)*U(k,r);
         end
      L(i,r)=(A(i,r)-sumL)/U(r,r);
      sumL=0;
     end
 end
 disp(roundn(L,-4));%保留四位小数并显示
 disp(roundn(U,-4));
 %求解y
Y=zeros(4,1);
x=zeros(4,1);
Y(1)=b(1);
sumY=0;

Y(1)=b(1); %求x4
for m=2:4   %求x1~3
    Y(m)=(b(m,1)-Y(4)*L(m,4)-Y(3)*L(m,3)-Y(2)*L(m,2)-Y(1)*L(m,1))/L(m,m);%未计算出的是零,代入不影响,简化求x
end

x(4)=Y(4)/U(4,4); %求x4
for m=3:-1:1   %求x1~3
    x(m,1)=(Y(m,1)-x(4)*U(m,4)-x(3)*U(m,3)-x(2)*U(m,2)-x(1)*U(m,1))/U(m,m);%未计算出的是零,代入不影响,简化求x
end
disp(Y);
disp(x);

怎么改(゚o゚;

  • 写回答

3条回答 默认 最新

  • GISer Liu 2024-03-28 07:59
    关注

    该回答引用自GPT-3.5,由博主GISer Liu编写:

    根据您的代码和描述,您的目标是使用杜利特尔(Doolittle)消元法求解线性方程组Ax=b,其中A是一个已知的矩阵,b是一个已知的向量。您已经实现了杜利特尔消元的算法,并且在求解过程中遇到了问题,结果不正确。下面是对您代码的问题进行分析和修改建议:

    1. 在计算U矩阵的剩余位置元素时,应该使用L的元素而不是U的元素。修改如下:
      matlabCopy code
      sumU=0;%以下是求U的剩余位置元素
      for r=2:4
      for i=r:4
      for k=1:r-1
      sumU=sumU+L(r,k)*U(k,i); % 使用L的元素
      end
      U(r,i)=A(r,i)-sumU;
      sumU=0;
      end
      end
      
    2. 在计算L矩阵的剩余位置元素时,应该使用U的元素而不是L的元素。修改如下:
      matlabCopy code
      sumL=0;%以下是求L的剩余位置元素
      for r=2:4
      for i=r+1:4
      for k=1:r-1
      sumL=sumL+L(i,k)*U(k,r); % 使用U的元素
      end
      L(i,r)=(A(i,r)-sumL)/U(r,r);
      sumL=0;
      end
      end
      
    3. 求解Y和X的过程中,您的代码有些冗余。在求解Y和X时,可以简化为:
      matlabCopy code
      % 求解Y
      for m=2:4
      Y(m)=(b(m)-sum(L(m,1:m-1).*Y(1:m-1)'))/L(m,m);
      end
      % 求解X
      for m=3:-1:1
      x(m)=(Y(m)-sum(U(m,m+1:4).*x(m+1:4)'))/U(m,m);
      end
      
      这些修改应该能够解决您目前代码中的问题。如果还有其他问题或者需要进一步的解释,请随时告诉我!

    如果该回答解决了您的问题,请采纳!如果没有,请参考以下方案进行修订

    用户答题指南

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 4月7日
  • 已采纳回答 3月30日
  • 创建了问题 3月22日