如何将矩阵A分解成两个矩阵相乘的形式?

 我来答
匿名用户
2022-12-27
展开全部

Ax=B,改写成Ly=B,Ux=y的方程组。就相当于将A=LU分解成了两个矩阵。称为矩阵A的三角分解,或LU分解。如果L为单位下三角阵,则叫Doolittle分解,若U为单位上三角阵,则叫Crout分解。只要A的各顺序主子式不为零,则A可唯一分解成一个单位下三角阵L与一个上三角阵U的乘积。

•设Ax=b,A=LU,则Ax=LUx=b

于是令Ux=y,则Ly=b

这样原来方程能化为两个简单方程组

下面是LU分解的Fortran子程序 希望可以有所帮助

!求解au=b,u

!n表示为方程维数

subroutine lu(a,b,n,u)

implicit real(8) (a-h,o-z)

real(8)::a(n,n),b(n),u(n),a_bak(n,n),b1(n),aL(n,n),aU(n,n),y(n)

!exchange rows

do i=1,n

    tmpMax=0.d0

do ic=i,n

if(tmpMax<dabs(a(ic,i))) then

   tmpMax=dabs(a(ic,i))

   i_rec=ic

 endif

enddo

    if(i_rec.ne.i) then

do jc=i,n

tmp=a(i,jc)

a(i,jc)=a(i_rec,jc)

a(i_rec,jc)=tmp

enddo

tmp=b(i)

b(i)=b(i_rec)

b(i_rec)=tmp

        endif 

!decomposition

 do j=i,n

    tmp=0.d0

     do k=1,i-1

tmp=tmp+aL(i,k)*aU(k,j)

     enddo

    aU(i,j)=a(i,j)-tmp

    tmp=0.d0

     do k=1,i-1

tmp=tmp+aL(j,k)*aU(k,i)

     enddo

     aL(j,i)=(a(j,i)-tmp)/aU(i,i)

 enddo

enddo

!find answer

do i=1,n

    tmp=0.d0

     do j=1,i-1

     tmp=tmp+aL(i,j)*y(j)

     enddo

    y(i)=b(i)-tmp

enddo

do i=n,1,-1

    tmp=0.d0

   do j=i+1,n

    tmp=tmp+aU(i,j)*u(j)

   enddo

    u(i)=(y(i)-tmp)/aU(i,i)

enddo

end

光点科技
2023-08-15 广告
通常情况下,我们会按照结构模型把系统产生的数据分为三种类型:结构化数据、半结构化数据和非结构化数据。结构化数据,即行数据,是存储在数据库里,可以用二维表结构来逻辑表达实现的数据。最常见的就是数字数据和文本数据,它们可以某种标准格式存在于文件... 点击进入详情页
本回答由光点科技提供
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式