Человек и паучок.
От: SlaVVVa Россия  
Дата: 08.08.07 08:08
Оценка: 4 (2)
Легенда. Задача якобы задавалась на съезде академиков. И Сахаров решил ее за 5 минут на бумажной салфетке.

Условие. Есть резинка растягивающаяся до бесконечности и по всей длинне равномерно длинной 1 метр. Один конец прикреплен к стене и на нем сидит паучок, другой держит в руках человек. Человек начинает двигаться от стены со скоростью 1 м/с — ондновременно с ним начинает двигаться паучок по резинке паучок со скоростью 0.10 м/с.
Вопрос: догонит ли паучок человека, и если догонит, то за какое время?

Логически:
Человек движеться равномерно. Паучок с ускорением т.к. к его пройденному пути прибавляется растяжение нити и чем больше он прополз, тем больше это приращение. Отсуда следует что обязательно догонит. А вот как высчитать время?
Поймете смысл — найдутся слова.
Катон.
Re: Человек и паучок.
От: Pro100Oleh Украина  
Дата: 08.08.07 08:56
Оценка:
Обозначения:
L — длина резинки
t — время после начала процесса
V — скорость паука
U — скорость человека
T — время, когда паук догонит человека

Представим, что длина резинки постояння и "равна" 1. То есть резинка является нашей системой координат, которая будет сужвться со временем. Тогда скорость паука непостоянна. Она равна V/(L+Ut). Тогда ответом будет решение уравнения: [интеграл от 0 до T](V*dt/(L+Ut)) = 1
Pro
Re: Человек и паучок.
От: Pro100Oleh Украина  
Дата: 08.08.07 08:59
Оценка: +1
Здравствуйте, SlaVVVa, Вы писали:

SVV>Человек движеться равномерно. Паучок с ускорением т.к. к его пройденному пути прибавляется растяжение нити и чем больше он прополз, тем больше это приращение. Отсуда следует что обязательно догонит. А вот как высчитать время?


Не обязательно. Это может происходить бесконечно. Все зависит от чисел в условии.
Pro
Re: Человек и паучок.
От: Спильный Андрей Украина  
Дата: 08.08.07 09:16
Оценка:
Здравствуйте, SlaVVVa, Вы писали:

SVV>Легенда.

скорее баян
Re[2]: Человек и паучок.
От: Спильный Андрей Украина  
Дата: 08.08.07 09:21
Оценка:
Здравствуйте, Pro100Oleh, Вы писали:

PO>Тогда ответом будет решение уравнения:


~5.5часов
Re[2]: Человек и паучок.
От: YVR  
Дата: 08.08.07 09:44
Оценка:
Здравствуйте, Pro100Oleh, Вы писали:

PO>Тогда скорость паука непостоянна. Она равна V/(L+Ut).


Выражение не имеет размерности скорости.
Re[3]: Человек и паучок.
От: Seon  
Дата: 08.08.07 10:05
Оценка:
Здравствуйте, Спильный Андрей, Вы писали:

СА>Здравствуйте, Pro100Oleh, Вы писали:


PO>>Тогда ответом будет решение уравнения:


СА>~5.5часов


за это время паучек протопает 2 км.
а человек 20 км
резинка провиснет и паучек дальше пойдет по земле.
никогда не дойдет, потому что он собъется с пути.
Re[3]: Человек и паучок.
От: Спильный Андрей Украина  
Дата: 08.08.07 10:18
Оценка:
Здравствуйте, YVR, Вы писали:

PO>>Тогда скорость паука непостоянна. Она равна V/(L+Ut).


YVR>Выражение не имеет размерности скорости.


а так всегда и происходит, если нагуглив чужое решение, и не поняв его, пытаются выдать за свое
Re[2]: Человек и паучок.
От: SlaVVVa Россия  
Дата: 08.08.07 10:20
Оценка:
Здравствуйте, Pro100Oleh, Вы писали:

SVV>>Человек движеться равномерно. Паучок с ускорением т.к. к его пройденному пути прибавляется растяжение нити и чем больше он прополз, тем больше это приращение. Отсуда следует что обязательно догонит. А вот как высчитать время?

PO>Не обязательно. Это может происходить бесконечно. Все зависит от чисел в условии.

Объясните как может объект движущийся с ускорением не догнать движущийся равномерно. По моему от чисел в условии зависит только время, которое для этого потребуется.
Поймете смысл — найдутся слова.
Катон.
Re[3]: Человек и паучок.
От: Pro100Oleh Украина  
Дата: 08.08.07 11:11
Оценка: -1
Здравствуйте, YVR, Вы писали:

YVR>Выражение не имеет размерности скорости.


Все правильно. У меня растояние не имеет размерности (равно 1). Можно обе части уравнения домножить на L и будет вам счастье в размерностях.
Pro
Re[3]: Человек и паучок.
От: ДимДимыч Украина http://klug.org.ua
Дата: 08.08.07 11:12
Оценка:
Здравствуйте, SlaVVVa, Вы писали:

SVV>Объясните как может объект движущийся с ускорением не догнать движущийся равномерно.


Может, если двойной интеграл от ускорения (расстояние, пройденное ускоряющимся телом) на всей области определения меньше, чем интеграл от скорости (расстояние, пройденное равномерно движущимся телом). Ведь из условия не очевидно, что движение паучка равноускоренное.
Обязательно бахнем! И не раз. Весь мир в труху! Но потом. (ДМБ)
Re[3]: Человек и паучок.
От: Pro100Oleh Украина  
Дата: 08.08.07 11:16
Оценка: +1
Здравствуйте, SlaVVVa, Вы писали:

SVV>Объясните как может объект движущийся с ускорением не догнать движущийся равномерно. По моему от чисел в условии зависит только время, которое для этого потребуется.


Все просто. Когда ускорение отрицательное и стремится к нулю слева при времени, стремящемся к бесконечности.
Общеизвестный пример: каждую секунду вы проходите половину оставшегося пути.
Pro
Re[4]: Человек и паучок.
От: Pro100Oleh Украина  
Дата: 08.08.07 11:18
Оценка:
Здравствуйте, Seon, Вы писали:

S>за это время паучек протопает 2 км.

S>а человек 20 км

Прикол в том, что пауку не нужно ходить столько же, сколько и человеку.
Pro
Re[4]: Человек и паучок.
От: Pro100Oleh Украина  
Дата: 08.08.07 11:19
Оценка:
Здравствуйте, Спильный Андрей, Вы писали:

СА>а так всегда и происходит, если нагуглив чужое решение, и не поняв его, пытаются выдать за свое


не смешно
Pro
Re: Человек и паучок.
От: codelord  
Дата: 08.08.07 11:59
Оценка:
Здравствуйте, 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;
    }

Re[2]: Человек и паучок.
От: codelord  
Дата: 08.08.07 12:23
Оценка:
ошибся будет 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;
    }
Re[3]: Человек и паучок.
От: Seon  
Дата: 08.08.07 12:47
Оценка: -1
Здравствуйте, 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; — это что?
Re: Человек и паучок.
От: andyJB  
Дата: 08.08.07 12:49
Оценка: 5 (2) +1 -1
Здравствуйте, 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.
Re[4]: Человек и паучок.
От: codelord  
Дата: 08.08.07 12:52
Оценка:
Здравствуйте, Seon, Вы писали:
S>красиво, ничего не скажешь
S>if( time ==1 ) return 20; — это что?

это растояние паук преодолел за первую секунду,
может и не красиво но я собственно к этому и не стремился
Re: Человек и паучок.
От: ДимДимыч Украина http://klug.org.ua
Дата: 08.08.07 12:52
Оценка:
Здравствуйте, SlaVVVa, Вы писали:

SVV>Вопрос: догонит ли паучок человека, и если догонит, то за какое время?


Что-то мне кажется, что если решать "в лоб", то все сводится к дифференциальному уравнению.
Идея с фиксацией длины резинки и "замедлением" времени для паучка мне нравится, только еще не понял, как к ней подступиться.
Обязательно бахнем! И не раз. Весь мир в труху! Но потом. (ДМБ)
Re: Человек и паучок.
От: vadimcher  
Дата: 08.08.07 12:57
Оценка: 6 (3) +1
Здравствуйте, SlaVVVa, Вы писали:

SVV>Легенда. Задача якобы задавалась на съезде академиков. И Сахаров решил ее за 5 минут на бумажной салфетке.


SVV>Условие. Есть резинка растягивающаяся до бесконечности и по всей длинне равномерно длинной 1 метр. Один конец прикреплен к стене и на нем сидит паучок, другой держит в руках человек. Человек начинает двигаться от стены со скоростью 1 м/с — ондновременно с ним начинает двигаться паучок по резинке паучок со скоростью 0.10 м/с.

SVV>Вопрос: догонит ли паучок человека, и если догонит, то за какое время?

SVV>Логически:

SVV>Человек движеться равномерно. Паучок с ускорением т.к. к его пройденному пути прибавляется растяжение нити и чем больше он прополз, тем больше это приращение. Отсуда следует что обязательно догонит. А вот как высчитать время?

Через время t резинка станет длиной 1+t. Паучок ползет с постоянной скоростью 0.1 м/с относительной резинки.
Давайте резинку не растягивать, а скажем, что просто паучок ползет со скоростью .1/(1+t) относительно значальной резинки. Действительно, проползти s относительно растянутой резинки длиной 1+t то же самое, что проползти s/(1+t) относительно изначальной нерастянутой резинки длины 1.
Тогда в момент t скорость .1/(1+t), надо проползти 1. 1 = int[0,t](.1/(1+s))ds=.1*ln(1+t), т.е. догонит за exp(10)-1 секунд = 22025.465794806716516957900645284 секунд = 6 часов 7 минут 5.5 секунд.

А вот зайца кому, зайца-выбегайца?!
Re[2]: Человек и паучок.
От: codelord  
Дата: 08.08.07 13:13
Оценка:
Здравствуйте, vadimcher, Вы писали:

V>Здравствуйте, SlaVVVa, Вы писали:


SVV>>Легенда. Задача якобы задавалась на съезде академиков. И Сахаров решил ее за 5 минут на бумажной салфетке.


SVV>>Условие. Есть резинка растягивающаяся до бесконечности и по всей длинне равномерно длинной 1 метр. Один конец прикреплен к стене и на нем сидит паучок, другой держит в руках человек. Человек начинает двигаться от стены со скоростью 1 м/с — ондновременно с ним начинает двигаться паучок по резинке паучок со скоростью 0.10 м/с.

SVV>>Вопрос: догонит ли паучок человека, и если догонит, то за какое время?

SVV>>Логически:

SVV>>Человек движеться равномерно. Паучок с ускорением т.к. к его пройденному пути прибавляется растяжение нити и чем больше он прополз, тем больше это приращение. Отсуда следует что обязательно догонит. А вот как высчитать время?

V>Через время t резинка станет длиной 1+t. Паучок ползет с постоянной скоростью 0.1 м/с относительной резинки.

V>Давайте резинку не растягивать, а скажем, что просто паучок ползет со скоростью .1/(1+t) относительно значальной резинки. Действительно, проползти s относительно растянутой резинки длиной 1+t то же самое, что проползти s/(1+t) относительно изначальной нерастянутой резинки длины 1.
V>Тогда в момент t скорость .1/(1+t), надо проползти 1. 1 = int[0,t](.1/(1+s))ds=.1*ln(1+t), т.е. догонит за exp(10)-1 секунд = 22025.465794806716516957900645284 секунд = 6 часов 7 минут 5.5 секунд.


А как учитывается расстояние которое паук уже прошел т/е прошел он 2 метра и движется со скоростью 10 * на растяжение
то итоговое расстояние будет 2 метра * растяжение + 10 умноженное на растяжение
т/е влияет и количество пути которое прошел паук
Re[2]: Человек и паучок.
От: codelord  
Дата: 08.08.07 13:40
Оценка:
Здравствуйте, andyJB, Вы писали:

JB>Здравствуйте, SlaVVVa, Вы писали:

SVV>>Логически:
SVV>>Человек движеться равномерно. Паучок с ускорением т.к. к его пройденному пути прибавляется растяжение нити и чем больше он прополз, тем больше это приращение. Отсуда следует что обязательно догонит. А вот как высчитать время?
JB>Да, вроде, за пять минут можно решить в лоб, если помнить дифуры.
JB>v — скорость паучка, V — человека, L — длина веревки.
JB>Для паучка:
JB>x' = x/(Vt+L)*V + v или x'(Vt+L) — xV = v(Vt+L)
JB>x(0) = 0
JB>Это стандартный дифур, интегрирующий множитель 1/(Vt+L)
JB>Получаем x(t) = (Vt+L)ln(Vt+L)v/V + C.
JB>C = — L*ln(L)v/V.
JB>Осталось подставить в условие встречи: VT+L = (VT+L)*ln(VT+L)v/V — L*ln(L)v/V
JB>числа из условия: (T+1) = (T+1)ln(T+1)*0.1 или T = e^10-1
JB>Потребуется где-то часов 6.

