Recientemente he estado tratando de simular una ecuación de onda en p5.js.
Mi enfoque es trazar un montón de puntos con coordenadas (x, y) . He usado la ecuación de onda para obtener el movimiento de esas partículas.
Este es mi método de integración numérica:
var pos = this.masses[i].pos var nextPos = this.masses[i + 1].pos var lastPos = this.masses[i - 1].pos var vel = this.masses[i].vel, acc = this.masses[i].acc // for simplicity acc.x = 0 acc.y = c * c * ((nextPos.y - 2*pos.y + lastPos.y)) / d2x vel.x += acc.x * dt vel.y += acc.y * dt pos.x += vel.x * dt pos.y += vel.y * dtMi aceleración se define como la segunda derivada con respecto a x veces la velocidad de la onda al cuadrado, como se muestra aquí .
Así que convierto mi ecuación de esto:
(d²u/dt²) = c² (d²u/dx²) En una ecuación discreta como esta (donde u representa la posición de una partícula y c la velocidad de propagación de las ondas):
d2u = u(x + 2h, t) - 2*u(x + h, t) + u(x, t) d2t = 1e-5 // small step acc = c * c * (d2u / d2t) Pero mi resultado es bastante extraño: 
Como puede ver, la ola crece, cuando el resultado esperado fue algo como esto:
¿Qué estoy haciendo mal? ¿Alguien podría ayudarme? Gracias :)