¿Alguien puede resolver el problema de ‘herrero y la curva’ que se describe a continuación?

Lo que necesita usar es simplemente la fórmula integral para la longitud de una curva:
Desde la página de Wikipedia sobre la longitud del arco:
Si una función se define como una función de x por
entonces es simplemente un caso especial de una ecuación paramétrica donde
y
, y la longitud del arco viene dada por:

Fórmulas imprecisas para la longitud de la curva sinusoidal de 0 a x :

Supongamos que la curva sinusoidal se define por

y = Amp * sin (B * x + P) de x = a a x = b

Por lo tanto, la longitud de la curva viene dada por

Integrando los límites aa b de ∫√ (1 + (A * cos (B * x + P)) ^ 2) dx

Veamos las incógnitas:

  1. A = (1.7 * 2 * π) / 6.9
  2. Como la curva comienza en el origen, P = 0.
  3. Sabemos que B * x debería ser π / 2 en el primer nodo (cuando x = 6.9 / 4 = 1.725)
    Entonces, B * 1.725 = π / 2; da B = 0.91
  4. Y finalmente, el rango va de a = 0 a b = 6.9

Entonces tenemos

∫√ (1 + 2.4 * cos ^ 2 (0.91 * x)) dx

Lo que se calcula a 10.02 .

Editar:
¿Por qué molestarse con todo este alboroto cuando puedes hacer que Wolfram Alpha haga la magia?

Enlace: longitud de arco de y = 1.7 * sin (0.91x) de x = 0 a 6.9

Oh, por supuesto.
Ya hay algunas soluciones aquí, pero me gustaría agregar otra, porque

  • no requiere ninguna función para tener una integral ordenada,
  • es muy simple y
  • Convenientemente tengo una computadora para ayudar con las matemáticas o lo que sea mencionado en los detalles de la pregunta.

Si tomamos una pequeña sección de la curva de (x, y1) a (x + h, y2), el arco tendrá casi la misma longitud que una línea recta cuando h es lo suficientemente pequeña, y hemos conocido la longitud de la recta líneas desde Pitágoras:


Cortar la curva en una suma de muchas líneas rectas pequeñas perderá un poco la longitud exacta de la curva, pero si reducimos a la mitad el tamaño del paso h y lo hacemos de nuevo, la estimación mejora:

Necesitará una h bastante pequeña para que esto sea bueno, por lo que será extremadamente tedioso hacer ejercicio a mano. Sin embargo, sumar una gran cantidad de números es lo que las computadoras están hechas para hacer, por lo que no tomará mucho tiempo escribir un programa que

  1. estima la longitud de la curva usando una h que es demasiado grande,
  2. estima la longitud de la curva usando la mitad de esa h,
  3. compara las dos longitudes, y
  4. intenta de nuevo desde 1 si la diferencia es mayor que algún umbral fijo que decidimos tolerar.

Puedes escribir esto en prácticamente cualquier lenguaje de programación que te guste, lo haré en C, como ejemplo:

#define _XOPEN_SOURCE
#include
#include
#include /* Stop when estimates differ by less than this */
#define THRESHOLD 1e-6 /* Approximate curve length in steps of h */
double estimate_curve ( double h )
{
/* Keep track of 2 y-vaules, and distance covered */
double y1 = 0.0, y2 = 0.0, length = 0.0;
/* Add up a bunch of linear approximations */
for ( double x=0.0; x<6.9; x+=h )
{
y2 = 1.7 * sin ( 2 * M_PI * x / 6.9 );
length += sqrt ( h*h + (y2-y1)*(y2-y1) );
y1 = y2;
}
return length;
} /* Let's do this: */
int main ( )
{
/* Get an initial estimate */
double h=0.125, estimate, previous=0.0;
estimate = estimate_curve(h);
/* Keep going until successive estimates are close */
while ( fabs(estimate-previous) > THRESHOLD )
{
/* If we're in here, the estimate wasn't good enough */
previous = estimate; /* Save it */
h = h / 2.0; /* Halve the step */
estimate = estimate_curve(h); /* Make a new one */
printf ( "Ca. %lf at %e step size\n", estimate, h );
}
}