Не выходит шесть часов
~3 часа 26 мин получается
можете попробовать проверить эмпирически
не верное решение видимо у вас.
Re: Человек и паучок.
От: centur Россия  
Дата: 08.08.07 13:46
Оценка: -1
Здравствуйте, SlaVVVa, Вы писали:

SVV>Легенда. Задача якобы задавалась на съезде академиков. И Сахаров решил ее за 5 минут на бумажной салфетке.


SVV>Условие. Есть резинка растягивающаяся до бесконечности и по всей длинне равномерно длинной 1 метр. Один конец прикреплен к стене и на нем сидит паучок, другой держит в руках человек. Человек начинает двигаться от стены со скоростью 1 м/с — ондновременно с ним начинает двигаться паучок по резинке паучок со скоростью 0.10 м/с.

SVV>Вопрос: догонит ли паучок человека, и если догонит, то за какое время?

SVV>Логически:

SVV>Человек движеться равномерно. Паучок с ускорением т.к. к его пройденному пути прибавляется растяжение нити и чем больше он прополз, тем больше это приращение. Отсуда следует что обязательно догонит. А вот как высчитать время?

Хмм мне кажется вы все-таки ошиблись или в формулировке задачи или в вашем логическом решении.
Мне кажется что ситуация будет развиваться примерно так:
За каждую секунду включая первую ( в первую секунду увеличение длины пути паучка будет 0)путь паука по резинке будет удлиняться на 1 метр ( скорость человека с резинкой), при этом паучок будет продвигаться на 0.1 метра по резинке. Скорость паука по резинке — постоянная, но длина все время увеличивается. Т.к. резинка растягивается равномерно, то получается что паучок будет замедлять свою скорость движения относительно резинки (ускорение сообщаемое резинкой будет со временем стремиться к нулю) .
Поясню: Введем яркие отметки на резинке на расстоянии 0.1 м.
после первой секунды расстояние между отметками станет 20 см, т.к. резинка растягивается равномерно (для упрощения — представим что паучок за первую секунду все-таки добежал до первой 10см отметки, хотя с учетом растяжения — это не так).
После первой секунды паучок находится на первой отметке, но расстояние между отметками уже 20 см. Таким образом чтобы добежать до второй отметки ему понадобится уже 2 секунды при условии что человек остановится. Но человек не останавливается. И после второй секунды паучок оказывается на расстоянии 10+ х (где х — небольшое расстояние на которое его протянула растягивающаяся резинка, ). При этом расстояние до второй отметки уже 30 см, а паук находится на расстоянии всего лишь максимум на расстоянии 10+5 (причем х < 5 (тут могу соврать мб даже 3), из-за непрерывности растяжения и движения, причем даже если взять "дискретные" величины, например за 0.1 секунды паучок мгновенно продвигается на 1 см, а потом только резинка растягивается дискретно, уже продвигая паука на какое-то растояние, то выигрыш небольшой). Теперь перед паук находится посередине второго "10-сантиметрового" отрезка и до второй отметки ему ползти уже ~15 см. Путь который помогла пройти резинка ~5 см (при этом она удлинилась на 1 метр)
после третьей секунды он находится на расстоянии ~35см от первой отметки+ резинка помогла ему пройти ~3 см ( потому что она увеличилась не в 1.5 раза как во вторую секунду (с 20 см до 30), а всего лишь в 1 1/3 — c 30 до 40). Таким образом дополнительное расстояние пройденное пауком с помощью резинки уменьшается ( а вы утверждаете что приращение растет, что неверно). Итак перед пауком расстояние до второй резинки — 2 см. (правда до 3ей и всех остальных уже 40 . Таким образом дополнительное ускорение которое сообщает резинка — уменьшается. После определенного порога времени оно будет пренебрежительно мало по сравнению с расстоянием пробегаемым пауком, и им можно будет пренебречь. В итоге мы получаем систему (относительно неподвижного наблюдателя) в которой 2 объекта движутся со равномерной скоростью, один из них (первый) — 1 м/с, второй 0.1 м/c. Даже если на момент "перенебрежения" ускорением растояние между ними было 10 см (что оооочень далеко от истины), то второй объект никогда не догонит первого.
Never argue with an Idiot.He'll drag you down to his level and then beat you with experience.
Re[5]: Человек и паучок.
От: Seon  
Дата: 08.08.07 14:10
Оценка:
Здравствуйте, codelord, Вы писали:

C>Здравствуйте, Seon, Вы писали:

S>>красиво, ничего не скажешь
S>>if( time ==1 ) return 20; — это что?

C>это растояние паук преодолел за первую секунду,

C>может и не красиво но я собственно к этому и не стремился

так, это условие у тебя никогда не выполняется, поэтому не нужно. да и вообще оно не надо.

  double Lp = 0.0;
  double Lr = 1.0;
  double Vp = 0.1;
  double Vm = 1.0;

  double dt = 0.01;
  int t = 1;
  while (Lp < Lr)
  {
    Lp = (Lr + Vm * dt) * (Lp / Lr);
    Lp += Vp * dt;
    Lr += Vm * dt;
    printf("T=%d  Lp=%f  Lf=%f\n", t, Lp, Lr);
    t++;
  }
  printf("T=%d\n", int(t * dt));


результат около 22000 сек — 6 часов
Re[2]: Человек и паучок.
От: Pro100Oleh Украина  
Дата: 08.08.07 14:38
Оценка:
Здравствуйте, centur, Вы писали:

много букв, ниасилил
Pro
Re[3]: Человек и паучок.
От: andyJB  
Дата: 08.08.07 15:10
Оценка:
Здравствуйте, codelord, Вы писали:

C>Здравствуйте, andyJB, Вы писали:


C>Не выходит шесть часов

C>~3 часа 26 мин получается
Кто-то бегал?
C>можете попробовать проверить эмпирически
Что именно? Формулу скорости? Простите, но поверю себе на слово.
Я неправильно решил дифур? Тоже не верю. Такая вот, например, программа со мной полностью согласна:
class Program
{
  public static void Main()
  {
    const double dt = 1e-5;

    double t = 0;
    for (double x = 0, X = 1; X - x > 1e-8; t += dt)
    {
      if (t > 1e+10) throw new System.OverflowException();

      const double V = 1.0;
      double v = 0.1 + V*x/X;

      X += V*dt;
      x += v*dt;
    }
    System.Console.WriteLine("T={0}", t);
  }
}

C>не верное решение видимо у вас.
Ключевое слово — видимо.
Re[3]: Человек и паучок.
От: Спильный Андрей Украина  
Дата: 08.08.07 15:44
Оценка:
Здравствуйте, codelord, Вы писали:

C>Не выходит шесть часов

C>не верное решение видимо у вас.

если вы внимательно прочитаете эту ветку сначала, то заметите, что первый численный результат мой — 5,5часов — просто мне не интересно было запускать калькулятор и считать e^10, поэтому прикинул "на глаз" 2,7^10...и он не последний в этой ветке...так что может ошиПка все таки у вас?
Re[3]: Человек и паучок.
От: centur Россия  
Дата: 08.08.07 16:05
Оценка:
Здравствуйте, Pro100Oleh, Вы писали:

PO>Здравствуйте, centur, Вы писали:


PO>много букв, ниасилил


Наверное поэтому и догоняет у вас паучок человека.
Вообще попробуйте начать асиливать учебники, например "Русский язык, 3-ий класс", потом можно взяться за "Математику", класс тот же.
Как дойдете до понимания и решения проблем, что ставят эти мудрые книги — пишите еще. А просто тратить символы на "пустые" ответы — право, не стоит. А то вдруг символы в клавиатуре кончатся...
Never argue with an Idiot.He'll drag you down to his level and then beat you with experience.
Re[3]: Человек и паучок.
От: vadimcher  
Дата: 08.08.07 16:20
Оценка: 1 (1) +1
Здравствуйте, codelord, Вы писали:


C>А как учитывается расстояние которое паук уже прошел т/е прошел он 2 метра и движется со скоростью 10 * на растяжение

C>то итоговое расстояние будет 2 метра * растяжение + 10 умноженное на растяжение
C>т/е влияет и количество пути которое прошел паук

В том-то и дело, что в таком подходе это неважно. Через время t человек уйдет на расстояние t, т.е. резинка растянется на расстояние 1+t равномерно. В этот момент паук, проползающий за бесконечно малое время dt расстояние ds=0.1dt по растянутой резинке, проползает расстояние ds/(1+t) по нерастянутой. Т.е. если Вы ему дадите проползти по ней это расстояние, а потом отпустите резинку в исходное положение, то окажется, что он прополз ds/(1+t). Т.е. его мгновенная скорость в момент времени t, выраженная в метрах нерастянутой резинки, равна ds/(1+t)/dt = 0.1/(1+t). Вот, собственно и вся идея. Ему надо проползти 1 метр нерастянутой резинки, а его скорость в момент времени t равна 0.1/(1+t) метров нерастянутой резинки в секунду. Надеюсь, понятно объяснил.

А вот зайца кому, зайца-выбегайца?!
Re[2]: Человек и паучок.
От: codelord  
Дата: 09.08.07 08:57
Оценка:
Здравствуйте, centur, Вы писали:

C>Здравствуйте, SlaVVVa, Вы писали:


SVV>>Легенда. Задача якобы задавалась на съезде академиков. И Сахаров решил ее за 5 минут на бумажной салфетке.


SVV>>Условие. Есть резинка растягивающаяся до бесконечности и по всей длинне равномерно длинной 1 метр. Один конец прикреплен к стене и на нем сидит паучок, другой держит в руках человек. Человек начинает двигаться от стены со скоростью 1 м/с — ондновременно с ним начинает двигаться паучок по резинке паучок со скоростью 0.10 м/с.

SVV>>Вопрос: догонит ли паучок человека, и если догонит, то за какое время?

SVV>>Логически:

SVV>>Человек движеться равномерно. Паучок с ускорением т.к. к его пройденному пути прибавляется растяжение нити и чем больше он прополз, тем больше это приращение. Отсуда следует что обязательно догонит. А вот как высчитать время?

C>Хмм мне кажется вы все-таки ошиблись или в формулировке задачи или в вашем логическом решении.

C>Мне кажется что ситуация будет развиваться примерно так:
C>За каждую секунду включая первую ( в первую секунду увеличение длины пути паучка будет 0)путь паука по резинке будет удлиняться на 1 метр ( скорость человека с резинкой), при этом паучок будет продвигаться на 0.1 метра по резинке. Скорость паука по резинке — постоянная, но длина все время увеличивается. Т.к. резинка растягивается равномерно, то получается что паучок будет замедлять свою скорость движения относительно резинки (ускорение сообщаемое резинкой будет со временем стремиться к нулю) .
C>Поясню: Введем яркие отметки на резинке на расстоянии 0.1 м.
C>после первой секунды расстояние между отметками станет 20 см, т.к. резинка растягивается равномерно (для упрощения — представим что паучок за первую секунду все-таки добежал до первой 10см отметки, хотя с учетом растяжения — это не так).
C>После первой секунды паучок находится на первой отметке, но расстояние между отметками уже 20 см. Таким образом чтобы добежать до второй отметки ему понадобится уже 2 секунды при условии что человек остановится. Но человек не останавливается. И после второй секунды паучок оказывается на расстоянии 10+ х (где х — небольшое расстояние на которое его протянула растягивающаяся резинка, ). При этом расстояние до второй отметки уже 30 см, а паук находится на расстоянии всего лишь максимум на расстоянии 10+5 (причем х < 5 (тут могу соврать мб даже 3), из-за непрерывности растяжения и движения, причем даже если взять "дискретные" величины, например за 0.1 секунды паучок мгновенно продвигается на 1 см, а потом только резинка растягивается дискретно, уже продвигая паука на какое-то растояние, то выигрыш небольшой). Теперь перед паук находится посередине второго "10-сантиметрового" отрезка и до второй отметки ему ползти уже ~15 см. Путь который помогла пройти резинка ~5 см (при этом она удлинилась на 1 метр)
C>после третьей секунды он находится на расстоянии ~35см от первой отметки+ резинка помогла ему пройти ~3 см ( потому что она увеличилась не в 1.5 раза как во вторую секунду (с 20 см до 30), а всего лишь в 1 1/3 — c 30 до 40). Таким образом дополнительное расстояние пройденное пауком с помощью резинки уменьшается ( а вы утверждаете что приращение растет, что неверно). Итак перед пауком расстояние до второй резинки — 2 см. (правда до 3ей и всех остальных уже 40 . Таким образом дополнительное ускорение которое сообщает резинка — уменьшается. После определенного порога времени оно будет пренебрежительно мало по сравнению с расстоянием пробегаемым пауком, и им можно будет пренебречь. В итоге мы получаем систему (относительно неподвижного наблюдателя) в которой 2 объекта движутся со равномерной скоростью, один из них (первый) — 1 м/с, второй 0.1 м/c. Даже если на момент "перенебрежения" ускорением растояние между ними было 10 см (что оооочень далеко от истины), то второй объект никогда не догонит первого.

Вот я согласен с вашей логикой, что и сам хочу собственно сказать, только есть но
ускорением которое придает резинка пренебрегать нельзя за счет собственно него паук все же догонит.
Re[4]: Человек и паучок.
От: codelord  
Дата: 09.08.07 08:59
Оценка:
Если можно выведи мне пожалуйста своей программой первые 100 шагов паука и соответствующие расстояния
и станет понятно у кого ошибка
Re[4]: Человек и паучок.
От: codelord  
Дата: 09.08.07 09:01
Оценка:
Здравствуйте, vadimcher, Вы писали:

V>Здравствуйте, codelord, Вы писали:



C>>А как учитывается расстояние которое паук уже прошел т/е прошел он 2 метра и движется со скоростью 10 * на растяжение

C>>то итоговое расстояние будет 2 метра * растяжение + 10 умноженное на растяжение
C>>т/е влияет и количество пути которое прошел паук

V>В том-то и дело, что в таком подходе это неважно. Через время t человек уйдет на расстояние t, т.е. резинка растянется на расстояние 1+t равномерно. В этот момент паук, проползающий за бесконечно малое время dt расстояние ds=0.1dt по растянутой резинке, проползает расстояние ds/(1+t) по нерастянутой. Т.е. если Вы ему дадите проползти по ней это расстояние, а потом отпустите резинку в исходное положение, то окажется, что он прополз ds/(1+t). Т.е. его мгновенная скорость в момент времени t, выраженная в метрах нерастянутой резинки, равна ds/(1+t)/dt = 0.1/(1+t). Вот, собственно и вся идея. Ему надо проползти 1 метр нерастянутой резинки, а его скорость в момент времени t равна 0.1/(1+t) метров нерастянутой резинки в секунду. Надеюсь, понятно объяснил.


Я все же не понимаю почему в таком подходе это не важно,
важно скорость паука зависит не только от длины резинки в данный момент, но еще и от расстояния которое он прошел,
Опять таки прошу вывести 100 шагов паука и от Вас.
Re[6]: Человек и паучок.
От: codelord  
Дата: 09.08.07 09:16
Оценка:
Здравствуйте, Seon, Вы писали:

S>Здравствуйте, codelord, Вы писали:


C>>Здравствуйте, Seon, Вы писали:

S>>>красиво, ничего не скажешь
S>>>if( time ==1 ) return 20; — это что?

C>>это растояние паук преодолел за первую секунду,

C>>может и не красиво но я собственно к этому и не стремился

S>так, это условие у тебя никогда не выполняется, поэтому не нужно. да и вообще оно не надо.


S>
S>  double Lp = 0.0;
S>  double Lr = 1.0;
S>  double Vp = 0.1;
S>  double Vm = 1.0;

S>  double dt = 0.01;
S>  int t = 1;
S>  while (Lp < Lr)
S>  {
S>    Lp = (Lr + Vm * dt) * (Lp / Lr);
S>    Lp += Vp * dt;
S>    Lr += Vm * dt;
S>    printf("T=%d  Lp=%f  Lf=%f\n", t, Lp, Lr);
S>    t++;
S>  }
S>  printf("T=%d\n", int(t * dt));
S>


S>результат около 22000 сек — 6 часов


То что оно не выполнится условие я в курсе
я не собирался преподавать уроки программирования( причем эта проверка осталась случайно )
позже ф-я выглядела так:

#include <iostream>
#include <math.h>
using namespace std;
double absolute( double x ) {
     return (( x >= 0.0 ) ? x : x*(-1) );
    }
double get_cof( double time ) {
     return ( ( time <=1 ) ? 1.0 : ( time + 1 ) / time );
    }
double get_disnow( double time, double speed ) {
      return (get_cof( time ) * speed);
     }
using namespace std;
int main( int argc, char **argv ) {
     double x = 10.0;
     for( double t = 1.0; t < 100000 ;t+=1 )
         {
           x *= get_cof( t );
           x += get_disnow( t, 10.0 );
           cout <<" Moskitos = " << x << " cm,  " << "Man = " << t*100 << "cm   " << endl;
           if( (absolute( x - (t * 100 ) ) < 10)  )
            {   cout.width( 20 );
                cout <<"___________________________________________" << endl;
                cout << "TIME WAS = " << t << endl;
                cout << "MOSKITOS  =     " << x << " cm;   ";
                cout << ", MAN       =     " << t * 100 << " cm;   " << endl;
                cout <<"___________________________________________" << endl;
                break;
            }
         }
     return 0;
    }

где ясно видно сколько проходит паук и человек можешь проверить на бумажке.,
в твоей функции которая видимо согласна только с тобой я этого не увидел.

Расстояния в студию.
Re[4]: Человек и паучок.
От: codelord  
Дата: 09.08.07 09:22
Оценка:
Здравствуйте, andyJB, Вы писали:

JB>Здравствуйте, codelord, Вы писали:


C>>Здравствуйте, andyJB, Вы писали:


C>>Не выходит шесть часов

C>>~3 часа 26 мин получается
JB>Кто-то бегал?
C>>можете попробовать проверить эмпирически
JB>Что именно? Формулу скорости? Простите, но поверю себе на слово.
JB>Я неправильно решил дифур? Тоже не верю. Такая вот, например, программа со мной полностью согласна:
JB>
JB>class Program
JB>{
JB>  public static void Main()
JB>  {
JB>    const double dt = 1e-5;

JB>    double t = 0;
JB>    for (double x = 0, X = 1; X - x > 1e-8; t += dt)
JB>    {
JB>      if (t > 1e+10) throw new System.OverflowException();

JB>      const double V = 1.0;
JB>      double v = 0.1 + V*x/X;

JB>      X += V*dt;
JB>      x += v*dt;
JB>    }
JB>    System.Console.WriteLine("T={0}", t);
JB>  }
JB>}
JB>

C>>не верное решение видимо у вас.
JB>Ключевое слово — видимо.
Если можно выведи мне пожалуйста своей программой первые 100 шагов паука и соответствующие расстояния
и станет понятно у кого ошибка

(писал вам поэтому дублирую т/к выше не очень понятно кому )
Re: Человек и паучок.
От: codelord  
Дата: 09.08.07 10:18
Оценка:
Где все то ? ау.

Все еще думаете что потребуется 6 часов ??????
покажите 100 шагов паука и я скажу где ошибка если вы сами не поймете.
Re: Человек и паучок.
От: codelord  
Дата: 09.08.07 10:28
Оценка:
конечно вероятно это я ошибаюсь но покажите тогда
а то я не понимаю в чем
Re: Человек и паучок.
От: codelord  
Дата: 09.08.07 10:44
Оценка:
сори за то что еще раз постю прогу ( предыдущая на несколько сек ошибается )
но вот кому не лень посмотрите что она выводит
#include <iostream>
#include <math.h>
using namespace std;
double absolute( double x ) {
     return (( x >= 0.0 ) ? x : x*(-1) );
    }
double get_cof( double time ) {
     return ( ( time <=1 ) ? 1.0 : ( time + 1 ) / time );
    }
double get_disnow( double time, double speed ) {
      return (get_cof( time ) * speed);
     }
using namespace std;
int main( int argc, char **argv ) {
     double x = 10.0;
     for( double t = 1.0; t < 100000 ; )
         {
           x *= get_cof( t );
           x += get_disnow( t, 10.0 );
           cout <<" Moskitos = " << x << " cm,  " << "Man = " <<++t*100 << "cm   " << endl;
           if( (absolute( x - (t * 100 ) ) < 10)  )            {   cout.width( 20 );
                cout <<"___________________________________________" << endl;
                cout << "TIME WAS = " << t << endl;
                cout << "MOSKITOS  =     " << x << " cm;   ";
                cout << ", MAN       =     " << t * 100 << " cm;   " << endl;
                cout <<"___________________________________________" << endl;
                break;
            }
         }
     return 0;
    }


и приведите пример правильный как у вас получается,
потому что при такой последовательности времени уйдет
Re[5]: Человек и паучок.
От: andyJB  
Дата: 09.08.07 10:48
Оценка:
Здравствуйте, codelord, Вы писали:

C>Если можно выведи мне пожалуйста своей программой первые 100 шагов паука и соответствующие расстояния

С каким dt (шагом времени)?
C>и станет понятно у кого ошибка
У меня по этому поводу сомнений нет.
Re[6]: Человек и паучок.
От: codelord  
Дата: 09.08.07 11:00
Оценка:
Здравствуйте, andyJB, Вы писали:

JB>Здравствуйте, codelord, Вы писали:


C>>Если можно выведи мне пожалуйста своей программой первые 100 шагов паука и соответствующие расстояния

JB>С каким dt (шагом времени)?
C>>и станет понятно у кого ошибка
JB>У меня по этому поводу сомнений нет.


1 сек
Re[2]: Человек и паучок.
От: andyJB  
Дата: 09.08.07 11:03
Оценка:
Здравствуйте, codelord, Вы писали:

C>сори за то что еще раз постю прогу ( предыдущая на несколько сек ошибается )

С шагом времени в 1 секунду результат будет плюс-минус километр.
C>
C>           x += get_disnow( t, 10.0 );
C>

Строчка выше неверна, здесь не должно быть поправки на растяжение.
Re[3]: Человек и паучок.
От: codelord  
Дата: 09.08.07 11:13
Оценка:
Здравствуйте, andyJB, Вы писали:

JB>Здравствуйте, codelord, Вы писали:


C>>сори за то что еще раз постю прогу ( предыдущая на несколько сек ошибается )

JB>С шагом времени в 1 секунду результат будет плюс-минус километр.
C>>
C>>           x += get_disnow( t, 10.0 );
C>>

JB>Строчка выше неверна, здесь не должно быть поправки на растяжение.

вот как раз таки должно
резина за пауком по вашему не растягивается ?

если представить то выглядело бы это так

_______________________|Паук|____________________________|>человек

____________________________|Паук |_______________________________________> человек
т/е резинка за пауком растет и в это время его скорость тоже
Re[4]: Человек и паучок.
От: centur Россия  
Дата: 09.08.07 12:02
Оценка:
Здравствуйте, codelord, Вы писали:

C>Здравствуйте, andyJB, Вы писали:


JB>>Здравствуйте, codelord, Вы писали:


C>>>сори за то что еще раз постю прогу ( предыдущая на несколько сек ошибается )

JB>>С шагом времени в 1 секунду результат будет плюс-минус километр.
C>>>
C>>>           x += get_disnow( t, 10.0 );
C>>>

JB>>Строчка выше неверна, здесь не должно быть поправки на растяжение.

C>вот как раз таки должно

C>резина за пауком по вашему не растягивается ?

C>если представить то выглядело бы это так


C>_______________________|Паук|____________________________|>человек


C>____________________________|Паук |_______________________________________> человек

C>т/е резинка за пауком растет и в это время его скорость тоже



Резинка растет и за и перед ним, причем т.к. паук стартует с самого начала а резинка растягивается РАВНОМЕРНО ( в моем понимании равномерно растянуться в 2 раза означает что любое расстояние между двумя точками увеличивается в 2 раза. Т.е. если паук пробежал до момента растяжения 10 см, то сзади него окажется 20 см, а впереди уже 180!!! т.е. получается что человек, в системе отсчета связанной с пауком (паук в ней неподвижен) все равно движется, следовательно паук его в этой системе никогда не догонит ( а следовательно и в любой другой =) )
Не надо писать сложные программы, просто рассуждайте сначала логически — избавит от рутины программирования, тем более очевидно что вы где то используете неправильные формулы.

Этюд то в общем-то простой, странно что так массово все пошли по пути — "догонит" и начали считать время :D

PS если ее академик решил за 5 минут, то это совершенно не значит что задача сложная а он супер-гений, может просто задача действительно так проста, а 5 минут потрачены на избавление от "излишней сложности" первоначальной оценки.
Never argue with an Idiot.He'll drag you down to his level and then beat you with experience.
Re: Человек и паучок.
От: Кодт Россия  
Дата: 09.08.07 13:07
Оценка: 4 (1) +1
Здравствуйте, SlaVVVa, Вы писали:

SVV>Условие. Есть резинка растягивающаяся до бесконечности и по всей длинне равномерно длинной 1 метр. Один конец прикреплен к стене и на нем сидит паучок, другой держит в руках человек. Человек начинает двигаться от стены со скоростью 1 м/с — ондновременно с ним начинает двигаться паучок по резинке паучок со скоростью 0.10 м/с.

SVV>Вопрос: догонит ли паучок человека, и если догонит, то за какое время?

Удобнее привязать систему координат к человеку.
То есть, переформулировать задачу так:

Резинку держат двое. Один стоит на месте, а второй (вместе со стенкой) начинает отходить.
Паучок стартует со второго к первому.

В этом случае очевидно, что паучок дойдёт.
Пусть он разделяет резинку x+y на части: x до первого и y до второго, в пропорции r=y:x
Если бы он стоял на месте, то пропорция сохранялась бы. А он движется, постепенно меняя её.

x' = v*x/(x+y) — s
y' = v*y/(x+y) + s

Дальше надо решать дифур... Он, вроде бы, простой, но влом.
... << RSDN@Home 1.2.0 alpha rev. 655>>
Перекуём баги на фичи!
Re[4]: Человек и паучок.
От: andyJB  
Дата: 09.08.07 13:44
Оценка:
Здравствуйте, codelord, Вы писали:

C>вот как раз таки должно

C>резина за пауком по вашему не растягивается ?
Все, что нужно учесть, учтено в первой строке. Впрочем, это вопрос сходимости приближения снизу или сверху. Но прежде чем обсуждать программу, в ней НЕОБХОДИМО сделать прирост t не 1 секунду, а хотя бы 0.001 секунды. В текущем виде она выдает полную чушь.
Re[5]: Человек и паучок.
От: codelord  
Дата: 09.08.07 13:49
Оценка: -1
Здравствуйте, andyJB, Вы писали:

JB>Здравствуйте, codelord, Вы писали:


C>>вот как раз таки должно

C>>резина за пауком по вашему не растягивается ?
JB>Все, что нужно учесть, учтено в первой строке. Впрочем, это вопрос сходимости приближения снизу или сверху. Но прежде чем обсуждать программу, в ней НЕОБХОДИМО сделать прирост t не 1 секунду, а хотя бы 0.001 секунды. В текущем виде она выдает полную чушь.
Не зарывайся с выражениями,
Я так и не увидел тех 100 шагов которые просил от тебя,
а сколько секунд выставлять разберусь без тебя,
По поводу чуши надо обосновывать а не раскидываться словами показывая свою полную несостоятельность.
Re[5]: Человек и паучок.
От: andyJB  
Дата: 09.08.07 13:55
Оценка:
C>Этюд то в общем-то простой, странно что так массово все пошли по пути — "догонит" и начали считать время :D
Анекдот в тему:
— Алле, дорогой, будь осторожнее на дороге — по радио передали, что какой-то козел уже полчаса едет по центральному проспекту по встречке.
— Да тут таких козлов сотни!
Небольшой хинт: минут через пять после начала движения скорость паучка превысит 1м/с, и он начнет догонять человека.
Re[6]: Человек и паучок.
От: codelord  
Дата: 09.08.07 14:21
Оценка: :)
Здравствуйте, andyJB, Вы писали:

C>>Этюд то в общем-то простой, странно что так массово все пошли по пути — "догонит" и начали считать время :D

JB>Анекдот в тему:
JB>- Алле, дорогой, будь осторожнее на дороге — по радио передали, что какой-то козел уже полчаса едет по центральному проспекту по встречке.
JB>- Да тут таких козлов сотни!
JB>Небольшой хинт: минут через пять после начала движения скорость паучка превысит 1м/с, и он начнет догонять человека.

Я разве писал что не догонит????
Если уменьшить приращение и сделать его меньше чем 1 секунда то
паук его догонит еще быстрее.

Для примера сейчас сделаю адаптацию программы для приращения 0.001 сек
но это ты похоже не слышишь меня и не хочешь показать свои цифры шагов ???
Re[6]: Человек и паучок.
От: codelord  
Дата: 09.08.07 14:31
Оценка:
Здравствуйте, andyJB, Вы писали:

C>>Этюд то в общем-то простой, странно что так массово все пошли по пути — "догонит" и начали считать время :D

JB>Анекдот в тему:
JB>- Алле, дорогой, будь осторожнее на дороге — по радио передали, что какой-то козел уже полчаса едет по центральному проспекту по встречке.
JB>- Да тут таких козлов сотни!
JB>Небольшой хинт: минут через пять после начала движения скорость паучка превысит 1м/с, и он начнет догонять человека.
вот пожалуйста попробуй, теперь есть dt дельта времени
и соглашусь результат стал более точным и пауку понадобиться меньше времени чем в случае с 1 секундой
можешь вывести и посмотреть что получается, за первую секунду паук пройдет даже большее чем 20 см расстояние
и мне понятно почему, неужели никто не хочет видеть очевидного ??? и тыкаться только в свои "дифуры" ??
#include <iostream>
#include <math.h>
using namespace std;
double absolute( double x ) {
     return (( x >= 0.0 ) ? x : x*(-1) );
    }
double get_cof( double time, double dt ) {
     return ( ( time <=1.0 ) ? 1.0 : ( time + dt ) / time );
    }
double get_disnow( double time, double speed, double dt ) {
      return ( get_cof( time, dt ) * speed * dt );
     }
using namespace std;
int main( int argc, char **argv ) {
     double x = 10.0;
     double dt = 0.001;// Приращение времени
     for( double t = 1.0; t < 100000.0 ; )
         {
           x *= get_cof( t, dt );
           x += get_disnow( t, 10.0, dt );
           t += dt;
           if( x > t * 100.0 ) { cout << " Length  = " << x << ",    " << " Time = " << t << endl; break; }
         }
     return 0;
    }
Re[7]: Человек и паучок.
От: ДимДимыч Украина http://klug.org.ua
Дата: 09.08.07 14:42
Оценка:
Здравствуйте, codelord, Вы писали:

C>Если уменьшить приращение и сделать его меньше чем 1 секунда то

C>паук его догонит еще быстрее.

В реальности приращение dt вообще стремится к нулю!
Обязательно бахнем! И не раз. Весь мир в труху! Но потом. (ДМБ)
Re[6]: Человек и паучок.
От: andyJB  
Дата: 09.08.07 14:53
Оценка:
Здравствуйте, codelord, Вы писали:

C>Здравствуйте, andyJB, Вы писали:


JB>>Здравствуйте, codelord, Вы писали:


C>>>вот как раз таки должно

C>>>резина за пауком по вашему не растягивается ?
JB>>Все, что нужно учесть, учтено в первой строке. Впрочем, это вопрос сходимости приближения снизу или сверху. Но прежде чем обсуждать программу, в ней НЕОБХОДИМО сделать прирост t не 1 секунду, а хотя бы 0.001 секунды. В текущем виде она выдает полную чушь.
C>Не зарывайся с выражениями,
Учись, студент, а то так и будешь всю жизнь инструметы подавать. Нашел я багу в твоей корявой программке: в get_cof написано
 ( time + 1 ) / time

а должно быть
 ( time + 2 ) / (time+1)

потому, что это на самом деле (100 + (time+1)*100) / (100 + time*100).
C>Я так и не увидел тех 100 шагов которые просил от тебя,
Я уже писал временной интервал 1с — это плюс-минус километр.
Кстати, вот тебе, втыкай свою программу, приведенную в более пристойный вид с нормальным временным шагом:
#include <iostream>
#include <math.h>
using namespace std;
using namespace std;

int main( int argc, char **argv )
{
     double dt = 1e-3;

     double x = 0;

     for( double t = dt; t < 100000 ; )
         {
           double coef = (1+t+dt)/(1+t);//there was an error: (t+dt)/t;

           x = (x + 10.0*dt) * coef;

           t += dt;

           double X = 100.0 + t * 100.0;
           //cout <<" Moskitos = " << x << " cm,  " << "Man = " << X << "cm   " << endl;
           if ( X < x )
           { 
              cout.width( 20 );
              cout <<"___________________________________________" << endl;
              cout << "TIME WAS = "        << t <<                    endl;
              cout << "MOSKITOS  =     "   << x << " cm;   ";
              cout << ", MAN       =     " << X << " cm;   "       << endl;
              cout <<"___________________________________________" << endl;
              break;
            }
         }
     return 0;
}

C>а сколько секунд выставлять разберусь без тебя,
Не разберешься. Уже очевидно.
C>По поводу чуши надо обосновывать а не раскидываться словами показывая свою полную несостоятельность.
Я лишь констатирую факт. Я не часто встречаю такой оригинальный способ выражения простых вещей. Не удивительно, что в программе была ошибка.
Re[7]: Человек и паучок.
От: codelord  
Дата: 09.08.07 15:28
Оценка: -1
Здравствуйте, andyJB, Вы писали:

JB>Здравствуйте, codelord, Вы писали:


C>>Здравствуйте, andyJB, Вы писали:


JB>>>Здравствуйте, codelord, Вы писали:


C>>>>вот как раз таки должно

C>>>>резина за пауком по вашему не растягивается ?
JB>>>Все, что нужно учесть, учтено в первой строке. Впрочем, это вопрос сходимости приближения снизу или сверху. Но прежде чем обсуждать программу, в ней НЕОБХОДИМО сделать прирост t не 1 секунду, а хотя бы 0.001 секунды. В текущем виде она выдает полную чушь.
C>>Не зарывайся с выражениями,
JB>Учись, студент, а то так и будешь всю жизнь инструметы подавать. Нашел я багу в твоей корявой программке: в get_cof написано
JB>
 ( time + 1 ) / time

JB>а должно быть
JB>
 ( time + 2 ) / (time+1)

JB>потому, что это на самом деле (100 + (time+1)*100) / (100 + time*100).
C>>Я так и не увидел тех 100 шагов которые просил от тебя,
JB>Я уже писал временной интервал 1с — это плюс-минус километр.
JB>Кстати, вот тебе, втыкай свою программу, приведенную в более пристойный вид с нормальным временным шагом:
JB>
JB>#include <iostream>
JB>#include <math.h>
JB>using namespace std;
JB>using namespace std;

JB>int main( int argc, char **argv )
JB>{
JB>     double dt = 1e-3;

JB>     double x = 0;

JB>     for( double t = dt; t < 100000 ; )
JB>         {
JB>           double coef = (1+t+dt)/(1+t);//there was an error: (t+dt)/t;

JB>           x = (x + 10.0*dt) * coef;

JB>           t += dt;

JB>           double X = 100.0 + t * 100.0;
JB>           //cout <<" Moskitos = " << x << " cm,  " << "Man = " << X << "cm   " << endl;
JB>           if ( X < x )
JB>           { 
JB>              cout.width( 20 );
JB>              cout <<"___________________________________________" << endl;
JB>              cout << "TIME WAS = "        << t <<                    endl;
JB>              cout << "MOSKITOS  =     "   << x << " cm;   ";
JB>              cout << ", MAN       =     " << X << " cm;   "       << endl;
JB>              cout <<"___________________________________________" << endl;
JB>              break;
JB>            }
JB>         }
JB>     return 0;
JB>}
JB>

C>>а сколько секунд выставлять разберусь без тебя,
JB>Не разберешься. Уже очевидно.
C>>По поводу чуши надо обосновывать а не раскидываться словами показывая свою полную несостоятельность.
JB>Я лишь констатирую факт. Я не часто встречаю такой оригинальный способ выражения простых вещей. Не удивительно, что в программе была ошибка.


не смеши "мастер" ты ужасен
по поводу что ты так часто видишь, ты просто видимо очень далек от понимания этого
неправильно ты переделал дружок понимаешь или не понимаешь блин
возьми карандаш и отойди от компьютера ты до него не дорос еще
и еще раз подумай что происходит с резиной.
Re[7]: Человек и паучок.
От: codelord  
Дата: 09.08.07 15:38
Оценка: -2
Здравствуйте, andyJB, Вы писали:

JB>Здравствуйте, codelord, Вы писали:


C>>Здравствуйте, andyJB, Вы писали:


JB>>>Здравствуйте, codelord, Вы писали:


C>>>>вот как раз таки должно

C>>>>резина за пауком по вашему не растягивается ?
JB>>>Все, что нужно учесть, учтено в первой строке. Впрочем, это вопрос сходимости приближения снизу или сверху. Но прежде чем обсуждать программу, в ней НЕОБХОДИМО сделать прирост t не 1 секунду, а хотя бы 0.001 секунды. В текущем виде она выдает полную чушь.
C>>Не зарывайся с выражениями,
JB>Учись, студент, а то так и будешь всю жизнь инструметы подавать. Нашел я багу в твоей корявой программке: в get_cof написано
JB>
 ( time + 1 ) / time

JB>а должно быть
JB>
 ( time + 2 ) / (time+1)

JB>потому, что это на самом деле (100 + (time+1)*100) / (100 + time*100).
C>>Я так и не увидел тех 100 шагов которые просил от тебя,
JB>Я уже писал временной интервал 1с — это плюс-минус километр.
JB>Кстати, вот тебе, втыкай свою программу, приведенную в более пристойный вид с нормальным временным шагом:
JB>
JB>#include <iostream>
JB>#include <math.h>
JB>using namespace std;
JB>using namespace std;

JB>int main( int argc, char **argv )
JB>{
JB>     double dt = 1e-3;

JB>     double x = 0;

JB>     for( double t = dt; t < 100000 ; )
JB>         {
JB>           double coef = (1+t+dt)/(1+t);//there was an error: (t+dt)/t;

JB>           x = (x + 10.0*dt) * coef;

JB>           t += dt;

JB>           double X = 100.0 + t * 100.0;
JB>           //cout <<" Moskitos = " << x << " cm,  " << "Man = " << X << "cm   " << endl;
JB>           if ( X < x )
JB>           { 
JB>              cout.width( 20 );
JB>              cout <<"___________________________________________" << endl;
JB>              cout << "TIME WAS = "        << t <<                    endl;
JB>              cout << "MOSKITOS  =     "   << x << " cm;   ";
JB>              cout << ", MAN       =     " << X << " cm;   "       << endl;
JB>              cout <<"___________________________________________" << endl;
JB>              break;
JB>            }
JB>         }
JB>     return 0;
JB>}
JB>

C>>а сколько секунд выставлять разберусь без тебя,
JB>Не разберешься. Уже очевидно.
C>>По поводу чуши надо обосновывать а не раскидываться словами показывая свою полную несостоятельность.
JB>Я лишь констатирую факт. Я не часто встречаю такой оригинальный способ выражения простых вещей. Не удивительно, что в программе была ошибка.

Ты хоть пробовал вывести первые числа которые получаются на твоей переделке ???
я бы сказал полный бред, получается что за первую секунду паук осилит только 3.84 сантиметра
так что лучше не переделывай больше ничего и иди ка ты сам поучись товарисчь "мастер" хочется добавить #ев
но не стану. Неужели понимание до тебя так никогда и не дойдет? ??
Re[8]: Человек и паучок.
От: andyJB  
Дата: 09.08.07 15:53
Оценка:
Здравствуйте, codelord, Вы писали:
C>не смеши "мастер" ты ужасен
C>по поводу что ты так часто видишь, ты просто видимо очень далек от понимания этого
C>неправильно ты переделал дружок понимаешь или не понимаешь блин
C>возьми карандаш и отойди от компьютера ты до него не дорос еще
C>и еще раз подумай что происходит с резиной.
Я рад, что ты переписал программу с dt. Теперь, подставив ещё меньший dt (0.0001, например), ты узреешь число, похожее на то, к которому будет стремиться твоя убогая аппроксимация. Я подсказал тебе правильный путь, которым ты пренебрег. Что ж, если ты настолько непроходимо глуп, что не видишь ошибки даже если тебе на неё явно указали, то не вижу смысла тратить даже тень своей мегагениальности на недостойного.
Re[3]: Человек и паучок.
От: codelord  
Дата: 09.08.07 16:00
Оценка: 1 (1)
В общем извиняюсь за тон,
Кто бы не был не прав это не допустимо таким образом обращаться,
Re[8]: Человек и паучок.
От: andyJB  
Дата: 09.08.07 16:04
Оценка:
C>Ты хоть пробовал вывести первые числа которые получаются на твоей переделке ???
C>я бы сказал полный бред, получается что за первую секунду паук осилит только 3.84 сантиметра
C>так что лучше не переделывай больше ничего и иди ка ты сам поучись товарисчь "мастер" хочется добавить #ев
C>но не стану. Неужели понимание до тебя так никогда и не дойдет? ??
После первой секунды он пройдет 13.87. Спосбен ли ты скопипастить и запустить программу?
Re[7]: Человек и паучок.
От: Pro100Oleh Украина  
Дата: 09.08.07 16:54
Оценка:
Здравствуйте, codelord, Вы писали:

C>неужели никто не хочет видеть очевидного ??? и тыкаться только в свои "дифуры" ??


Спасибо, рассмешили!
Pro
Re[2]: Человек и паучок.
От: filkov СССР  
Дата: 09.08.07 17:48
Оценка:
Здравствуйте, andyJB, Вы писали:

JB>числа из условия: (T+1) = (T+1)ln(T+1)*0.1 или T = e^10-1


У меня тоже получилось e^10-1
Приятно было узнать, что я не ошибся
Санкционный Смотритель.
Re: Человек и паучок: финальный топик с программой.
От: vadimcher  
Дата: 09.08.07 17:56
Оценка: 1 (1)
Здравствуйте, SlaVVVa, Вы писали:

SVV>Легенда. Задача якобы задавалась на съезде академиков. И Сахаров решил ее за 5 минут на бумажной салфетке.


SVV>Условие. Есть резинка растягивающаяся до бесконечности и по всей длинне равномерно длинной 1 метр. Один конец прикреплен к стене и на нем сидит паучок, другой держит в руках человек. Человек начинает двигаться от стены со скоростью 1 м/с — ондновременно с ним начинает двигаться паучок по резинке паучок со скоростью 0.10 м/с.

SVV>Вопрос: догонит ли паучок человека, и если догонит, то за какое время?

SVV>Логически:

SVV>Человек движеться равномерно. Паучок с ускорением т.к. к его пройденному пути прибавляется растяжение нити и чем больше он прополз, тем больше это приращение. Отсуда следует что обязательно догонит. А вот как высчитать время?

Кажется до меня дошло, в чем суть разногласий, и откуда берутся другие результаты (полученные программным путем). Во всем виноваты растяжение и бесконечно малые.

Сначала теория, потом программа и тесты.

Итак, как я сказал до этого, паук, находясь в точке x за следующие dt секунд пробежит ds=.1dt метров. В моем подходе то, что та точка, с которой он стартовал, тоже за это время уедет, неважно, так как я измеряю все относительно резинки. Тем не менее остается вопрос о том, что то расстояние, которое должен пробежать за это время паук, тоже растянется. Весь вопрос в том, "задними или передними лапками" он цепляется за резинку. Действительно, пока он бежит свои ds, это самое ds также растянется. На сколько -- это вопрос того, на сколько резинка уже растянута, однако я берусь показать, что даже если паук "цепляется передними лапками" и, как следствие, пробегает растянутые ds, это дает лишь поправку второго порядка, которая на ответ не влияет.

Итак, если к моменту t резинка растянута до 1+t, то через dt она станет длиной 1+t+dt. Т.е. растянется в coef=(1+dt/(1+t)) раз. Далее, паук за это время пробегает ds, которые растягиваются в coef раз. Если он бежит "на задних лапах", то пробежит по резинке ds, "на пережних" -- ds*coef. Это можно понимать и так: либо мы растягиваем сначала резинку, а затем он бежит по ней ds, либо он сначала бежит ds, а мы затем растягиваем ее, т.е. получается, что он пробежал растянутые ds, т.е. ds*coef. На практике оба процесса в течении dt происходят одновременно, поэтому он пробежит сколько-то между ds и ds*coef. В своей программе я ввел alpha, которое учитывает в какой степени надо принимать растяжение, пока он бежит ds: alpha=0 -- не надо, т.е. пробежит ds, alpha=1 -- надо "по полной", т.е. пробежит ds*coef, промежуточные значения также допустимы.

Самое интересное, что с точки зрения теории нам учет растяжения расстояния ds ничего не дает! Дейтсивтельно, скорость будет определяться как ds*coef/dt = .1*(1+dt/(1+t)). Т.е. в силу того, что поправка на растяжение добавляет максимум ds*dt/(1+t) к расстоянию ds, т.е. величину заведомо меньшего порядка малости, такая поправка не влияет на величину мгновенной скорости в этой точке.

ОДНАКО, при написании программы, ошибкой было бы положить dt заданной какой-то, пусть малой, но все же конечной величиной, ибо здесь уже бесконечно малые второго порядка начинают играть свою роль.

Итак, программа написана, текст ее в самом конце, я ее запущу несколько раз: c alpha=0 (т.е. без учета растяжения ds) и различными dt, а также с alpha=1 (с полным учетом растяжения) и различными dt. ПРОГРАММА НАПИСАНА С ОБЫЧНЫМ ПОДХОДОМ, А НЕ С МОИМ ТЕОРЕТИЧЕСКИМ, Т.Е. НЕ В МЕТРАХ НЕРАСТЯНУТОЙ РЕЗИНКИ, А В ОБЫЧНОЙ СИСТЕМЕ КООРДИНАТ, С ТЕМ, ЧТОБЫ СТОРОННИКИ ПРОСТОГО ПРОГРАММНОГО ПОДХОДА МОГЛИ УБЕДИТЬСЯ, ЧТО НИКАКИХ "ТЕОРЕТИЧЕСКИХ ТРЮКОВ" ЗДЕСЬ НЕТ.

Результаты:
alpha = 0
dt = 1
Man: 2  Bug: 0.1
Man: 3  Bug: 0.25
Man: 4  Bug: 0.433333
Caught at manx = 33617, bugx = 33617.1 after 33616 secs
dt = 0.1
Man: 1.1        Bug: 0.01
Man: 1.2        Bug: 0.0209091
Man: 1.3        Bug: 0.0326515
Caught at manx = 23136.5, bugx = 23136.5 after 23135.5 secs
dt = 0.01
Man: 1.01       Bug: 0.001
Man: 1.02       Bug: 0.0020099
Man: 1.03       Bug: 0.00302961
Caught at manx = 22136.7, bugx = 22136.7 after 22135.7 secs
dt = 0.001
Man: 1.001      Bug: 0.0001
Man: 1.002      Bug: 0.0002001
Man: 1.003      Bug: 0.0003003
Caught at manx = 22037.5, bugx = 22037.5 after 22036.5 secs
alpha = 1
dt = 1
Man: 2  Bug: 0.2
Man: 3  Bug: 0.45
Man: 4  Bug: 0.733333
Caught at manx = 12368, bugx = 12368.1 after 12367 secs
dt = 0.1
Man: 1.1        Bug: 0.011
Man: 1.2        Bug: 0.0229091
Man: 1.3        Bug: 0.0356515
Caught at manx = 20934.9, bugx = 20934.9 after 20933.9 secs
dt = 0.01
Man: 1.01       Bug: 0.00101
Man: 1.02       Bug: 0.0020299
Man: 1.03       Bug: 0.00305961
Caught at manx = 21916.4, bugx = 21916.4 after 21915.4 secs
dt = 0.001
Man: 1.001      Bug: 0.0001001
Man: 1.002      Bug: 0.0002003
Man: 1.003      Bug: 0.0003006
Caught at manx = 22015.5, bugx = 22015.5 after 22014.5 secs


Разумеется, при полном учете растяжения при конечных dt время получается меньше, так как величины второго порядка играют роль. Однако при уменьшении dt все сходится куда надо.

codelord: Обратите также внимание на Ваш "результат" 12367 секунд, когда я принял во внимание растяжение ds по полной (alpha=1) и положил dt=1! Думаю, это ключ. Прочитайте еще раз мой теоретический подход в другом сообщении и подумайте немного. Там все правильно.

Программа:
#include <iostream>
using namespace std;

// The state of the World!
struct CState {
    double rubberlen;
    double bugx;

    double manspeed;
    double bugspeed;

    double rubberlen0;

    CState(): rubberlen(1.), bugx(0.), manspeed(1.), bugspeed(.1), rubberlen0(rubberlen) { }
    Reset() { rubberlen = rubberlen0; bugx = 0.; }
};

// calculates a new state of the world based on the current state cur,
// alpha, which is the coefficient of the influence of rubber stretching,
// and dt -- small time period,

// alpha=0 -- take into account bug's speed only + the movement of the initial position
// alpha=1 -- take into account the movement of the final position as well

// Returns 1 if the man was caught, o/w returns 0

// Before: bugx=1., rubberlen = 2., dt = .01
// After: new rubber length = 2. + 1. * .01 = 2.01, stretch coefficient = 2.01/2. = 1.005,
//        the distance the bug made: ds = .1 * .01 = .001,
//        the movement of the start position (due to stretch): from bugx=1. to 1. * 1.005 = 1.005,
//        the movement of the final position (due to stretch): from bugx+ds=1.001 to 1.001 * 1.005 = 1.006005,
//        if alpha = 0., then new position = start position + ds = 1.005 + .001 = 1.006,
//        if alpha = 1., then new position = final position = 1.006005
//        if alpha between 0 and 1, then new position is calculated as an weighted sum of those two above
int move(CState & cur, double alpha, double dt) {
    double ds = cur.bugspeed * dt;
    double coef = 1 + cur.manspeed * dt / cur.rubberlen;
    double startx = cur.bugx * coef; // where is the start due to stretching
    double finishx = (cur.bugx + ds) * coef; // where is the finish due to stretching
    double x0 = startx + ds; // if the stretch of the distance is not taken into account
    double x1 = finishx; // otherwise, i.e. if it is taken
    cur.bugx = x0 + alpha * (x1 - x0);
    cur.rubberlen += cur.manspeed * dt;
    return (cur.bugx >= cur.rubberlen);
}

// prints the state
void print(CState cur) {
    cout << "Man: " << cur.rubberlen << "\tBug: " << cur.bugx << '\n';
}

int main() {
    CState state;

    for (double alpha = 0.0; alpha <= 1.0; alpha += 1.0) {
        cout << "alpha = " << alpha << '\n';
        for (double dt = 1; dt >= 0.001; dt /= 10.) {
            cout << "dt = " << dt << '\n';
            int cou = 0;
            while(!move(state, alpha, dt)) {
                if (++cou <= 3) print(state);
            }
            cout << "Caught at manx = " << state.rubberlen << ", bugx = " << state.bugx
                    << " after " << (state.rubberlen - state.rubberlen0) / state.manspeed << " secs\n";
            state.Reset();
        }
    }
}

А вот зайца кому, зайца-выбегайца?!
Re[2]: Человек и паучок: финальный топик с программой.
От: andyJB  
Дата: 09.08.07 18:31
Оценка:
Здравствуйте, vadimcher, Вы писали:

V>Кажется до меня дошло, в чем суть разногласий, и откуда берутся другие результаты (полученные программным путем). Во всем виноваты растяжение и бесконечно малые.


И совершенно верно, что не важно как интергрировать логарифм — приближая прямоугольниками снизу (alpha = 0) или сверху (alpha = 1). Однако, при этом не следует оставлять "зазор", беря прямоугольники предыдущего шага, как было сделано в предложенном ранее программном решении.

V>Разумеется, при полном учете растяжения при конечных dt время получается меньше, так как величины второго порядка играют роль. Однако при уменьшении dt все сходится куда надо.

Ещё бы оно не сходилось! Решение должно быть гладкой функцией, иначе какая это скорость? Гораздо более опасна ошибка вычислений, появляющаяся при последовательных умножениях перемещений паучка на отношение новой и старой длин резинки. К счастью, в данной задаче она не проявляется.
Re[2]: Человек и паучок: финальный топик с программой.
От: Аноним  
Дата: 09.08.07 18:32
Оценка:
Здравствуйте, vadimcher, Вы писали:

V>Здравствуйте, SlaVVVa, Вы писали:


SVV>>Легенда. Задача якобы задавалась на съезде академиков. И Сахаров решил ее за 5 минут на бумажной салфетке.


SVV>>Условие. Есть резинка растягивающаяся до бесконечности и по всей длинне равномерно длинной 1 метр. Один конец прикреплен к стене и на нем сидит паучок, другой держит в руках человек. Человек начинает двигаться от стены со скоростью 1 м/с — ондновременно с ним начинает двигаться паучок по резинке паучок со скоростью 0.10 м/с.

SVV>>Вопрос: догонит ли паучок человека, и если догонит, то за какое время?

SVV>>Логически:

SVV>>Человек движеться равномерно. Паучок с ускорением т.к. к его пройденному пути прибавляется растяжение нити и чем больше он прополз, тем больше это приращение. Отсуда следует что обязательно догонит. А вот как высчитать время?

V>Кажется до меня дошло, в чем суть разногласий, и откуда берутся другие результаты (полученные программным путем). Во всем виноваты растяжение и бесконечно малые.


V>Сначала теория, потом программа и тесты.


V>Итак, как я сказал до этого, паук, находясь в точке x за следующие dt секунд пробежит ds=.1dt метров. В моем подходе то, что та точка, с которой он стартовал, тоже за это время уедет, неважно, так как я измеряю все относительно резинки. Тем не менее остается вопрос о том, что то расстояние, которое должен пробежать за это время паук, тоже растянется. Весь вопрос в том, "задними или передними лапками" он цепляется за резинку. Действительно, пока он бежит свои ds, это самое ds также растянется. На сколько -- это вопрос того, на сколько резинка уже растянута, однако я берусь показать, что даже если паук "цепляется передними лапками" и, как следствие, пробегает растянутые ds, это дает лишь поправку второго порядка, которая на ответ не влияет.


V>Итак, если к моменту t резинка растянута до 1+t, то через dt она станет длиной 1+t+dt. Т.е. растянется в coef=(1+dt/(1+t)) раз. Далее, паук за это время пробегает ds, которые растягиваются в coef раз. Если он бежит "на задних лапах", то пробежит по резинке ds, "на пережних" -- ds*coef. Это можно понимать и так: либо мы растягиваем сначала резинку, а затем он бежит по ней ds, либо он сначала бежит ds, а мы затем растягиваем ее, т.е. получается, что он пробежал растянутые ds, т.е. ds*coef. На практике оба процесса в течении dt происходят одновременно, поэтому он пробежит сколько-то между ds и ds*coef. В своей программе я ввел alpha, которое учитывает в какой степени надо принимать растяжение, пока он бежит ds: alpha=0 -- не надо, т.е. пробежит ds, alpha=1 -- надо "по полной", т.е. пробежит ds*coef, промежуточные значения также допустимы.


V>Самое интересное, что с точки зрения теории нам учет растяжения расстояния ds ничего не дает! Дейтсивтельно, скорость будет определяться как ds*coef/dt = .1*(1+dt/(1+t)). Т.е. в силу того, что поправка на растяжение добавляет максимум ds*dt/(1+t) к расстоянию ds, т.е. величину заведомо меньшего порядка малости, такая поправка не влияет на величину мгновенной скорости в этой точке.


V>ОДНАКО, при написании программы, ошибкой было бы положить dt заданной какой-то, пусть малой, но все же конечной величиной, ибо здесь уже бесконечно малые второго порядка начинают играть свою роль.


V>Итак, программа написана, текст ее в самом конце, я ее запущу несколько раз: c alpha=0 (т.е. без учета растяжения ds) и различными dt, а также с alpha=1 (с полным учетом растяжения) и различными dt. ПРОГРАММА НАПИСАНА С ОБЫЧНЫМ ПОДХОДОМ, А НЕ С МОИМ ТЕОРЕТИЧЕСКИМ, Т.Е. НЕ В МЕТРАХ НЕРАСТЯНУТОЙ РЕЗИНКИ, А В ОБЫЧНОЙ СИСТЕМЕ КООРДИНАТ, С ТЕМ, ЧТОБЫ СТОРОННИКИ ПРОСТОГО ПРОГРАММНОГО ПОДХОДА МОГЛИ УБЕДИТЬСЯ, ЧТО НИКАКИХ "ТЕОРЕТИЧЕСКИХ ТРЮКОВ" ЗДЕСЬ НЕТ.


V>Результаты:

V>
V>alpha = 0
V>dt = 1
V>Man: 2  Bug: 0.1
V>Man: 3  Bug: 0.25
V>Man: 4  Bug: 0.433333
V>Caught at manx = 33617, bugx = 33617.1 after 33616 secs
V>dt = 0.1
V>Man: 1.1        Bug: 0.01
V>Man: 1.2        Bug: 0.0209091
V>Man: 1.3        Bug: 0.0326515
V>Caught at manx = 23136.5, bugx = 23136.5 after 23135.5 secs
V>dt = 0.01
V>Man: 1.01       Bug: 0.001
V>Man: 1.02       Bug: 0.0020099
V>Man: 1.03       Bug: 0.00302961
V>Caught at manx = 22136.7, bugx = 22136.7 after 22135.7 secs
V>dt = 0.001
V>Man: 1.001      Bug: 0.0001
V>Man: 1.002      Bug: 0.0002001
V>Man: 1.003      Bug: 0.0003003
V>Caught at manx = 22037.5, bugx = 22037.5 after 22036.5 secs
V>alpha = 1
V>dt = 1
V>Man: 2  Bug: 0.2
V>Man: 3  Bug: 0.45
V>Man: 4  Bug: 0.733333
V>Caught at manx = 12368, bugx = 12368.1 after 12367 secs
V>dt = 0.1
V>Man: 1.1        Bug: 0.011
V>Man: 1.2        Bug: 0.0229091
V>Man: 1.3        Bug: 0.0356515
V>Caught at manx = 20934.9, bugx = 20934.9 after 20933.9 secs
V>dt = 0.01
V>Man: 1.01       Bug: 0.00101
V>Man: 1.02       Bug: 0.0020299
V>Man: 1.03       Bug: 0.00305961
V>Caught at manx = 21916.4, bugx = 21916.4 after 21915.4 secs
V>dt = 0.001
V>Man: 1.001      Bug: 0.0001001
V>Man: 1.002      Bug: 0.0002003
V>Man: 1.003      Bug: 0.0003006
V>Caught at manx = 22015.5, bugx = 22015.5 after 22014.5 secs
V>


V>Разумеется, при полном учете растяжения при конечных dt время получается меньше, так как величины второго порядка играют роль. Однако при уменьшении dt все сходится куда надо.


V>codelord: Обратите также внимание на Ваш "результат" 12367 секунд, когда я принял во внимание растяжение ds по полной (alpha=1) и положил dt=1! Думаю, это ключ. Прочитайте еще раз мой теоретический подход в другом сообщении и подумайте немного. Там все правильно.


V>Программа:

V>
V>#include <iostream>
V>using namespace std;

V>// The state of the World!
V>struct CState {
V>    double rubberlen;
V>    double bugx;

V>    double manspeed;
V>    double bugspeed;

V>    double rubberlen0;

V>    CState(): rubberlen(1.), bugx(0.), manspeed(1.), bugspeed(.1), rubberlen0(rubberlen) { }
V>    Reset() { rubberlen = rubberlen0; bugx = 0.; }
V>};

V>// calculates a new state of the world based on the current state cur,
V>// alpha, which is the coefficient of the influence of rubber stretching,
V>// and dt -- small time period,

V>// alpha=0 -- take into account bug's speed only + the movement of the initial position
V>// alpha=1 -- take into account the movement of the final position as well

V>// Returns 1 if the man was caught, o/w returns 0

V>// Before: bugx=1., rubberlen = 2., dt = .01
V>// After: new rubber length = 2. + 1. * .01 = 2.01, stretch coefficient = 2.01/2. = 1.005,
V>//        the distance the bug made: ds = .1 * .01 = .001,
V>//        the movement of the start position (due to stretch): from bugx=1. to 1. * 1.005 = 1.005,
V>//        the movement of the final position (due to stretch): from bugx+ds=1.001 to 1.001 * 1.005 = 1.006005,
V>//        if alpha = 0., then new position = start position + ds = 1.005 + .001 = 1.006,
V>//        if alpha = 1., then new position = final position = 1.006005
V>//        if alpha between 0 and 1, then new position is calculated as an weighted sum of those two above
V>int move(CState & cur, double alpha, double dt) {
V>    double ds = cur.bugspeed * dt;
V>    double coef = 1 + cur.manspeed * dt / cur.rubberlen;
V>    double startx = cur.bugx * coef; // where is the start due to stretching
V>    double finishx = (cur.bugx + ds) * coef; // where is the finish due to stretching
V>    double x0 = startx + ds; // if the stretch of the distance is not taken into account
V>    double x1 = finishx; // otherwise, i.e. if it is taken
V>    cur.bugx = x0 + alpha * (x1 - x0);
V>    cur.rubberlen += cur.manspeed * dt;
V>    return (cur.bugx >= cur.rubberlen);
V>}

V>// prints the state
V>void print(CState cur) {
V>    cout << "Man: " << cur.rubberlen << "\tBug: " << cur.bugx << '\n';
V>}

V>int main() {
V>    CState state;

V>    for (double alpha = 0.0; alpha <= 1.0; alpha += 1.0) {
V>        cout << "alpha = " << alpha << '\n';
V>        for (double dt = 1; dt >= 0.001; dt /= 10.) {
V>            cout << "dt = " << dt << '\n';
V>            int cou = 0;
V>            while(!move(state, alpha, dt)) {
V>                if (++cou <= 3) print(state);
V>            }
V>            cout << "Caught at manx = " << state.rubberlen << ", bugx = " << state.bugx
V>                    << " after " << (state.rubberlen - state.rubberlen0) / state.manspeed << " secs\n";
V>            state.Reset();
V>        }
V>    }
V>}
V>

(codelord)
Видимо так все и есть
спасибо за разъяснения.
сейчас еще гляну но уверен в вашей правоте.
Re[2]: Человек и паучок.
От: vadimcher  
Дата: 10.08.07 05:13
Оценка:
Здравствуйте, Кодт, Вы писали:

К>Здравствуйте, SlaVVVa, Вы писали:


SVV>>Условие. Есть резинка растягивающаяся до бесконечности и по всей длинне равномерно длинной 1 метр. Один конец прикреплен к стене и на нем сидит паучок, другой держит в руках человек. Человек начинает двигаться от стены со скоростью 1 м/с — ондновременно с ним начинает двигаться паучок по резинке паучок со скоростью 0.10 м/с.

SVV>>Вопрос: догонит ли паучок человека, и если догонит, то за какое время?

К>Удобнее привязать систему координат к человеку.

К>То есть, переформулировать задачу так:

К>Резинку держат двое. Один стоит на месте, а второй (вместе со стенкой) начинает отходить.

К>Паучок стартует со второго к первому.

К>В этом случае очевидно, что паучок дойдёт.

К>Пусть он разделяет резинку x+y на части: x до первого и y до второго, в пропорции r=y:x
К>Если бы он стоял на месте, то пропорция сохранялась бы. А он движется, постепенно меняя её.

Не очевидно. Ну, например, если бы он двигался с замедлением (т.е. не только из-за растяжения, но еще просто замедляясь), то уже не обязательно догнал бы, а пропорция менялась бы все равно. Или я чего-то не понял? Хотя идея хороша.

К>x' = v*x/(x+y) — s

К>y' = v*y/(x+y) + s

К>Дальше надо решать дифур... Он, вроде бы, простой, но влом.


сложим: (x+y)'=v x+y=vt+1
вычтем: (x-y)'=v(x-y)/(vt+1)-2s=(x-y)/(t+1/v)-2s x-y=(v-2sln(vt+1))(t+1/v)
y=(t+1/v)sln(vt+1) = vt+1 (когда догонит)
t = (1/v)[exp(v/s)-1] = exp(10)-1

А вот зайца кому, зайца-выбегайца?!
Re[9]: Человек и паучок.
От: Аноним  
Дата: 10.08.07 05:15
Оценка:
Здравствуйте, andyJB, Вы писали:

JB>Здравствуйте, codelord, Вы писали:

C>>не смеши "мастер" ты ужасен
C>>по поводу что ты так часто видишь, ты просто видимо очень далек от понимания этого
C>>неправильно ты переделал дружок понимаешь или не понимаешь блин
C>>возьми карандаш и отойди от компьютера ты до него не дорос еще
C>>и еще раз подумай что происходит с резиной.
JB>Я рад, что ты переписал программу с dt. Теперь, подставив ещё меньший dt (0.0001, например), ты узреешь число, похожее на то, к которому будет стремиться твоя убогая аппроксимация. Я подсказал тебе правильный путь, которым ты пренебрег. Что ж, если ты настолько непроходимо глуп, что не видишь ошибки даже если тебе на неё явно указали, то не вижу смысла тратить даже тень своей мегагениальности на недостойного.

Не могу отказать себе в удовольствии
назвать тебя полным мудаком и за слова я тебе могу ответить лично, и супер мега гений написал неправильный коэффициент надеюсь ты носом ткнешься и поймешь почему( который подгон под ответ )
Предлагаю встретиться в Москве любое удобное для тебя время и место, чтобы набить тебе твою сраную морду за твои сраные слова которые при встрече
собственно ручно ( в виде распечатанного топика ) засунешь в задний проход и будешь этому очень рад. т/к это будет лучшее развитие событий для тебя.
Предлагаю сегодня.
Re[7]: Человек и паучок.
От: Seon  
Дата: 10.08.07 08:08
Оценка:
Здравствуйте, codelord, Вы писали:

C>Здравствуйте, Seon, Вы писали:


S>>Здравствуйте, codelord, Вы писали:


C>>>Здравствуйте, Seon, Вы писали:

S>>>>красиво, ничего не скажешь
S>>>>if( time ==1 ) return 20; — это что?

C>>>это растояние паук преодолел за первую секунду,

C>>>может и не красиво но я собственно к этому и не стремился

S>>так, это условие у тебя никогда не выполняется, поэтому не нужно. да и вообще оно не надо.


S>>
S>>  double Lp = 0.0;
S>>  double Lr = 1.0;
S>>  double Vp = 0.1;
S>>  double Vm = 1.0;

S>>  double dt = 0.01;
S>>  int t = 1;
S>>  while (Lp < Lr)
S>>  {
S>>    Lp = (Lr + Vm * dt) * (Lp / Lr);
S>>    Lp += Vp * dt;
S>>    Lr += Vm * dt;
S>>    printf("T=%d  Lp=%f  Lf=%f\n", t, Lp, Lr);
S>>    t++;
S>>  }
S>>  printf("T=%d\n", int(t * dt));
S>>


S>>результат около 22000 сек — 6 часов


C>То что оно не выполнится условие я в курсе

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>     return ( ( time <=1 ) ? 1.0 : ( time + 1 ) / time );
C>    }
C>double get_disnow( double time, double speed ) {
C>      return (get_cof( time ) * speed);
C>     }
C>using namespace std;
C>int main( int argc, char **argv ) {
C>     double x = 10.0;
C>     for( double t = 1.0; t < 100000 ;t+=1 )
C>         {
C>           x *= get_cof( t );
C>           x += get_disnow( t, 10.0 );
C>           cout <<" Moskitos = " << x << " cm,  " << "Man = " << t*100 << "cm   " << endl;
C>           if( (absolute( x - (t * 100 ) ) < 10)  )
C>            {   cout.width( 20 );
C>                cout <<"___________________________________________" << endl;
C>                cout << "TIME WAS = " << t << endl;
C>                cout << "MOSKITOS  =     " << x << " cm;   ";
C>                cout << ", MAN       =     " << t * 100 << " cm;   " << endl;
C>                cout <<"___________________________________________" << endl;
C>                break;
C>            }
C>         }
C>     return 0;
C>    }

