【发布时间】:2015-11-24 21:16:13
【问题描述】:
我正在尝试编写一个 Fortran 程序来生成一个 Romberg 积分表。在 R.L.Burden 和 J.D.Faires 第 9 版的Numerical Analysis 一书中第 4.5 章中有一个算法。到目前为止,我已经写了这个
implicit none
integer,parameter::n=4
real::a,b,f,r(n,n),h,sum1
integer::i,k,j,m,l
open(1,file='out.txt')
a=0.
b=1.
h=b-a
r(1,1)=.5*h*(f(a)+f(b))
write(1,*)r(1,1)
do i=2,n
sum1=0.
do k=1,2**(i-2)
sum1=sum1+f(a+(k-.5)*h)
enddo
r(2,1)=.5*(r(1,1)+h*sum1)
do j=2,i
r(2,j)=r(2,j-1)+(r(2,j-1)-r(1,j-1))/(4**(j-1)-1)
write(1,*)((r(m,l),m=2,2),l=1,i)
enddo
h=h/2.
do j=1,i
r(1,j)=r(2,j)
enddo
enddo
end
real function f(x)
implicit none
real,intent(in)::x
f=1/(1+x**2)
end function
这个程序给出以下输出:
0.750000000
0.774999976 0.783333302
0.782794118 0.785392165 3.56011134E-22
0.782794118 0.785392165 0.785529435
0.784747124 0.785398126 0.785529435 7.30006976E+28
0.784747124 0.785398126 0.785398543 7.30006976E+28
0.784747124 0.785398126 0.785398543 0.785396457
但它应该给出这个:
0.7500000000
0.7750000000 0.7833333333
0.7827941176 0.7853921567 0.7855294120
0.7847471236 0.7853981253 0.7853985227 0.7853964451
0.7852354030 0.7853981627 0.7853981647 0.7853981590 0.7853981659
以上是由 Maple 编写的程序完成的。 Maple中的程序是
> romberg := proc(f::algebraic, a, b, N,print_table)
local R,h,k,row,col;
R := array(0..N,0..N);
# Compute column 0, Trapezoid Rule approximations of
# 1,2,4,8,..2^N subintervals
h := evalf(b - a);
R[0,0] := evalf(h/2 * (f(a)+f(b)));
for row from 1 to N do;
h := h/2;
R[row,0] := evalf(0.5*R[row-1,0] +
sum(h*f(a+(2*k-1)*h),k=1..2^(row-1)));
# Compute [row,1]:[row,row], via Richardson extrapolation
for col from 1 to row do;
R[row,col] := ((4^col)*R[row,col-1] - R[row-1,col-1]) /
(4^col - 1);
end do;
end do;
# Display results if requested
if (print_table) then
for row from 0 to N do;
for col from 0 to row do;
printf("%12.10f ",R[row,col]);
end do;
printf("\n");
end do;
end if;
return(R[N,N]);
end proc:
f:=x->1/(1+x^2);
val:=romberg(f,0,1,4,true)
那么现在如何使用 Fortran 程序来获得与 Maple 程序相同的结果?
【问题讨论】:
-
您好,请使用标签fortran 以获得更多关注。版本标签,如 fortran90,不应该在没有通用标签的情况下使用。
-
你是如何编译你的代码的?
标签: math fortran gfortran numerical-integration numerical-analysis