function rbf(Xdata, Ydata){
let AB = [];
for (var i in Xdata) {
var row = [];
for (var j in Xdata) {
row.push(dist(Xdata[i], Xdata[j]) ** 3);
}
row.push(1.0);
AB.push(row.concat(Xdata[i]));
}
var zeros = Xdata[0].slice(0).fill(0);
var ones = Xdata.slice(0).fill(1);
AB.push(ones.concat([0], zeros));
var Xdata_t = math.transpose(matrix(Xdata))._data;
for (i in Xdata_t) {
AB.push(Xdata_t[i].concat([0], zeros));
}
var f_alt = Ydata.slice(0);
var y_zeros = Ydata[0].slice(0).fill(0);
for (i in Xdata[0].concat([0])) {
f_alt.push(y_zeros);
}
var wv = math.multiply(math.inv(matrix(AB)), math.matrix(f_alt));
var w = wv._data.slice(0, -3);
var v = wv._data.slice(-3);
let interp = (x) => {
var total = 0;
for (i in w) {
total = math.add(total, math.multiply(w[i], dist(x, Xdata[i]) ** 3));
}
total = math.add(total, math.multiply(math.transpose(v), math.transpose([1].concat(x))));
return total;
};
return interp;
};