【发布时间】:2016-09-12 08:38:18
【问题描述】:
我正在编写一个程序,它计算一个矩阵的 LU 分解,具有部分旋转,我希望该函数输出几个(2 或 3)个矩阵,而无需多次运行程序来单独输出每个矩阵,即浪费时间,因为它一次就能得到我想要的一切。有没有办法做到这一点?例如,这是我使用 Doolittle 算法的函数,用于不需要旋转的方阵。我希望我的输出同时成为矩阵 l 和 u,但我不知道这样做的方法。
function lu_d(aa) result(l)
real, dimension (:,:) :: aa !input matrix
real, dimension (size(aa,1), size(aa,2)) :: a !keeping input variable intact
real, dimension (size(a,1), size(a,2)) :: l , u !lower and upper matrices
integer :: i,j,k !index
real :: s !auxiliar variable
a=aa
do j=1 , size(a,2)
u(1,j)=a(1,j)
end do
l(1,1)=1
do j=2, size(a,2)
l(1,j)=0
end do
do i=2, size(a,1)
l(i,1)=a(i,1)/u(1,1)
u(i,1)=0
do j=2, i-1
s=0
u(i,j)=0
do k=1, j-1
s=s+l(i,k)*u(k,j)
end do
l(i,j)=(a(i,j)-s)/u(j,j)
end do
l(i,i)=1
do j=i, size(a,2)
s=0
l(i,j)=0
do k=1, i-1
s=s+l(i,k)*u(k,j)
end do
u(i,j)=a(i,j)-s
end do
end do
end function
【问题讨论】:
-
当然有办法做这种事情,但你应该表现出你的一些努力。你的代码看起来如何?你发现了哪些问题?
-
我在网上查找了一些信息,但没有找到任何相关信息。我将编辑帖子,并添加我的代码!请稍等。
-
哦,输出是指作为函数结果返回?我在您的代码中看不到任何数组
m,所以我仍然不确定您到底想要什么,但我认为使用子例程而不是函数会更容易。 -
抱歉,矩阵 u,已修复。那么,一个函数不可能有两个结果吗?类似于“矩阵向量”。
标签: matrix fortran numerical-computing matrix-decomposition