C>

C> где ясно видно сколько проходит паук и человек можешь проверить на бумажке.,
C> в твоей функции которая видимо согласна только с тобой я этого не увидел.

C> Расстояния в студию.


Сори, ваапще без задней мысли. Никого обидеть не хотел, я думал ты прикалываешься... Извини.
Re[8]: Человек и паучок.
От: Аноним  
Дата: 10.08.07 08:29
Оценка:
Здравствуйте, Seon, Вы писали:

S> Сори, ваапще без задней мысли. Никого обидеть не хотел, я думал ты прикалываешься... Извини.


да я к вам без претензий
Re[10]: Человек и паучок.
От: Pro100Oleh Украина  
Дата: 10.08.07 12:00
Оценка:
Если хочешь кого-то оскорбить, то хоть подпишись, а не от "анонима" пиши.
Pro
Re[2]: Человек и паучок: финальный топик с программой.
От: Pro100Oleh Украина  
Дата: 10.08.07 12:04
Оценка:
Какой же вывод будет?
Может быть отсюда следует, что нужно использовать формулы, а не программы с дискретным подходом?
Pro
Re[3]: Человек и паучок: финальный топик с программой.
От: vadimcher  
Дата: 10.08.07 17:15
Оценка:
Здравствуйте, Pro100Oleh, Вы писали:

