viewof dampingRatio = Inputs.range([0, 2], {
value: 1.2,
step: 0.1,
label: "Damping ratio (ζ)"
})
viewof naturalFreq = Inputs.range([0.1, 5], {
value: 3.4,
step: 0.1,
label: "Natural frequency (ωn)"
})
data = {
const t = Array.from({length: 1000}, (_, i) => i * 0.01);
return t.map(t => ({
t,
y: Math.exp(-dampingRatio * naturalFreq * t) *
Math.cos(naturalFreq * Math.sqrt(Math.max(0, 1 - dampingRatio**2)) * t)
}));
}
Plot.plot({
width: 800,
height: 500,
grid: true,
x: {
label: "Time (s)",
domain: [0, 10]
},
y: {
label: "Amplitude",
domain: [-1, 1]
},
marks: [
Plot.line(data, {
x: "t",
y: "y",
stroke: "blue"
})
]
})