本帖最后由 FLY 于 2014-7-22 14:09 编辑
[Fortran] 纯文本查看 复制代码 do i=1,200,1
R(1,1)=sqrt(dot_product(A(:,1),A(:,1)))!用Gram_Schmidt分解求QR分解
Q(:,1)=A(:,1)/R(1,1)
do k=2,N,1
forall(j=1:k-1) R(j,k)=dot_product(Q(:,j),A(:,k))
Temp=A(:,k)
do j=1,k-1!此处使用Forall会产生一个警告
Temp=Temp-Q(:,j)*R(j,k)
end do
R(k,k)=sqrt(dot_product(Temp,Temp))
Q(:,k)=Temp/R(k,k)
end do
A=matmul(R,Q)!分解完成,开始迭代
end do
给位,上面的一段程序中,不知为何R不能设置成动态数组,我用的最新的IVF编译器。Q和A都可以设置成动态数组。
事实上,当把R设置成动态数组后,也不会报错,但是计算的结果是不对的。(注:这段程序是用来求解全部的特征值)
求指点。。。
解决了,谢谢围观朋友。特别感谢五楼。我fortran用的时间不长,我以前一直用的VB,搞混了。VB变量不用初始化,默认为0,而FORTRAN需要。
|