PO>Какой же вывод будет?

PO>Может быть отсюда следует, что нужно использовать формулы, а не программы с дискретным подходом?

Ну да, тем более, что по формулам я решил эту задачу в уме за 3 минуты и получил правильный ответ, а вот на программу с приблизительным результатом мне пришлось убить добрый час.

А вот зайца кому, зайца-выбегайца?!
Re: Человек и паучок.
От: Mystic Украина http://mystic2000.newmail.ru
Дата: 12.08.07 10:03
Оценка:
Здравствуйте, SlaVVVa, Вы писали:

SVV>Легенда. Задача якобы задавалась на съезде академиков. И Сахаров решил ее за 5 минут на бумажной салфетке.


Типа так?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re: Человек и паучок.
От: Erop Россия  
Дата: 12.08.07 10:55
Оценка: 1 (1)
Здравствуйте, SlaVVVa, Вы писали:

SVV>Легенда. Задача якобы задавалась на съезде академиков. И Сахаров решил ее за 5 минут на бумажной салфетке.


Я всё понимаю, но о чём тут дамал целых 5 минут Сахаров?
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[2]: Человек и паучок.
От: vadimcher  
Дата: 13.08.07 14:07
Оценка:
Здравствуйте, Erop, Вы писали:

E>Здравствуйте, SlaVVVa, Вы писали:


