Una onda obedece a la llamada ecuación de onda (valga la redundancia):
Supondré solo dos coordenadas espaciales y por comodidad tomaré como la unidad. Con estos cambios la ecuación queda:
Ahora toca escribir esta ecuación en nuestro programa. La función se escribirá u[x, y, t] y para las derivadas parciales usaremos D[f, x, y,...]. D[f, x] es la derivada parcial de respecto , D[f, x, y] es la derivada parcial de respecto y luego respecto ... Y así con todas las variables que pongamos. Por lo tanto nuestra ecuación es:
Las condiciones de contorno que usaré son:
Para solucionar la ecuación utilizaré NDSolve:
Aviso que tarda unos treinta segundos largos. Los valores mínimos y máximos de , y son totalmente arbitrarios. Se pueden poner los valores que queramos. Dicho esto voy a representar la onda. Para ello usaré Plot3D:
PlotRange sirve para indicar el rango de una coordenada. Lo que ha quedado ahora es una gráfica vacía. Para animarla hay que usar Manipulate con el que especificando una variable podemos hacer que varíe a nuestro gusto. Nosotros elegimos el tiempo:
Ahora nos queda lo siguiente:
Con la barra podemos ir variando el tiempo y veremos la gráfica animada. También podemos especificar un valor concreto apretando el + del final de la barra (el más pequeño). Por ejemplo para :
Con esto la animación ya estaría hecha pero yo prefiero añadirle un mapa de colores. Para ello hay que poner ColorFunction->"TemperatureMap" después de PlotRange. Normalmente se pone para destacar las variaciones de temperatura en una distribución de calor pero me gusta como queda en las ondas. Si no también se puede colorear con todas las opciones que hay en el anterior enlace. En el mismo instante que antes la gráfica queda:
http://angel.elte.hu/wave/
NDSolve[{ I D[u[x, t], t] - D[u[x, t], x, x] - 1 == 0}, u, {t, 1,
2}, {x, 1, 2}, {t, 1, 2}]
Claro faltan los factores pero creo que no cambia
¿No se puede obtener el resultado complejo entonces con el NDSolve?
2}, {x, 1, 2}, {t, 1, 2}]