主题:调用IMSL里面的二维插值子程序时出错
各位大侠神仙好,我想用IMSL库里面的二维插值程序BS2IN对 已知的离散点F(x,y)进行插值,但是总出问题,我也不知道改哪里,请大家帮忙看看好吗?给出的错误是:
error 4 from BSNAK,points in the data point abscissas array,xdata,must be distinct,but xdata(2)=xdata(3)=1.020000....下面是我的程序
!对离散点(密度)进行插值
program main
USE IMSL
!定义插值的变量
INTEGER KXORD,KYORD,LDF,NXDATA,NXKNOT,NXVEC,NYDATA,NKYNOT,NYVEC
PARAMETER (KXORD=3,KYORD=2,NXDATA=80,NXVEC=2,NYDATA=3,NYVEC=2,
& LDF=NXDATA,NXKNOT=NXDATA+KXORD,NYKNOT=NYDATA+KYORD)
INTEGER I,J,NOUT,NXCOEF,NYCOEF
REAL BSCOEF(NXDATA,NYDATA),FDATA(LDF,NYDATA),FLOAT,
& VALUE(NXVEC,NYVEC),XDATA(NXDATA),XKNOT(NXKNOT),XVEC(NXVEC),
&YDATA(NYDATA),YKNOT(NYKNOT),YVEC(NYVEC)
INTRINSIC FLOAT
COMMON /PI/PI
COMMON /Q/Q
THE2=PI/3
OPEN(UNIT=1,FILE='DD.TXT',STATUS='OLD')
DO I=1, NYDATA
DO J=1,NXDATA
READ(1,*) XDATA(J),YDATA(I),FDATA(J,I) !think again
END DO
END DO
CALL BSNAK(NXDATA,XDATA,KXORD,XKNOT)
CALL BSNAK(NYDATA,YDATA,KYORD,YKNOT)
CALL BS2IN(NXDATA,XDATA,NYDATA,YDATA,FDATA,LDF,KXORD,KYORD,XKNOT,
& YKNOT,BSCOEF)
NXCOEF=NXDATA
NYCOEF=NYDATA
DO I=1,NXVEC
XVEC(I)=FLOAT(I)*1.5
END DO
DO I=1,NYVEC
YVEC(I)=FLOAT(I)*0.314
END DO
CALL BS2GD(0,0,NXVEC,XVEC,NYVEC,YVEC,KXORD,KYORD,XKNOT,YKNOT,
& NXCOEF,NYCOEF,BSCOEF,VALUE,NXVEC)
DO 80 I=NXVEC
DO 70 J=1,NYVEC
WRITE(*,*)XVEC(I),YVEC(J),VALUE(I,J)
70 CONTINUE
80 CONTINUE
END
另外, 请大家运行我的程序前下载:我上传的压缩包里有 DD.DAT
error 4 from BSNAK,points in the data point abscissas array,xdata,must be distinct,but xdata(2)=xdata(3)=1.020000....下面是我的程序
!对离散点(密度)进行插值
program main
USE IMSL
!定义插值的变量
INTEGER KXORD,KYORD,LDF,NXDATA,NXKNOT,NXVEC,NYDATA,NKYNOT,NYVEC
PARAMETER (KXORD=3,KYORD=2,NXDATA=80,NXVEC=2,NYDATA=3,NYVEC=2,
& LDF=NXDATA,NXKNOT=NXDATA+KXORD,NYKNOT=NYDATA+KYORD)
INTEGER I,J,NOUT,NXCOEF,NYCOEF
REAL BSCOEF(NXDATA,NYDATA),FDATA(LDF,NYDATA),FLOAT,
& VALUE(NXVEC,NYVEC),XDATA(NXDATA),XKNOT(NXKNOT),XVEC(NXVEC),
&YDATA(NYDATA),YKNOT(NYKNOT),YVEC(NYVEC)
INTRINSIC FLOAT
COMMON /PI/PI
COMMON /Q/Q
THE2=PI/3
OPEN(UNIT=1,FILE='DD.TXT',STATUS='OLD')
DO I=1, NYDATA
DO J=1,NXDATA
READ(1,*) XDATA(J),YDATA(I),FDATA(J,I) !think again
END DO
END DO
CALL BSNAK(NXDATA,XDATA,KXORD,XKNOT)
CALL BSNAK(NYDATA,YDATA,KYORD,YKNOT)
CALL BS2IN(NXDATA,XDATA,NYDATA,YDATA,FDATA,LDF,KXORD,KYORD,XKNOT,
& YKNOT,BSCOEF)
NXCOEF=NXDATA
NYCOEF=NYDATA
DO I=1,NXVEC
XVEC(I)=FLOAT(I)*1.5
END DO
DO I=1,NYVEC
YVEC(I)=FLOAT(I)*0.314
END DO
CALL BS2GD(0,0,NXVEC,XVEC,NYVEC,YVEC,KXORD,KYORD,XKNOT,YKNOT,
& NXCOEF,NYCOEF,BSCOEF,VALUE,NXVEC)
DO 80 I=NXVEC
DO 70 J=1,NYVEC
WRITE(*,*)XVEC(I),YVEC(J),VALUE(I,J)
70 CONTINUE
80 CONTINUE
END
另外, 请大家运行我的程序前下载:我上传的压缩包里有 DD.DAT