注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

阿弥陀佛

街树飘影未见尘 潭月潜水了无声 般若观照心空静...

 
 
 

日志

 
 
关于我

一直从事气象预报、服务建模实践应用。 注重气象物理场、实况场、地理信息、本体知识库、分布式气象内容管理系统建立。 对Barnes客观分析, 小波,计算神经网络、信任传播、贝叶斯推理、专家系统、网络本体语言有一定体会。 一直使用Java、Delphi、Prolog、SQL编程。

网易考拉推荐

cubic spline  

2016-09-25 10:54:40|  分类: Scala |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
package stat
import org.apache.commons.math3.analysis.polynomials.{PolynomialFunction,PolynomialSplineFunction}
/**
* Created by 何险峰,北京 on 16-9-25.
* http://stackoverflow.com/questions/14330737/spline-interpolation-performance-in-scala-vs-java
*/
object CubicSpline {

def main(args: Array[String]): Unit = {
val x = Array(0f, 1f, 2f, 3f)
val y = Array(2f, 4f, 8f, 5f)
val psf = cubicSpline(x,y)
val a = 0
println(psf.value(a))
}

def cubicSpline(x: Array[Float], y: Array[Float]) : PolynomialSplineFunction= {
require(x.length == y.length,s"x.length=$x.length != y.length=$y.length error")
// Number of intervals. The number of data points is n + 1.
val n = x.length - 1
// Differences between knot points
val h = Array.tabulate(n)(i => x(i+1) - x(i))
val mu: Array[Float] = Array.ofDim[Float](n)
val z: Array[Float] = Array.ofDim[Float](n+1)

for ( i <- 1 until n) {
val g = 2.0f * (x(i+1) - x(i-1)) - h(i-1) * mu(i-1)
mu(i) = h(i) / g
z(i) = (3.0f * (y(i+1) * h(i-1) - y(i) * (x(i+1) - x(i-1))+ y(i-1) * h(i)) /
(h(i-1) * h(i)) - h(i-1) * z(i-1)) / g
}
// cubic spline coefficients -- b is linear, c quadratic, d is cubic (original y's are constants)
val b: Array[Float] = Array.ofDim[Float](n)
val c: Array[Float] = Array.ofDim[Float](n+1)
val d: Array[Float] = Array.ofDim[Float](n)

for (j <- n-1 to 0 by -1) {
c(j) = z(j) - mu(j) * c(j + 1)
b(j) = (y(j+1) - y(j)) / h(j) - h(j) * (c(j+1) + 2.0f * c(j)) / 3.0f
d(j) = (c(j+1) - c(j)) / (3.0f * h(j))
}
val pfs = Array.tabulate(n){i =>
val arr = Array[Double](y(i), b(i), c(i), d(i))
val pf = new PolynomialFunction(arr)
pf
}
val xd = x.map(_.toDouble)
val spf = new PolynomialSplineFunction(xd,pfs)
spf
}
}
  评论这张
 
阅读(32)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017