主题:[讨论]程序输出都是1.0000000000?—撒高分求助
函数y=f(x)=1/(1+x**2)在区间(-5,5)之间均匀分布三个点(x0,y0),(x1,y1), (x2,y2),请编程求解pi_fx在区间(-5,5)内的分布曲线,pi_fx=pi(x)*f(x),pi(x)=y0*L0(x)+y1*L1(x)+y2*L2(x)
Li(x)=(j从0到2连乘){(x-xj)/(xi-xj)},j/=i,i=0,1,2
以下是所编写的程序:
Function fun_f(temp)
IMPLICIT NONE
REAL, INTENT(IN) :: temp
REAL :: fun_f
fun_f=(1.0/(1.0+temp**2))
RETURN
END Function fun_f
Function funk(va1,va2)
IMPLICIT NONE
REAL, INTENT(IN) :: va1,va2
REAL :: funk
funk=(va1*va2)
RETURN
END Function funk
PROGRAM interpolation_errors
IMPLICIT NONE
REAL :: q,k2=0.0,k6=0.0,k8=0.0,P2=0.0,P6=0.0,P8=0.0
INTEGER :: i,j,k,l,m,n
REAL :: A(0:2,0:2),B(0:6,0:2),C(0:8,0:2)
REAL, external :: fun_f,funk
IF(i==2) THEN
q=(10.0/2.0)
A(0:2,0:2)=1.0
A(0,0)=-5.0
A(0,1)=fun_f(A(0,0))
DO j=1,2
A(j,0)=(A(j-1,0)+q)
A(j,1)=fun_f(A(j,0))
ENDDO
DO k=0,2
DO n=0,2
IF(k/=n) THEN
A(k,2)=(A(k,2)*(A(L,0)-A(n,0))/(A(k,0)-A(n,0)))
ENDIF
ENDDO
ENDDO
DO m=0,2
k2=(k2+funk(A(m,1),A(m,2))) !compute the value of pi(x)
ENDDO
P2=(k2/(1.0+A(L,0)**2)) !compute the value of pi(x)*f(x)
OPEN(10,file='test0.dat')
DO l=0,2
WRITE(10,*)A(l,0),P2
ENDDO
CLOSE(10)
ENDIF
ENDDO
END PROGRAM interpolation_errors
以下是dat文件所输出的值:
-5.0000000 1.0000000
0.0000000 1.0000000
5.0000000 1.0000000
问题/为什么所有值都是1.0000000 ?
Li(x)=(j从0到2连乘){(x-xj)/(xi-xj)},j/=i,i=0,1,2
以下是所编写的程序:
Function fun_f(temp)
IMPLICIT NONE
REAL, INTENT(IN) :: temp
REAL :: fun_f
fun_f=(1.0/(1.0+temp**2))
RETURN
END Function fun_f
Function funk(va1,va2)
IMPLICIT NONE
REAL, INTENT(IN) :: va1,va2
REAL :: funk
funk=(va1*va2)
RETURN
END Function funk
PROGRAM interpolation_errors
IMPLICIT NONE
REAL :: q,k2=0.0,k6=0.0,k8=0.0,P2=0.0,P6=0.0,P8=0.0
INTEGER :: i,j,k,l,m,n
REAL :: A(0:2,0:2),B(0:6,0:2),C(0:8,0:2)
REAL, external :: fun_f,funk
IF(i==2) THEN
q=(10.0/2.0)
A(0:2,0:2)=1.0
A(0,0)=-5.0
A(0,1)=fun_f(A(0,0))
DO j=1,2
A(j,0)=(A(j-1,0)+q)
A(j,1)=fun_f(A(j,0))
ENDDO
DO k=0,2
DO n=0,2
IF(k/=n) THEN
A(k,2)=(A(k,2)*(A(L,0)-A(n,0))/(A(k,0)-A(n,0)))
ENDIF
ENDDO
ENDDO
DO m=0,2
k2=(k2+funk(A(m,1),A(m,2))) !compute the value of pi(x)
ENDDO
P2=(k2/(1.0+A(L,0)**2)) !compute the value of pi(x)*f(x)
OPEN(10,file='test0.dat')
DO l=0,2
WRITE(10,*)A(l,0),P2
ENDDO
CLOSE(10)
ENDIF
ENDDO
END PROGRAM interpolation_errors
以下是dat文件所输出的值:
-5.0000000 1.0000000
0.0000000 1.0000000
5.0000000 1.0000000
问题/为什么所有值都是1.0000000 ?