回 帖 发 新 帖 刷新版面

主题:调用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

回复列表 (共6个回复)

沙发

您还不如查词霸来得快呢:
error 4 from BSNAK,points in the data point abscissas array,xdata,must be distinct,but xdata(2)=xdata(3)=1.020000....
这提示告诉你:xdata数组里的值必须不一样,而你给的数组中xdata(2)和xdata(3)却都是1.02

板凳


我知道错误的意思,但是我的给出的数组里不是xdata(2)=xdata(3),我不知道程序怎么误读了。我更换了给出的数组数据,错误仍然类似。哎。。。。怎么办呢

3 楼

怎么没人理我呢

4 楼

IMSL是收费的, 一般破解不容易, 不是人人都用的.

5 楼

在调用前将你数组里的数据打印出来看看呢?

6 楼

我解决了,应该将下面的一行:
I=NXVEC
改为:I=1,NXVEC
多谢各位。

我来回复

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