Здравствуйте, 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 секунд.
Здравствуйте, 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 умноженное на растяжение
т/е влияет и количество пути которое прошел паук
Здравствуйте, 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 мин получается
можете попробовать проверить эмпирически
не верное решение видимо у вас.
Здравствуйте, 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.
Здравствуйте, 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));
Здравствуйте, 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>не верное решение видимо у вас.
Ключевое слово — видимо.
Здравствуйте, codelord, Вы писали:
C>Не выходит шесть часов C>не верное решение видимо у вас.
если вы внимательно прочитаете эту ветку сначала, то заметите, что первый численный результат мой — 5,5часов — просто мне не интересно было запускать калькулятор и считать e^10, поэтому прикинул "на глаз" 2,7^10...и он не последний в этой ветке...так что может ошиПка все таки у вас?
Здравствуйте, Pro100Oleh, Вы писали:
PO>Здравствуйте, centur, Вы писали:
PO>много букв, ниасилил
Наверное поэтому и догоняет у вас паучок человека.
Вообще попробуйте начать асиливать учебники, например "Русский язык, 3-ий класс", потом можно взяться за "Математику", класс тот же.
Как дойдете до понимания и решения проблем, что ставят эти мудрые книги — пишите еще. А просто тратить символы на "пустые" ответы — право, не стоит. А то вдруг символы в клавиатуре кончатся...
Never argue with an Idiot.He'll drag you down to his level and then beat you with experience.
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) метров нерастянутой резинки в секунду. Надеюсь, понятно объяснил.
Здравствуйте, 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 см (что оооочень далеко от истины), то второй объект никогда не догонит первого.
Вот я согласен с вашей логикой, что и сам хочу собственно сказать, только есть но
ускорением которое придает резинка пренебрегать нельзя за счет собственно него паук все же догонит.
Здравствуйте, 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 шагов паука и от Вас.
Здравствуйте, 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;
}
где ясно видно сколько проходит паук и человек можешь проверить на бумажке.,
в твоей функции которая видимо согласна только с тобой я этого не увидел.
Здравствуйте, 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 шагов паука и соответствующие расстояния
и станет понятно у кого ошибка
(писал вам поэтому дублирую т/к выше не очень понятно кому )
сори за то что еще раз постю прогу ( предыдущая на несколько сек ошибается )
но вот кому не лень посмотрите что она выводит
#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;
}
Moskitos = 20 cm, Man = 200cm
Moskitos = 45 cm, Man = 300cm
Moskitos = 73.3333 cm, Man = 400cm
Moskitos = 104.167 cm, Man = 500cm
Moskitos = 137 cm, Man = 600cm
Moskitos = 171.5 cm, Man = 700cm
Moskitos = 207.429 cm, Man = 800cm
Moskitos = 244.607 cm, Man = 900cm
Moskitos = 282.897 cm, Man = 1000cm
Moskitos = 322.187 cm, Man = 1100cm
Moskitos = 362.385 cm, Man = 1200cm
Moskitos = 403.417 cm, Man = 1300cm
Moskitos = 445.219 cm, Man = 1400cm
Moskitos = 487.734 cm, Man = 1500cm
Moskitos = 530.917 cm, Man = 1600cm
Moskitos = 574.724 cm, Man = 1700cm
Moskitos = 619.119 cm, Man = 1800cm
Moskitos = 664.071 cm, Man = 1900cm
Moskitos = 709.548 cm, Man = 2000cm
Moskitos = 755.525 cm, Man = 2100cm
Moskitos = 801.979 cm, Man = 2200cm
Moskitos = 848.887 cm, Man = 2300cm
и приведите пример правильный как у вас получается,
потому что при такой последовательности времени уйдет
Здравствуйте, codelord, Вы писали:
C>Если можно выведи мне пожалуйста своей программой первые 100 шагов паука и соответствующие расстояния
С каким dt (шагом времени)? C>и станет понятно у кого ошибка
У меня по этому поводу сомнений нет.
Здравствуйте, andyJB, Вы писали:
JB>Здравствуйте, codelord, Вы писали:
C>>Если можно выведи мне пожалуйста своей программой первые 100 шагов паука и соответствующие расстояния JB>С каким dt (шагом времени)? C>>и станет понятно у кого ошибка JB>У меня по этому поводу сомнений нет.