| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 610 人关注过本帖
标题:【求助】关于三对角矩阵的计算问题!!!fortran的
只看楼主 加入收藏
mot
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2010-12-6
收藏
 问题点数:0 回复次数:0 
【求助】关于三对角矩阵的计算问题!!!fortran的
program main
implicit none
real(kind=8)::B(292) !一维双精度数组(用来存放系数矩阵)
real(kind=8)::D(98) !一维双精度数组(用来存放结果矩阵)
integer :: i
integer :: j
integer :: L
integer :: k

!对结果矩阵数组赋值
do i=1,98
  if(i<=97)then
  D(i)=0.0d0
  else
  D(i)=100.0d0
  end if
end do

!对系数矩阵赋值
do j=1,292
  B(j)=-1.0d0
end do   
do k=1,98
  B(3*k-2)=2.0d0
end do

                                                                        
call atrde(B,98,292,D,L)
if(L>=0)then
  write(*,10)(D(i),i=1,98)
end if
10 format(1X,D15.6)

stop
end

!追赶法程序
subroutine atrde(B,N,M,D,L)
real(kind=8)::B(M)
real(kind=8)::D(N)
L=1
if(M/=(3*N-2))then
  L=-1
  write(*,10)
  return
end if
10 format(1X,'ERR')
!消元过程
do K=1,N-1
  J=3*K-2
  if(ABS(B(J))+1.0==1.0)then
    L=0
    write(*,10)
    return
  end if
  B(J+1)=B(J+1)/B(J)
  D(K)=D(K)/B(J)
  B(J+3)=B(J+3)-B(J+2)*B(J+1)
  D(K+1)=D(K+1)-B(J+2)*D(K)
end do
!回代过程  
  if(ABS(B(3*N-2))+1.0==1.0)then
    L=0
    write(*,10)
    return
  end if
  D(N)=D(N)/B(3*N-2)
do K=N-1,1,-1
  D(K)=D(K)-B(3*K-2)*D(K+1)
end do
  return
end


为什么输出的结果还有负数呢
搜索更多相关主题的帖子: fortran 矩阵 
2010-12-06 19:59
快速回复:【求助】关于三对角矩阵的计算问题!!!fortran的
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.010613 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved