24小时热门版块排行榜    

查看: 781  |  回复: 3
当前只显示满足指定条件的回帖,点击这里查看本话题的所有回帖

caoweiyue

新虫 (小有名气)

[求助] 刚开始学Fortran 帮忙看一下这个程序 为什么算不出结果

下面的程序算的是全选主元的高斯消去法, 我是照徐士良的算法集编的,但是结果都是0
program main
implicit none
integer::i,L
integer,parameter::n=4
real::A(n,n),b(n),x(n)
data A / 0.2368,0.1968,0.1582,1.1161,0.2471,0.2071,1.1675,0.1254,&
         &0.2568,1.2168,0.1768,0.1397,1.2671,0.2271,0.1871,0.1490 /
data b / 1.8471,1.7471,1.6471,1.5471 /
call agaus(A,b,n,L)
if(L==0) then
  write(*,*) "fail"
else
  do i=1,n
    write(*,"('x',i1,'=',f6.4)" i,x(i)
  end do
end if
stop
end program

subroutine agaus(A,b,n,L)
implicit none
integer:: i,j,k,n,is,js,L
real:: D, T
real:: A(n,n),b(n),x(n)

L=1
do k=1,n-1
  D=0.0
!选出了最大的,并保存其位置
   do i=k,n
     do j=k,n
           if( abs(A(i,j))>D ) then
           D=A(i,j)
                   is=i
                    js=j
           end if  
     end do
   end do
  if(D+1.0==1.0) then
    L=0
    return
  end if
!列交换
  if(js/=k) then
    do i=1,n
          T=A(i,k)
          A(i,k)=A(i,js)
      A(i,js)=T
    end do
  end if
!行交换
  if(is/=k) then
    do j=k,n
          T=A(k,j)
          A(k,j)=A(is,j)
          A(is,j)=A(k,j)
        end do
        T=b(k)
        b(k)=b(is)
        b(is)=b(k)
  end if
!化成三角矩阵
  do i=k+1,n
    do j=k,n
          A(i,j)=A(i,j)-A(i,k)/A(k,k)*A(k,j)
        end do
        b(i)=b(i)-A(i,k)/A(k,k)*b(k)
  end do
end do
if(A(n,n)+1.0==1.0) then
  L=0
  return
end if
!回代
x(n)=b(n)/A(n,n)
  do i=n-1,1,-1
    T=0.0
          do j=i+1,n
            T=T+A(i,j)*x(j)
          end do
        x(i)=(b(i)-T)/A(i,i)
  end do
  return
end subroutine agaus
回复此楼

» 猜你喜欢

» 本主题相关价值贴推荐,对您同样有帮助:

已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

daizhijuan

新虫 (初入文坛)

【答案】应助回帖

write(*,"('x',i1,'=',f6.4)" i,x(i)
少了右边的括号
real:: A(n,n),b(n),x(n)
子程序中的这句之前最好也给n一个值:比如 parameter(n=4)
4楼2012-12-13 16:52:02
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
查看全部 4 个回答

Jasonluo

至尊木虫 (知名作家)

中央书籍处书记

【答案】应助回帖

感谢参与,应助指数 +1
楼主中间那个害羞的表情是啥意思啊?呵呵
朝为田舍郎,暮登天子堂。将相本无种,学子当自强!
2楼2012-05-16 20:59:37
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

jwwang_lq

铁虫 (初入文坛)

【答案】应助回帖

感谢参与,应助指数 +1
write语句里应该输出b(i),而不是x(i)
老实人
3楼2012-05-17 08:51:20
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
信息提示
请填处理意见