SVV>>Легенда. Задача якобы задавалась на съезде академиков. И Сахаров решил ее за 5 минут на бумажной салфетке.


E>Я всё понимаю, но о чём тут дамал целых 5 минут Сахаров?


Для данной задачт есть нестандартные решения, которые позволяют "проинтегрировать" в уме, но все зависит от того, какое решение в голову прийдет. Если через дифуры, то лучше листик и 5 минут все же иметь. Известен факт, что как раз у академиков глаз, что называется, "замыливается" от стандартных подходов и решений. Поэтому, если человек всю жизнь имел дело с дифурами (например, изучал динамику в физике), то вполне вероятно, что первое что приходит в голову -- это дифуры. И это ПРАВИЛЬНО, ибо если я немного изменю условие, то все нестандартные решения полетят к черту, а дифуры останутся.

А вот зайца кому, зайца-выбегайца?!
Re[2]: Человек и паучок.
От: vadimcher  
Дата: 13.08.07 14:11
Оценка:
Здравствуйте, Mystic, Вы писали:

M>Здравствуйте, SlaVVVa, Вы писали:


SVV>>Легенда. Задача якобы задавалась на съезде академиков. И Сахаров решил ее за 5 минут на бумажной салфетке.


M>Типа так?


Типа не совсем...

