【求帮助】拉格朗日插值法-补值

setwd("C:/Users/DELL1/Desktop")

library(XLConnect)
missing_data<-XLConnect::readWorksheetFromFile(file = "./data/missing_data.xls",sheet = 1,header=F)

lagrange<-function(x,xi,yi){
n<-length(xi)
lage<-0
for(i in 1:n){
li<-1
for(j in 1:n){
if(i!=j)
li<-li*(x-xi[j])/(xi[i]-xi[j])
}
lage<-li*yi[i]+lage
}
return(lage)
}

missdata = missing_data

for(k in 1:3)
{
x = which(is.na(missing_data[,k]))
x1=c(0,x)
x2=c(x,nrow(missing_data))
x12 = x2-x1-1
xx1<-x12[1:(length(x12)-1)] #缺失值前面的行数
xx2<-x12[2:(length(x12))] #缺失值后面的行数

j = 1
for(m in x)
{
    if(xx1[j]>=5)        #空值前的判断
        xi<- (m-5):(m-1)
    else
        xi<-(m-xx1[j]):(m-1)

    if(xx2[j]>=5)          #空值后的判断
        xi<-c(xi,(m+1):(m+5))
    else
        xi<-c(xi,(m+1):(m+xx2[j]))

    yi=missing_data[xi,k]
    missdata[m,k]=lagrange(m,xi,yi) 
    print(c(m,missdata[m,k]))
    j =j+1
}

}

数据见下(无法上传附件,抱歉)

21*3的表格
235.8333 324.0343 478.3231
236.2708 325.6379 515.4564
238.0521 328.0897 517.0909
235.9063   514.89
236.7604 268.8324  
  404.048 486.0912
237.4167 391.2652 516.233
238.6563 380.8241  
237.6042 388.023 435.3508
238.0313 206.4349 487.675
235.0729    
235.5313 400.0787 660.2347
  411.2069 621.2346
234.4688 395.2343 611.3408
235.5 344.8221 643.0863
235.6354 385.6432 642.3482
234.5521 401.6234  
236 409.6489 602.9347
235.2396 416.8795 589.3457
235.4896   556.3452
236.9688   538.347

补充的值不对!!!

麻烦指出一下,谢谢

[1] 6.0000 237.1512
[1] 13.000 235.315
[1] 4.0000 203.4621
[1] 11.0000 237.3481
[1] 20 NA
[1] 21 NaN
[1] 5.0000 503.7444
[1] 8.0000 472.0948
[1] 11.0000 634.3942
[1] 17.0000 615.7713

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问