问题描述
我是后端功能的新手,我有这些功能,我需要使用 Tape 运行自动化测试,这个功能是计算三次样条曲线有人可以帮助我吗? 我尝试仅在 getTemperature 中运行测试但没有成功,我不太了解磁带,因此非常感谢任何帮助
export default class CubicSpline {
splines
constructor(points){
this.splines = this.calculateCurves(points)
}
public getTemperature(x){
let n = this.splines.length
let spline = null;
if (x <= this.splines[0].x0) {
spline = this.splines[0]
} else if (x >= this.splines[n - 1].x0) {
spline = this.splines[n - 1]
} else {
var i = 0
var j = n - 1
while (i + 1 < j) {
// let k = i + (j - i) / 2 // Todo this was original line from swift. discuss with Nate
let k = i + Math.floor((j - i) / 2)
if (x <= this.splines[k].x0) {
j = k
} else {
i = k
}
}
spline = this.splines[j]
}
return this.calculateTemperature(spline,x);
}
private calculateTemperature(spline,x){
return spline.coeficients.a + spline.coeficients.b * (x - spline.x0) + spline.coeficients.c / 2.0 * Math.pow(x - spline.x0,2) + spline.coeficients.d / 6.0 * Math.pow(x - spline.x0,3)
}
private calculateCurves(points){
let n = points.length
let x = points.map(point => point.x)
let y = points.map(point => point.y)
var splines = []
for(let i = 0; i<n; i++) {
let spline = {x0: x[i],coeficients: {a: y[i],b: 0,c: 0,d: 0}}
splines.push(spline)
}
splines[0].coeficients.c = 0
splines[n-1].coeficients.c = 0
// Resolve 3diagonal quation system with Thomas method
var alpha = new Array(n-1).fill(0)
var beta = new Array(n-1).fill(0)
for(let i = 1; i<n-1; i++) {
let hi = x[i] - x[i - 1]
let hi1 = x[i + 1] - x[i]
let A = hi
let C = 2.0 * (hi + hi1)
let B = hi1
let F = 6.0 * ((y[i + 1] - y[i]) / hi1 - (y[i] - y[i - 1]) / hi)
let z = (A * alpha[i - 1] + C)
alpha[i] = -B / z
beta[i] = (F - A * beta[i - 1]) / z
}
// Find solution:
for(let i = n-2; i>=0; i--) {
splines[i].coeficients.c = alpha[i] * splines[i + 1].coeficients.c + beta[i]
}
for(let i = n-1; i>=1; i--) {
let hi = x[i] - x[i - 1]
splines[i].coeficients.d = (splines[i].coeficients.c - splines[i - 1].coeficients.c) / hi
splines[i].coeficients.b = hi * (2.0 * splines[i].coeficients.c + splines[i - 1].coeficients.c) / 6.0 + (y[i] - y[i - 1]) / hi
}
return splines
}
}
我使用 Nodejs 和磁带在后端运行这个
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)