关于matlab中的max函数

在这里插入图片描述

关于matlab中的max函数

完成工程数值方法的作业时,有一个PA=LU分解的题目,中间有一段进行比较的代码,但是在进行第二次调换的时候却无法调换过来,百思不得其解。

function [P,L,U]=PLU_decomposition(A)
    num=length(A);
    U=A;
    L=diag(ones(num,1));
    P=diag(ones(num,1));
    %第一次判断
    %消元
    for j=1:num-1
       [maxnum,index]=max(U(j:1:num,j));
       if (maxnum~=abs(U(j,j)))
           U ([j,index],:)=U([index,j],:);
           P([j,index],:)=P([index,j],:);
       end
       for i=j+1:num
           L(i,j)=U(i,j)/U(j,j);
           U(i,:)=U(i,:)-U(i,j)/U(j,j)*U(j,:);
       end
    end
end

后面研究发现了一个很好玩的地方,主要也是自己没注意过。max函数的index表示的是在这一个行向量或者列向量的第几个位置。打个比方,当我矩阵跑到第二行时,比方说下面的这个矩阵。那么这时候应该进行调换,index存储的是调换的行数。本来应该是3的(我代码中取得是这一行但是去掉上半部分),最终index输出的是2,因为对于[1;2]这个向量,他就是位于第二个位置。写代码的时候这一点着实有点坑人。

在这里插入图片描述

加一行就可以了,下面是完整代码:

function [P,L,U]=PLU_decomposition(A)
    num=length(A);
    U=A;
    L=diag(ones(num,1));
    P=diag(ones(num,1));
    %第一次判断
    %消元
    for j=1:num-1
       [maxnum,index]=max(U(j:1:num,j));%max中的index只是向量中的第几个,并非返回数量
       index=index+j-1;
       if (maxnum~=abs(U(j,j)))
           U ([j,index],:)=U([index,j],:);
           P([j,index],:)=P([index,j],:);
       end
       for i=j+1:num
           L(i,j)=U(i,j)/U(j,j);
           U(i,:)=U(i,:)-U(i,j)/U(j,j)*U(j,:);
       end
    end
end
  • 6
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值