Легенда. Задача якобы задавалась на съезде академиков. И Сахаров решил ее за 5 минут на бумажной салфетке.
Условие. Есть резинка растягивающаяся до бесконечности и по всей длинне равномерно длинной 1 метр. Один конец прикреплен к стене и на нем сидит паучок, другой держит в руках человек. Человек начинает двигаться от стены со скоростью 1 м/с — ондновременно с ним начинает двигаться паучок по резинке паучок со скоростью 0.10 м/с.
Вопрос: догонит ли паучок человека, и если догонит, то за какое время?
Логически:
Человек движеться равномерно. Паучок с ускорением т.к. к его пройденному пути прибавляется растяжение нити и чем больше он прополз, тем больше это приращение. Отсуда следует что обязательно догонит. А вот как высчитать время?
Обозначения:
L — длина резинки
t — время после начала процесса
V — скорость паука
U — скорость человека
T — время, когда паук догонит человека
Представим, что длина резинки постояння и "равна" 1. То есть резинка является нашей системой координат, которая будет сужвться со временем. Тогда скорость паука непостоянна. Она равна V/(L+Ut). Тогда ответом будет решение уравнения: [интеграл от 0 до T](V*dt/(L+Ut)) = 1
Здравствуйте, SlaVVVa, Вы писали:
SVV>Человек движеться равномерно. Паучок с ускорением т.к. к его пройденному пути прибавляется растяжение нити и чем больше он прополз, тем больше это приращение. Отсуда следует что обязательно догонит. А вот как высчитать время?
Не обязательно. Это может происходить бесконечно. Все зависит от чисел в условии.
Здравствуйте, Спильный Андрей, Вы писали:
СА>Здравствуйте, Pro100Oleh, Вы писали:
PO>>Тогда ответом будет решение уравнения:
СА>~5.5часов
за это время паучек протопает 2 км.
а человек 20 км
резинка провиснет и паучек дальше пойдет по земле.
никогда не дойдет, потому что он собъется с пути.
Здравствуйте, Pro100Oleh, Вы писали:
SVV>>Человек движеться равномерно. Паучок с ускорением т.к. к его пройденному пути прибавляется растяжение нити и чем больше он прополз, тем больше это приращение. Отсуда следует что обязательно догонит. А вот как высчитать время? PO>Не обязательно. Это может происходить бесконечно. Все зависит от чисел в условии.
Объясните как может объект движущийся с ускорением не догнать движущийся равномерно. По моему от чисел в условии зависит только время, которое для этого потребуется.
Здравствуйте, SlaVVVa, Вы писали:
SVV>Объясните как может объект движущийся с ускорением не догнать движущийся равномерно.
Может, если двойной интеграл от ускорения (расстояние, пройденное ускоряющимся телом) на всей области определения меньше, чем интеграл от скорости (расстояние, пройденное равномерно движущимся телом). Ведь из условия не очевидно, что движение паучка равноускоренное.
Обязательно бахнем! И не раз. Весь мир в труху! Но потом. (ДМБ)
Здравствуйте, SlaVVVa, Вы писали:
SVV>Объясните как может объект движущийся с ускорением не догнать движущийся равномерно. По моему от чисел в условии зависит только время, которое для этого потребуется.
Все просто. Когда ускорение отрицательное и стремится к нулю слева при времени, стремящемся к бесконечности.
Общеизвестный пример: каждую секунду вы проходите половину оставшегося пути.
Здравствуйте, SlaVVVa, Вы писали:
SVV>Легенда. Задача якобы задавалась на съезде академиков. И Сахаров решил ее за 5 минут на бумажной салфетке.
SVV>Условие. Есть резинка растягивающаяся до бесконечности и по всей длинне равномерно длинной 1 метр. Один конец прикреплен к стене и на нем сидит паучок, другой держит в руках человек. Человек начинает двигаться от стены со скоростью 1 м/с — ондновременно с ним начинает двигаться паучок по резинке паучок со скоростью 0.10 м/с. SVV>Вопрос: догонит ли паучок человека, и если догонит, то за какое время?
SVV>Логически: SVV>Человек движеться равномерно. Паучок с ускорением т.к. к его пройденному пути прибавляется растяжение нити и чем больше он прополз, тем больше это приращение. Отсуда следует что обязательно догонит. А вот как высчитать время?
короче таракану тьфу пауку потребуется
6480 секунд чтобы заползти на руку тянущего резину
#include <iostream>
#include <math.h>
using namespace std;
double absolute( double x ) {
return (( x >= 0.0 ) ? x : x*(-1) );
}
double get_cof( double time ) {
if( time ==1 ) return 1;
double rettime = ( time + 1 ) / time;
return rettime;
}
double get_disnow( double time, double speed ) {
double disnow = get_cof( time ) * speed;
return disnow;
}
double get_distance( double time, double speed ) {
if( time ==1 ) return 20;
double distance = get_disnow( time, speed );
return distance;
}
using namespace std;
int main( int argc, char **argv ) {
double x = 0.0;
for( double t = 1.0; t < 10000 ;t+=1 )
{
x += get_distance( t, 10.0 );
x *= get_cof( t );
if( (absolute( x - (t * 100 ) ) < 5) || t == 6480 )
{
cout << " hallelua time = " << t << endl;
cout << " Moskitos = " << x << " cm; ";
cout << ", Man = " << t * 100 << " cm; " << endl;
}
}
return 0;
}
ошибся будет 12357 секунд ( перепутал местами вызов ф-ии )
вот так верно :
логика решения такая резинка у нас растягивается и соответственно
оказывает влияние на пройденное предыдущее растояние и на расстояние которое
в данный момент преодолевает паук, т/е
если в первую секунду
паук продвинулся на 10 см + 10 сантиметров дала резинка т/к она увеличилась ровно в два раза с 1 метра до 2
в следующую секунду на те 20 сантиметров которые паук преодолел резинка оказывает влияние уже меньшее
т/к резинка растягивается с 2 до 3 , за это же время паук преодолевает свои 10 см и на него оказывает влияние
тот же коэффициент, далее как выше то что мы прошли за предыдущую функцию умножаем на коэфф и прибавляем скорость паука
на тот же самый коэффициент растяжения резинки, в решении ниже может где ошибся но логика думаю понятна.
#include <iostream>
#include <math.h>
using namespace std;
double absolute( double x ) {
return (( x >= 0.0 ) ? x : x*(-1) );
}
double get_cof( double time ) {
if( time ==1 ) return 1;
double rettime = ( time + 1 ) / time;
return rettime;
}
double get_disnow( double time, double speed ) {
double disnow = get_cof( time ) * speed;
return disnow;
}
double get_distance( double time, double speed ) {
if( time ==1 ) return 20;
double distance = get_disnow( time, speed );
return distance;
}
using namespace std;
int main( int argc, char **argv ) {
double x = 20.0;
for( double t = 2.0; t < 20000 ;t+=1 )
{
x *= get_cof( t );
x += get_distance( t, 10.0 );
if( (absolute( x - (t * 100 ) ) < 10) )
{
cout << " hallelua time = " << t << endl;
cout << " Moskitos = " << x << " cm; ";
cout << ", Man = " << t * 100 << " cm; " << endl;
}
}
return 0;
}
Здравствуйте, codelord, Вы писали:
C>ошибся будет 12357 секунд ( перепутал местами вызов ф-ии ) C>вот так верно : C>логика решения такая резинка у нас растягивается и соответственно C>оказывает влияние на пройденное предыдущее растояние и на расстояние которое C>в данный момент преодолевает паук, т/е C>если в первую секунду C>паук продвинулся на 10 см + 10 сантиметров дала резинка т/к она увеличилась ровно в два раза с 1 метра до 2 C>в следующую секунду на те 20 сантиметров которые паук преодолел резинка оказывает влияние уже меньшее C>т/к резинка растягивается с 2 до 3 , за это же время паук преодолевает свои 10 см и на него оказывает влияние C>тот же коэффициент, далее как выше то что мы прошли за предыдущую функцию умножаем на коэфф и прибавляем скорость паука C>на тот же самый коэффициент растяжения резинки, в решении ниже может где ошибся но логика думаю понятна. C>
C>#include <iostream>
C>#include <math.h>
C>using namespace std;
C>double absolute( double x ) {
C> return (( x >= 0.0 ) ? x : x*(-1) );
C> }
C>double get_cof( double time ) {
C> if( time ==1 ) return 1;
C> double rettime = ( time + 1 ) / time;
C> return rettime;
C> }
C>double get_disnow( double time, double speed ) {
C> double disnow = get_cof( time ) * speed;
C> return disnow;
C> }
C>double get_distance( double time, double speed ) {
C> if( time ==1 ) return 20;
C> double distance = get_disnow( time, speed );
C> return distance;
C> }
C>using namespace std;
C>int main( int argc, char **argv ) {
C> double x = 20.0;
C> for( double t = 2.0; t < 20000 ;t+=1 )
C> {
C> x *= get_cof( t );
C> x += get_distance( t, 10.0 );
C> if( (absolute( x - (t * 100 ) ) < 10) )
C> {
C> cout << " hallelua time = " << t << endl;
C> cout << " Moskitos = " << x << " cm; ";
C> cout << ", Man = " << t * 100 << " cm; " << endl;
C> }
C> }
C> return 0;
C> }
C>
красиво, ничего не скажешь
if( time ==1 ) return 20; — это что?
Здравствуйте, SlaVVVa, Вы писали: SVV>Логически: SVV>Человек движеться равномерно. Паучок с ускорением т.к. к его пройденному пути прибавляется растяжение нити и чем больше он прополз, тем больше это приращение. Отсуда следует что обязательно догонит. А вот как высчитать время?
Да, вроде, за пять минут можно решить в лоб, если помнить дифуры.
v — скорость паучка, V — человека, L — длина веревки.
Для паучка:
x' = x/(Vt+L)*V + v или x'(Vt+L) — xV = v(Vt+L)
x(0) = 0
Это стандартный дифур, интегрирующий множитель 1/(Vt+L)
Получаем x(t) = (Vt+L)ln(Vt+L)v/V + C.
C = — L*ln(L)v/V.
Осталось подставить в условие встречи: VT+L = (VT+L)*ln(VT+L)v/V — L*ln(L)v/V
числа из условия: (T+1) = (T+1)ln(T+1)*0.1 или T = e^10-1
Потребуется где-то часов 6.
Здравствуйте, SlaVVVa, Вы писали:
SVV>Вопрос: догонит ли паучок человека, и если догонит, то за какое время?
Что-то мне кажется, что если решать "в лоб", то все сводится к дифференциальному уравнению.
Идея с фиксацией длины резинки и "замедлением" времени для паучка мне нравится, только еще не понял, как к ней подступиться.
Обязательно бахнем! И не раз. Весь мир в труху! Но потом. (ДМБ)