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主要是以命令行操作,同时有人开发了几种图形用户界面。