Public
Edited
Mar 10
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Plot.plot({
y: { nice: true },
marks: [
Plot.line(
data.filter((d) => d.n === 0),
{ x: "t", y: "f", opacity: 0.1 }
),
Plot.line(staticData, { x: "t", y: "mean" }),
Plot.line(staticData, { x: "t", y: "std", stroke: "red" })
]
})
Insert cell
staticData = {
const array = [];
let dd;

[...new Set(data.map((d) => d.t))].map((t) => {
dd = data.filter((d) => d.t === t);
array.push({
t,
mean: d3.mean(dd, (d) => d.f),
std: Math.sqrt(d3.variance(dd, (d) => d.f))
});
});

return array;
}
Insert cell
data = {
const data = [];

fnDataInitial.map((d) => data.push(d));

let gnt, d1, d2, d33, a, b, fnt;

for (let t = 5; t < 60; t += tStep) {
d1 = data
.filter((d) => (d.t < t) & (d.t > t - 0.3))
.map((d) => d.f * tStep);
d2 = data
.filter((d) => (d.t < t) & (d.t > t - 0.25))
.map((d) => d.f * tStep);
d33 = data
.filter((d) => (d.t < t - 0.5) & (d.t > t - 0.75))
.map((d) => d.f * tStep);
a = Math.log(1 + d3.sum(d1) / numPopulation / 0.3) / Math.log(2);
b = d3.sum(d2) / numPopulation - d3.sum(d33) / numPopulation;
for (let n = 0; n < numPopulation; ++n) {
gnt = funcGn(n, t);
fnt = gnt * a * 0.5 * (1 + tanh(paraM * (10 * b + paraN))) + 0.001 * gnt;
data.push({ t, n, f: fnt });
}
}

return data;
}
Insert cell
data
Type Table, then Shift-Enter. Ctrl-space for more options.

Insert cell
fnDataInitial = {
const fnt = [];
for (let t = 0; t < 5; t += tStep) {
for (let n = 0; n < numPopulation; ++n) {
fnt.push({ n, t, f: funcGn(n, t) });
}
}
return fnt;
}
Insert cell
fnDataInitial
Type Table, then Shift-Enter. Ctrl-space for more options.

Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
corrMat = {
let slice1,
slice2,
corr,
res = [];
for (let i = 0; i < numPopulation; ++i) {
for (let j = 0; j < numPopulation; ++j) {
slice1 = [...exampleData.filter((d) => d.n === i).map((d) => d.gn)];
slice2 = [...exampleData.filter((d) => d.n === j).map((d) => d.gn)];
corr = computeCorrelation(slice1, slice2);
res.push({ i, j, corr, n: slice1.length, m: slice2.length });
}
}
return res;
}
Insert cell
function computeCorrelation(a, b) {
let num = 0,
m1 = d3.mean(a),
m2 = d3.mean(b),
s1 = Math.sqrt(d3.variance(a)),
s2 = Math.sqrt(d3.variance(b)),
den = s1 * s2;
for (let i = 0; i < a.length; ++i) {
num += (a[i] - m1) * (b[i] - m2);
}
return num / den / (a.length - 1);
}
Insert cell
Insert cell
exampleData
Type Table, then Shift-Enter. Ctrl-space for more options.

Insert cell
Insert cell
funcGn = (i, t) => {
// Select the i-th seed
const s = seeds[i],
shapeFactor = 7;

let core = (t) => {
return 1 + tanh(shapeFactor * d3.sum(s, (x) => x.b * Math.sin(x.a * t)));
};

let w1 = (t) => {
let sum = 0;
for (let i = 0; i < 10; ++i) {
sum += core(t + i * 10);
}
return sum / 10;
};

let w2 = (t) => {
let sum = 0;
for (let i = 0; i < 4; ++i) {
sum += w1(t + i * 100);
}
return sum / 4;
};

return core(t);
}
Insert cell
seeds = generateSeeds()
Insert cell
function generateSeeds() {
button;
const seeds = [],
rnd = d3.randomUniform(valueK, valueK * 5);

for (let i = 0; i < numPopulation; ++i) {
seeds.push(
[...new Array(7)].map((d) => {
let r = rnd(),
r2 = rnd();
return {
a: Math.sqrt(Math.sqrt(r * r - 1)),
b: Math.sqrt(Math.sqrt(r2 * r2 - 1))
};
})
);
}
return seeds;
}
Insert cell
tanh = (t) => {
return (Math.exp(t) - Math.exp(-t)) / (Math.exp(t) + Math.exp(-t));
}
Insert cell
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