Cálculo numérico de las curvas de Rayleigh-Lamb

Las ecuaciones de Rayleigh-Lamb:

broncearse ( pag d ) broncearse ( q d ) = [ 4 k 2 pag q ( k 2 q 2 ) 2 ] ± 1

(dos ecuaciones, una con el exponente +1 y la otra con el exponente -1) donde

pag 2 = ω 2 C L 2 k 2
y
q 2 = ω 2 C T 2 k 2

aparecen en consideraciones físicas de las oscilaciones elásticas de placas sólidas. Aquí, d es el espesor de una placa elástica, C L la velocidad de las ondas longitudinales, y C T la velocidad de las ondas transversales. Estas ecuaciones determinan para cada valor positivo de ω un conjunto discreto de "valores propios" reales para k . Mi problema es el cálculo numérico de estos valores propios y, en particular, obtener curvas que muestren estos valores propios. ¿Qué tipo de método numérico puedo usar con este problema? Gracias.

Editar: Usando los valores numéricos d = 1 , C L = 1.98 , C T = 1 , las gráficas deberían verse así (las curvas negras corresponden al exponente -1, las curvas azules al exponente +1; el eje horizontal es ω y el eje vertical es k ):

Se supone que las curvas se ven así.

una vez que insertas ω tienes una ecuacion F ( k ) = 0 que quieres resolver k . Este es un problema de búsqueda de raíz no lineal 1d (como puede ver al leer algunos párrafos introductorios de cada sección en el libro recetas numéricas (aunque no usaría su código). Como es 1d, puede poner la raíz entre paréntesis búsquelo usando la secante u otro método.
¿Puedes resolver los valores propios analíticamente? y luego simplemente usar el software para trazar el gráfico? : )
@Timtam: Resolver los valores propios analíticamente es parte del problema
@Alice: el problema es que hay más de una raíz. El paréntesis a ciegas de las raíces puede pasar por alto algunas de ellas.
@becko. Sólo tres parámetros libres, d , ω / C T , ω / C L que especificará las raíces. Para la mayoría de las situaciones d probablemente le diga el espacio con las raíces cada k 2 d modificación 2 π . Una vez que pones entre paréntesis las raíces, puedes ejecutar un buscador de raíces. Si traza la función para varios regímenes de sus tres parámetros, puede comprobar que ha puesto entre paréntesis las raíces de forma adecuada.

Respuestas (1)

¿Qué tal si en lugar de encontrar las raíces y luego hacer las gráficas, pasa directamente a las gráficas usando un método de Monte Carlo?

Elija una k aleatoria, luego elija una ω aleatoria y calcule el lado izquierdo y el lado derecho de las ecuaciones RL. Si el RHS está lo suficientemente cerca del LHS (usted elige qué tan cerca), coloque un punto en el gráfico (azul o negro, según la rama que utilizó).

Cuantos más puntos procese y más estricta sea la condición de igualdad RHS=LHS que elija, más precisa será la apariencia del gráfico.

Un problema con este enfoque es que cuando colocas un punto en la gráfica, tu algoritmo no sabe a qué rama pertenece. Pero si es la trama que está buscando, no tendrá problemas para descifrarla a simple vista cuando se complete el cálculo.

Para leer numéricamente de ese diagrama de Monte Carlo, puede ordenar las soluciones que encuentre (ordenarlas en el espacio k o en el espacio ω) y hacer algún tipo de búsqueda usando interpolación.

Aquí hay un código C aproximado para explicar lo que quiero decir:

void main()
{
srand(1);
const int N=1000000000;
const float eps=0.01;
const float cl=...;
const float ct=...;
const float kmax=20.0;
const float omegamax=20.0;
float k, omega, p, q, lhs, rhs;
for (int i=0; i<N; i++)
 {
  k=(float)rand()/(float)RAND_MAX*k_max;
  omega=(float)rand()/(float)RAND_MAX*omega_max;
  lhs=tan(...)/tan()...;
  rhs=(4.0*k*k...);
  if (fabs(lhs-rhs) < eps*fabs(lhs+rhs))
    printf("%f %f\n", k, omega);
 }
}

y eso es.

+1 Esa es una buena idea que ciertamente vale la pena explorar. Te mantendré informado.
Me alegro de que esté en la línea de lo que querías. Para un problema ligero como este, el enfoque Monte Carlo de fuerza bruta puede dar sus frutos. El cálculo no será tan largo, especialmente si lo paralelizas, pero no necesitarás dedicar mucho tiempo y esfuerzo a la búsqueda de una solución más elegante.