А вот зайца кому, зайца-выбегайца?!
Re[3]: Человек и паучок.
От: Erop Россия  
Дата: 13.08.07 14:25
Оценка:
Здравствуйте, vadimcher, Вы писали:

V>...если я немного изменю условие, то все нестандартные решения полетят к черту, а дифуры останутся.


Интересно, а как, например?
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[4]: Человек и паучок.
От: vadimcher  
Дата: 13.08.07 15:29
Оценка:
Здравствуйте, Erop, Вы писали:

E>Здравствуйте, vadimcher, Вы писали:


V>>...если я немного изменю условие, то все нестандартные решения полетят к черту, а дифуры останутся.


E>Интересно, а как, например?


Ну как? Любое нетривиальное движение паука или человека, например.

Вот смотрите, два подхода, описанные в решениях моем и Кодт'а (самое элегантное решение в дифурах, имхо), соответственно (так сказать ЭЛЕГАНТНОСТЬ против УНИВЕРСАЛЬНОСТИ):

Через время t резинка станет длиной 1+t. Паучок ползет с постоянной скоростью 0.1 м/с относительной резинки.
Давайте резинку не растягивать, а скажем, что просто паучок ползет со скоростью .1/(1+t) относительно значальной резинки.

Резинку держат двое. Один стоит на месте, а второй (вместе со стенкой) начинает отходить.
...
Пусть он разделяет резинку x+y на части: x до первого и y до второго, в пропорции r=y:x
x' = v*x/(x+y) — s
y' = v*y/(x+y) + s


