// Extend the Array class
Array.prototype.max = function () {
return Math.max.apply(null, this);
};
Array.prototype.min = function () {
return Math.min.apply(null, this);
};
Array.prototype.mean = function () {
var i, sum;
for (i = 0, sum = 0; i < this.length; i++)
sum += this[i];
return sum / this.length;
};
Array.prototype.rep = function (n) {
return Array.apply(null, new Array(n))
.map(Number.prototype.valueOf, this[0]);
};
Array.prototype.pip = function (x, y) {
var i, j, c = false;
for (i = 0, j = this.length - 1; i < this.length; j = i++) {
if (((this[i][1] > y) != (this[j][1] > y)) &&
(x < (this[j][0] - this[i][0]) * (y - this[i][1]) / (this[j][1] - this[i][1]) + this[i][0])) {
c = !c;
}
}
return c;
}
var kriging = function () {
var kriging = {};
// Matrix algebra
kriging_matrix_diag = function (c, n) {
var i, Z = [0].rep(n * n);
for (i = 0; i < n; i++) Z[i * n + i] = c;
return Z;
};
kriging_matrix_transpose = function (X, n, m) {
var i, j, Z = Array(m * n);
for (i = 0; i < n; i++)
for (j = 0; j < m; j++)
Z[j * n + i] = X[i * m + j];
return Z;
};
kriging_matrix_scale = function (X, c, n, m) {
var i, j;
for (i = 0; i < n; i++)
for (j = 0; j < m; j++)
X[i * m + j] *= c;
};
kriging_matrix_add = function (X, Y, n, m) {
var i, j, Z = Array(n * m);
for (i = 0; i < n; i++)
for (j = 0; j < m; j++)
Z[i * m + j] = X[i * m + j] + Y[i * m + j];
return Z;
};
// Naive matrix multiplication
kriging_matrix_multiply = function (X, Y, n, m, p) {
var i, j, k, Z = Array(n * p);
for (i = 0; i < n; i++) {
for (j = 0; j < p; j++) {
Z[i * p + j] = 0;
for (k = 0; k < m; k++)
Z[i * p + j] += X[i * m + k] * Y[k * p + j];
}
}
return Z;
};
// Cholesky decomposition
kriging_matrix_chol = function (X, n) {
var i, j, k, sum, p = Array(n);
for (i = 0; i < n; i++) p[i] = X[i * n + i];
for (i = 0; i < n; i++) {
for (j = 0; j < i; j++)
p[i] -= X[i * n + j] * X[i * n + j];
if (p[i] <= 0) return false;
p[i] = Math.sqrt(p[i]);
for (j = i + 1; j < n; j++) {
for (k = 0; k < i; k++)
X[j * n + i] -= X[j * n + k] * X[i * n + k];
X[j * n + i] /= p[i];
}
}
for (i = 0; i < n; i++) X[i * n + i] = p[i];
return true;
};
// Inversion of cholesky decomposition
kriging_matrix_chol2inv = function (X, n) {
var i, j, k, sum;
for (i = 0; i < n; i++) {
X[i * n + i] = 1 / X[i * n + i];
for (j = i + 1; j < n; j++) {
sum = 0;
for (k = i; k < j; k++)
sum -= X[j * n + k] * X[k * n + i];
X[j * n + i] = sum / X[j * n + j];
}
}
for (i = 0; i < n; i++)
for (j = i + 1; j < n; j++)
X[i * n + j] = 0;
for (i = 0; i < n; i++) {
X[i * n + i] *= X[i * n + i];
for (k = i + 1; k < n; k++)
X[i * n + i] += X[k * n + i] * X[k * n + i];
for (j = i + 1; j < n; j++)
arcgis api for js 克里金插值可自定义涂色方式 克里金插值源码kriging.js
最新推荐文章于 2024-04-25 10:13:06 发布