如何使用R语言编写牛顿插值公式对缺失值进行插值

Python0132

如何使用R语言编写牛顿插值公式对缺失值进行插值,第1张

LagrangePolynomial <- function(x,y) {

  len = length(x)

  if(len != length(y))

    stop("length not equal!")

   

  if(len < 2)

    stop("dim size must more than 1")

   

  #pretreat data abd alloc memery

  xx <- paste("(","a -",x,")")

  m <- c(rep(0,len))

   

  #combin express

  for(i in 1:len) {

    td <- 1

    tm <- "1"

    for(j in 1:len) {

      if(i != j) {

        td <- td*(x[i] - x[j])

        tm <- paste(tm,"*",xx[j])

      }

    }

    tm <- paste(tm,"/",td)

    m[i]<-tm #m[i] <- parse(text=tm)

  }

   

  #combin the exrpession

  m <- paste(m,"*",y)

  r <- paste(m,collapse="+")

   

  #combin the function

  fbody <- paste("{ return(",r,")}")

  f <- function(a) {}

   

  #fill the function's body

  body(f) <- parse(text=fbody)

   

  return(f)

}

这是拉格朗日多项式插值算法  你参考下吧

举个例子。

2008年1月1日甲公司购入乙公司当日发行的面值600 000元、期限3年、票面利率8%、每年年末付息且到期还本的债券作为可供出售金融资产核算,实际支付的购买价款为620 000元。

则甲公司2008年12月31日因该可供出售金融资产应确认的投资收益是( )元。(已知PVA(7%,3)=2.2463,PVA(6%,3)=2.673,PV(7%,3)=0.8163,PV(6%,3)=0.8396)

题目未给出实际利率,需要先计算出实际利率。600 000×PV(r,3)+600 000×8%×PVA(r,3)=620 000,采用内插法计算,得出r=6.35%。甲公司2008年12月31日因该可供出售金融资产应确认的投资收益=620 000×6.35%=39 370(元)。

插值法计算过程如下:

已知PVA(7%,3)=2.2463,PVA(6%,3)=2.673,PV(7%,3)=0.8163,PV(6%,3)=0.8396)

600 000×PV(r,3)+600 000×8%×PVA(r,3)=620 000

R=6%时

600000*0.8396+600000*8%*2.673=503760+128304=632064

R=7%时

600000*0.8163+600000*8%*2.2463=489780+107823=597603

6% 632064

r 620000

7% 597603

(6%-7%)/(6%-R)=(632064-597603)/(632064-620000)

解得R=6.35%

注意上面的式子的数字顺序可以变的,但一定要对应。如可以为

(R-7%)/(7%-6%)=(620000-597603)/(597603-632064)也是可以的,当然还有其他的顺序。"

扩展资料:

函数f(x)在自变数x一些离散值所对应的函数值为已知,则可以作一个适当的特定函数p(x),使得p(x)在这些离散值所取的函数值,就是f(x)的已知值。从而可以用p(x)来估计f(x)在这些离散值之间的自变数所对应的函数值,这种方法称为插值法。

如果只需要求出某一个x所对应的函数值,可以用“图解内插”。它利用实验数据提供要画的简单曲线的形状,然后调整它,使得尽量靠近这些点。

如果还要求出因变数p(x)的表达式,这就要用“表格内插”。通常把近似函数p(x)取为多项式(p(x)称为插值多项式),最简单的是取p(x)为一次式,即线性插值法。

在表格内插时,使用差分法或待定系数法(此时可以利用拉格朗日公式)。在数学、天文学中,插值法都有广泛的应用。

参考资料:百度百科-插值法

1、利用geom_smooth进行曲线的拟合。

2、利用spline进行插值操作。R语言,一种自由软件编程语言与操作环境,主要用于统计分析、绘图、数据挖掘。R主要是以命令行操作,同时有人开发了几种图形用户界面。