Public
Edited
Mar 2, 2023
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
matrix = math.matrix
Insert cell

function dist(x, y) {
var x_mat = matrix(x);
var y_mat = matrix(y);
var diff = math.subtract(y_mat, x_mat);
return Math.sqrt(math.multiply(diff, math.transpose(diff)));
}
Insert cell

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]));
}
// `.slice(0)` is used to make a copy of the arrays below
// ... otherwise, fill will mutate the object calling
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;
};
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Plotly = require("https://cdn.plot.ly/plotly-latest.min.js")
Insert cell

Purpose-built for displays of data

Observable is your go-to platform for exploring data and creating expressive data visualizations. Use reactive JavaScript notebooks for prototyping and a collaborative canvas for visual data exploration and dashboard creation.
Learn more