#define _XOPEN_SOURCE
#include
#include
#include /* Stop when estimates differ by less than this */
#define THRESHOLD 1e-6 /* Approximate curve length in steps of h */
double estimate_curve ( double h )
{
/* Keep track of 2 y-vaules, and distance covered */
double y1 = 0.0, y2 = 0.0, length = 0.0;
/* Add up a bunch of linear approximations */
for ( double x=0.0; x<6.9; x+=h )
{
y2 = 1.7 * sin ( 2 * M_PI * x / 6.9 );
length += sqrt ( h*h + (y2-y1)*(y2-y1) );
y1 = y2;
}
return length;
} /* Let's do this: */
int main ( )
{
/* Get an initial estimate */
double h=0.125, estimate, previous=0.0;
estimate = estimate_curve(h);
/* Keep going until successive estimates are close */
while ( fabs(estimate-previous) > THRESHOLD )
{
/* If we're in here, the estimate wasn't good enough */
previous = estimate; /* Save it */
h = h / 2.0; /* Halve the step */
estimate = estimate_curve(h); /* Make a new one */
printf ( "Ca. %lf at %e step size\n", estimate, h );
}
}

#define _XOPEN_SOURCE
#include
#include
#include /* Stop when estimates differ by less than this */
#define THRESHOLD 1e-6 /* Approximate curve length in steps of h */
double estimate_curve ( double h )
{
/* Keep track of 2 y-vaules, and distance covered */
double y1 = 0.0, y2 = 0.0, length = 0.0;
/* Add up a bunch of linear approximations */
for ( double x=0.0; x<6.9; x+=h )
{
y2 = 1.7 * sin ( 2 * M_PI * x / 6.9 );
length += sqrt ( h*h + (y2-y1)*(y2-y1) );
y1 = y2;
}
return length;
} /* Let's do this: */
int main ( )
{
/* Get an initial estimate */
double h=0.125, estimate, previous=0.0;
estimate = estimate_curve(h);
/* Keep going until successive estimates are close */
while ( fabs(estimate-previous) > THRESHOLD )
{
/* If we're in here, the estimate wasn't good enough */
previous = estimate; /* Save it */
h = h / 2.0; /* Halve the step */
estimate = estimate_curve(h); /* Make a new one */
printf ( "Ca. %lf at %e step size\n", estimate, h );
}
}

#define _XOPEN_SOURCE
#include
#include
#include /* Stop when estimates differ by less than this */
#define THRESHOLD 1e-6 /* Approximate curve length in steps of h */
double estimate_curve ( double h )
{
/* Keep track of 2 y-vaules, and distance covered */
double y1 = 0.0, y2 = 0.0, length = 0.0;
/* Add up a bunch of linear approximations */
for ( double x=0.0; x<6.9; x+=h )
{
y2 = 1.7 * sin ( 2 * M_PI * x / 6.9 );
length += sqrt ( h*h + (y2-y1)*(y2-y1) );
y1 = y2;
}
return length;
} /* Let's do this: */
int main ( )
{
/* Get an initial estimate */
double h=0.125, estimate, previous=0.0;
estimate = estimate_curve(h);
/* Keep going until successive estimates are close */
while ( fabs(estimate-previous) > THRESHOLD )
{
/* If we're in here, the estimate wasn't good enough */
previous = estimate; /* Save it */
h = h / 2.0; /* Halve the step */
estimate = estimate_curve(h); /* Make a new one */
printf ( "Ca. %lf at %e step size\n", estimate, h );
}
}

