回 帖 发 新 帖 刷新版面

主题:[讨论]程序输出都是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 ?

回复列表 (共2个回复)

沙发

我看不明白您所述的问题,能表述得更清楚些吗?
似乎有点像 Lagrange 插值;区间(-5,5)之间均匀分布三个点(x0,y0),(x1,y1), (x2,y2)
是什么意思,(-5,5)可是一维区间,如何有二维的点呢?

板凳

this is lagrange interpolation, xi is seted in the domain of (-5,5),i=0,1,2
yi=1/(1+x**2)
thank u

我来回复

您尚未登录,请登录后再回复。点此登录或注册