Теперь, попробуем задачу переписать так: в момент времени t скорость человека f(t).
Во что превращаются два решения?

Через время t резинка станет длиной 1+int[0,t]f(t). Паучок ползет с постоянной скоростью 0.1 м/с относительной резинки.
Давайте резинку не растягивать, а скажем, что просто паучок ползет со скоростью .1/(1+int[0,t]f(t)) относительно значальной резинки.

Резинку держат двое. Один стоит на месте, а второй (вместе со стенкой) начинает отходить.
...
Пусть он разделяет резинку x+y на части: x до первого и y до второго, в пропорции r=y:x
x' = f(t)*x/(x+y) — s
y' = f(t)*y/(x+y) + s

Сложность первого варианта существенно выросла, он уже почти как второй.

Теперь еще чуть-чуть усложним: скорость человека зависит от расстояния до паука (например, чем паук ближе -- тем страшнее ).

Через время t резинка станет длиной 1+???. Паучок ползет с постоянной скоростью 0.1 м/с относительной резинки.
Давайте резинку не растягивать, а скажем, что просто паучок ползет со скоростью .1/(1+???) относительно значальной резинки.

Резинку держат двое. Один стоит на месте, а второй (вместе со стенкой) начинает отходить.
...
Пусть он разделяет резинку x+y на части: x до первого и y до второго, в пропорции r=y:x
x' = f(t,x)*x/(x+y) — s
y' = f(t,x)*y/(x+y) + s

Первое решение окончательно развалилось, а второе -- нет. Если здесь есть аналитическое решение, оно его найдет. Если нет -- численно посчитает!