Puede ajustar la h inicial y el umbral al gusto, según la precisión que desee ser y el tiempo que esté preparado para esperar el resultado. Soy impaciente, por lo que los valores que están allí se completan en menos de un segundo en mi antigua máquina de escritorio común y corriente:

% hacer curva
cc -std = c99 -O2 curva.c -lm -o curva
% tiempo ./curva
California. 10.040641 a 6.250000e-02 tamaño de paso
California. 10.009903 a 3.125000e-02 tamaño de paso
California. 10.023199 en 1.562500e-02 tamaño de paso
California. 10.029816 a 7.812500e-03 tamaño de paso
California. 10.025918 en 3.906250e-03 tamaño de paso
California. 10.023967 en 1.953125e-03 tamaño de paso
California. 10.024790 en 9.765625e-04 tamaño de paso
California. 10.025202 en 4.882812e-04 tamaño de paso
California. 10.024958 en 2.441406e-04 tamaño de paso
California. 10.024836 en 1.220703e-04 tamaño de paso
California. 10.024887 a 6.103516e-05 tamaño de paso
California. 10.024913 a 3.051758e-05 tamaño de paso
California. 10.024898 a 1.525879e-05 tamaño de paso
California. 10.024890 a 7.629395e-06 tamaño de paso
California. 10.024893 a 3.814697e-06 tamaño de paso
California. 10.024895 en 1.907349e-06 tamaño de paso
California. 10.024894 a 9.536743e-07 tamaño de paso
0.669u 0.000s 0: 00.71 92.9% 5 + 2802k 0 + 0io 0pf + 0w

Ahora, nos falta el valor exacto en una cantidad que es un poco difícil de determinar, pero a juzgar por las últimas 5 estimaciones, no hay ninguna razón para esperar más desviaciones en el quinto decimal en este punto. Por lo tanto, voy a redondear y responder que la longitud de la barra lineal es 10.0249m .
Más o menos.

Lo primero que debemos hacer es reconocer la categoría del problema. Este es un problema para encontrar la longitud de la curva. Nuestro primer paso debería ser encontrar una ecuación cartesiana / polar apropiada que describa la curva.
Así es como encontraré su ecuación cartesiana:
Aquí, lo que observo es que la onda de pecado se extiende sobre una distancia horizontal de 6.9 m. Ahora, puedo imaginar una curva de pecado extendida sobre una distancia angular de 2π. Entonces, básicamente, esto me da una idea justa de tratar el problema en formas paramétricas que involucran ángulo y distancia horizontal (o abscisa). Definir y (o distancia ordenada) como una función de amplificación mejorada de algún ángulo ϴ, y luego definir x (o la distancia de abscisa) como una función adecuada de este parámetro ϴ, y finalmente eliminar ϴ probablemente me llevará a una solución.
Entonces, con esta idea preliminar, comenzaré a escribir las ecuaciones para formular la idea anterior:
Ahora, la ecuación (4) satisface completamente nuestra necesidad. Esto puede verificarse de forma cruzada (como si representa la curva correctamente) con la ayuda de cualquier software matemático como MATLAB®. La siguiente sintaxis para MATLAB® me da la forma real de la curva que obtendré de la ecuación (4):
CURVA VISUALIZADA POR MATLAB®:
Ahora, lo que sigue es encontrar la longitud de la curva. Cómo encuentro la longitud de la curva es la siguiente:
Entonces, el herrero usará una barra de longitud de aproximadamente 10.025 m para hacer su trabajo.

1.Bueno, puedes resolver el siguiente problema mediante coordenadas polares.
2.la curva anterior es r = 1.7 sin (theta).
3.integra la siguiente curva de 0 a pi usando la fórmula raíz cuadrada (r cuadrado + (dr / d (theta)) cuadrado).
4. Duplique la respuesta que obtuvo de los pasos anteriores.
(obtendrá la misma respuesta si integra de pi a 2pi y la agrega al número que obtuvo de los pasos anteriores).
espero que esto ayude