В борьбе ЭЛЕГАНТНОСТИ с УНИВЕРСАЛЬНОСТЬЮ в итоге побеждает последнее. Почти всегда и почти во всем. Иногда везет, и элегантное решение становится почти универсальным.

Именно поэтому с опытом (как у академиков, например) в голове остаются только универсальные шаблоны, которые они готовы моментально применить к любой задаче. Именно поэтому, скорее всего, как я думаю, Сахарову (если эту байку воспринимать всерьез) потребовался листик и 5 минут. Но ему же листика и 5 минут хватило бы на любой из представленных здесь трех вариантов. И именно поэтому, скорее всего, как я думаю, Арнольд в предисловии к своим "Задачам для детей от 5 до 15 лет" пишет "Я заметил даже, что пятилетние дети решают подобные задачи лучше школьников, испорченных натаскиванием, которым они даются легче, чем студентам, подвергшимся зубрежке в университете, но все же превосходящим своих профессоров (хуже всех решают эти простые задачи нобелевские и филдсовские лауреаты)."

А вот зайца кому, зайца-выбегайца?!
Re[5]: Человек и паучок.
От: Erop Россия  
Дата: 13.08.07 15:46
Оценка:
Здравствуйте, vadimcher, Вы писали:

V>Именно поэтому с опытом (как у академиков, например) в голове остаются только универсальные шаблоны, которые они готовы моментально применить к любой задаче. Именно поэтому, скорее всего, как я думаю, Сахарову (если эту байку воспринимать всерьез) потребовался листик и 5 минут. Но ему же листика и 5 минут хватило бы на любой из представленных здесь трех вариантов. И именно поэтому, скорее всего, как я думаю, Арнольд в предисловии к своим "Задачам для детей от 5 до 15 лет" пишет "Я заметил даже, что пятилетние дети решают подобные задачи лучше школьников, испорченных натаскиванием, которым они даются легче, чем студентам, подвергшимся зубрежке в университете, но все же превосходящим своих профессоров (хуже всех решают эти простые задачи нобелевские и филдсовские лауреаты)."



Я может чего не понял, но я решал как-то так:

L(t) = L0 + Vч t -- длина растянутой резинки
Uп( t ) = Vп * L( 0 ) / L( t ) -- скорость паучка относительно "нерастянутой" резинки

Sп( t ) = int( 0, t, Uп( t ) dt ) = int( 0, t, Vп/( 1 + Vч/L0 t ) ) = дальше всё вычисляется и без бумажки и намного быстрее 5 минут. Особенно если в виде int( 0, t, 0.1/( 1 + t ) dt ) = 0.1 int( 1, t + 1, dt / t ) = 0.1 ln( t + 1 )

Таки о чём же он думал?
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[6]: Человек и паучок.
От: vadimcher  
Дата: 13.08.07 15:55
Оценка:
Здравствуйте, Erop, Вы писали:

E>Здравствуйте, vadimcher, Вы писали:


V>>Именно поэтому с опытом (как у академиков, например) в голове остаются только универсальные шаблоны, которые они готовы моментально применить к любой задаче. Именно поэтому, скорее всего, как я думаю, Сахарову (если эту байку воспринимать всерьез) потребовался листик и 5 минут. Но ему же листика и 5 минут хватило бы на любой из представленных здесь трех вариантов. И именно поэтому, скорее всего, как я думаю, Арнольд в предисловии к своим "Задачам для детей от 5 до 15 лет" пишет "Я заметил даже, что пятилетние дети решают подобные задачи лучше школьников, испорченных натаскиванием, которым они даются легче, чем студентам, подвергшимся зубрежке в университете, но все же превосходящим своих профессоров (хуже всех решают эти простые задачи нобелевские и филдсовские лауреаты)."



E>Я может чего не понял, но я решал как-то так:


E>L(t) = L0 + Vч t -- длина растянутой резинки

E>Uп( t ) = Vп * L( 0 ) / L( t ) -- скорость паучка относительно "нерастянутой" резинки

E>Sп( t ) = int( 0, t, Uп( t ) dt ) = int( 0, t, Vп/( 1 + Vч/L0 t ) ) = дальше всё вычисляется и без бумажки и намного быстрее 5 минут. Особенно если в виде int( 0, t, 0.1/( 1 + t ) dt ) = 0.1 int( 1, t + 1, dt / t ) = 0.1 ln( t + 1 )


E>Таки о чём же он думал?


Ну вот, Вы опять о том же... как Вы решали. Я не спорю, что Ваше решение самое элегантное и ответ может быть получен за 3, нет за 1 минуту без бумажки. Просто, как мне кажется, решение с дифурами более универсально -- и это то, что первым придет в голову физику с опытом решения динамических задач. Есть динамическая система, и решение есть сразу -- система дифуров. Это как таблица умножения в физике. Может я и не прав. Вот, например, еще раз повторюсь, Кодт представил красивое решение в дифурах. А решать дифур для данной задачи в уме -- увольте! Байка на то она и есть байка, чтобы что-то в ней было правдой, а что-то почти правдой.

А вот зайца кому, зайца-выбегайца?!
Re[7]: Человек и паучок.
От: Erop Россия  
Дата: 13.08.07 17:08
Оценка:
Здравствуйте, vadimcher, Вы писали:

E>>Я может чего не понял, но я решал как-то так:


E>>L(t) = L0 + Vч t -- длина растянутой резинки

E>>Uп( t ) = Vп * L( 0 ) / L( t ) -- скорость паучка относительно "нерастянутой" резинки

E>>Sп( t ) = int( 0, t, Uп( t ) dt ) = int( 0, t, Vп/( 1 + Vч/L0 t ) ) = дальше всё вычисляется и без бумажки и намного быстрее 5 минут. Особенно если в виде int( 0, t, 0.1/( 1 + t ) dt ) = 0.1 int( 1, t + 1, dt / t ) = 0.1 ln( t + 1 )


E>>Таки о чём же он думал?


V>Ну вот, Вы опять о том же... как Вы решали. Я не спорю, что Ваше решение самое элегантное и ответ может быть получен за 3, нет за 1 минуту без бумажки. Просто, как мне кажется, решение с дифурами более универсально -- и это то, что первым придет в голову физику с опытом решения динамических задач. Есть динамическая система, и решение есть сразу -- система дифуров. Это как таблица умножения в физике. Может я и не прав. Вот, например, еще раз повторюсь, Кодт представил красивое решение в дифурах. А решать дифур для данной задачи в уме -- увольте! Байка на то она и есть байка, чтобы что-то в ней было правдой, а что-то почти правдой.


Ну я не понимаю, что может его "испортить"
Ну пусть будет L( t ) общего вида. Ну получим тот же интеграл.
Пусть даже скорость будет функцией положения паучка. Ну интеграл будет чуть страннее. Но не сильно.
Короче в чём неуниверсальность решения? При чём тут дифуры?
Мне вообще кажется, что такое решение оно прямое. Я не понимаю как иначе прямо интерпретировать идею "ползёт со скоростью 0.1 м/с по резинке"...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[8]: Человек и паучок.
От: vadimcher  
Дата: 13.08.07 20:47
Оценка:
Здравствуйте, Erop, Вы писали:

E>Здравствуйте, vadimcher, Вы писали:


E>>>Я может чего не понял, но я решал как-то так:


E>>>L(t) = L0 + Vч t -- длина растянутой резинки

E>>>Uп( t ) = Vп * L( 0 ) / L( t ) -- скорость паучка относительно "нерастянутой" резинки

E>>>Sп( t ) = int( 0, t, Uп( t ) dt ) = int( 0, t, Vп/( 1 + Vч/L0 t ) ) = дальше всё вычисляется и без бумажки и намного быстрее 5 минут. Особенно если в виде int( 0, t, 0.1/( 1 + t ) dt ) = 0.1 int( 1, t + 1, dt / t ) = 0.1 ln( t + 1 )


E>>>Таки о чём же он думал?


V>>Ну вот, Вы опять о том же... как Вы решали. Я не спорю, что Ваше решение самое элегантное и ответ может быть получен за 3, нет за 1 минуту без бумажки. Просто, как мне кажется, решение с дифурами более универсально -- и это то, что первым придет в голову физику с опытом решения динамических задач. Есть динамическая система, и решение есть сразу -- система дифуров. Это как таблица умножения в физике. Может я и не прав. Вот, например, еще раз повторюсь, Кодт представил красивое решение в дифурах. А решать дифур для данной задачи в уме -- увольте! Байка на то она и есть байка, чтобы что-то в ней было правдой, а что-то почти правдой.


E>Ну я не понимаю, что может его "испортить"

E>Ну пусть будет L( t ) общего вида. Ну получим тот же интеграл.
E>Пусть даже скорость будет функцией положения паучка. Ну интеграл будет чуть страннее. Но не сильно.
E>Короче в чём неуниверсальность решения? При чём тут дифуры?
E>Мне вообще кажется, что такое решение оно прямое. Я не понимаю как иначе прямо интерпретировать идею "ползёт со скоростью 0.1 м/с по резинке"...

Ok, я просто высказал свое мнение. Мне показалось решение в дифурах более универсальным, а потому более естественным для академика. Кроме того, я не могу решить эти дифуры в уме. Поэтому и предположил, что ему могли понадобиться ручка, листик и 5 минут, а Вам -- нет. Просто мнение.

А вот зайца кому, зайца-выбегайца?!
Re[3]: Человек и паучок.
От: Mystic Украина http://mystic2000.newmail.ru
Дата: 14.08.07 07:38
Оценка:
Здравствуйте, vadimcher, Вы писали:

M>>Типа так?


V>Типа не совсем...


Там решалась задача с учетом того, что скорость паучка в 100 раз меньше скорости человека, а тут в уловии разница всего в 10 раз, что позволяет использовать вычислительную технику

А что не так?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[2]: Человек и паучок.
От: andyJB  
Дата: 14.08.07 12:23
Оценка: :)
Здравствуйте, Erop, Вы писали:

E>Здравствуйте, SlaVVVa, Вы писали:


SVV>>Легенда. Задача якобы задавалась на съезде академиков. И Сахаров решил ее за 5 минут на бумажной салфетке.


E>Я всё понимаю, но о чём тут дамал целых 5 минут Сахаров?

А где там сказано, что он думал пять минут? Он не думал, а аккуратно записывал решение. На бумажной салфетке полминуты надо только на то, чтобы ручку расписать.
Re[5]: Человек и паучок.
От: sergey_shandar США http://getboost.codeplex.com/
Дата: 16.08.07 04:54
Оценка:
Здравствуйте, codelord, Вы писали:

C>Здравствуйте, vadimcher, Вы писали:


V>>Здравствуйте, codelord, Вы писали:



C>>>А как учитывается расстояние которое паук уже прошел т/е прошел он 2 метра и движется со скоростью 10 * на растяжение

C>>>то итоговое расстояние будет 2 метра * растяжение + 10 умноженное на растяжение
C>>>т/е влияет и количество пути которое прошел паук

V>>В том-то и дело, что в таком подходе это неважно. Через время t человек уйдет на расстояние t, т.е. резинка растянется на расстояние 1+t равномерно. В этот момент паук, проползающий за бесконечно малое время dt расстояние ds=0.1dt по растянутой резинке, проползает расстояние ds/(1+t) по нерастянутой. Т.е. если Вы ему дадите проползти по ней это расстояние, а потом отпустите резинку в исходное положение, то окажется, что он прополз ds/(1+t). Т.е. его мгновенная скорость в момент времени t, выраженная в метрах нерастянутой резинки, равна ds/(1+t)/dt = 0.1/(1+t). Вот, собственно и вся идея. Ему надо проползти 1 метр нерастянутой резинки, а его скорость в момент времени t равна 0.1/(1+t) метров нерастянутой резинки в секунду. Надеюсь, понятно объяснил.


C>Я все же не понимаю почему в таком подходе это не важно,

C>важно скорость паука зависит не только от длины резинки в данный момент, но еще и от расстояния которое он прошел,
C>Опять таки прошу вывести 100 шагов паука и от Вас.

Просто представь что паук уменьшается в размерах (соответственно и его скорость), а не резинка расстягивается.
getboost.codeplex.com
citylizard.codeplex.com
Re[2]: Человек и паучок.
От: ДимДимыч Украина http://klug.org.ua
Дата: 16.08.07 11:06
Оценка:
Здравствуйте, andyJB, Вы писали:

JB>Осталось подставить в условие встречи: VT+L = (VT+L)*ln(VT+L)v/V — L*ln(L)v/V

JB>числа из условия: (T+1) = (T+1)ln(T+1)*0.1 или T = e^10-1

Кстати, как я понимаю, из этого следует, что при конечной скорости человека, и скорости паука больше нуля, паук всегда догонит человека за конечное время?
Обязательно бахнем! И не раз. Весь мир в труху! Но потом. (ДМБ)
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.