Здравствуйте, codelord, Вы писали:
C>сори за то что еще раз постю прогу ( предыдущая на несколько сек ошибается )
С шагом времени в 1 секунду результат будет плюс-минус километр. C>
C> x += get_disnow( t, 10.0 );
C>
Строчка выше неверна, здесь не должно быть поправки на растяжение.
Здравствуйте, andyJB, Вы писали:
JB>Здравствуйте, codelord, Вы писали:
C>>сори за то что еще раз постю прогу ( предыдущая на несколько сек ошибается ) JB>С шагом времени в 1 секунду результат будет плюс-минус километр. C>>
C>> x += get_disnow( t, 10.0 );
C>>
JB>Строчка выше неверна, здесь не должно быть поправки на растяжение.
вот как раз таки должно
резина за пауком по вашему не растягивается ?
Здравствуйте, 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.
Здравствуйте, 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
Дальше надо решать дифур... Он, вроде бы, простой, но влом.
Здравствуйте, codelord, Вы писали:
C>вот как раз таки должно C>резина за пауком по вашему не растягивается ?
Все, что нужно учесть, учтено в первой строке. Впрочем, это вопрос сходимости приближения снизу или сверху. Но прежде чем обсуждать программу, в ней НЕОБХОДИМО сделать прирост t не 1 секунду, а хотя бы 0.001 секунды. В текущем виде она выдает полную чушь.
Здравствуйте, andyJB, Вы писали:
JB>Здравствуйте, codelord, Вы писали:
C>>вот как раз таки должно C>>резина за пауком по вашему не растягивается ? JB>Все, что нужно учесть, учтено в первой строке. Впрочем, это вопрос сходимости приближения снизу или сверху. Но прежде чем обсуждать программу, в ней НЕОБХОДИМО сделать прирост t не 1 секунду, а хотя бы 0.001 секунды. В текущем виде она выдает полную чушь.
Не зарывайся с выражениями,
Я так и не увидел тех 100 шагов которые просил от тебя,
а сколько секунд выставлять разберусь без тебя,
По поводу чуши надо обосновывать а не раскидываться словами показывая свою полную несостоятельность.
C>Этюд то в общем-то простой, странно что так массово все пошли по пути — "догонит" и начали считать время :D
Анекдот в тему:
— Алле, дорогой, будь осторожнее на дороге — по радио передали, что какой-то козел уже полчаса едет по центральному проспекту по встречке.
— Да тут таких козлов сотни!
Небольшой хинт: минут через пять после начала движения скорость паучка превысит 1м/с, и он начнет догонять человека.
Здравствуйте, andyJB, Вы писали:
C>>Этюд то в общем-то простой, странно что так массово все пошли по пути — "догонит" и начали считать время :D JB>Анекдот в тему: JB>- Алле, дорогой, будь осторожнее на дороге — по радио передали, что какой-то козел уже полчаса едет по центральному проспекту по встречке. JB>- Да тут таких козлов сотни! JB>Небольшой хинт: минут через пять после начала движения скорость паучка превысит 1м/с, и он начнет догонять человека.
Я разве писал что не догонит????
Если уменьшить приращение и сделать его меньше чем 1 секунда то
паук его догонит еще быстрее.
Для примера сейчас сделаю адаптацию программы для приращения 0.001 сек
но это ты похоже не слышишь меня и не хочешь показать свои цифры шагов ???
Здравствуйте, 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;
}
Здравствуйте, 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>По поводу чуши надо обосновывать а не раскидываться словами показывая свою полную несостоятельность.
Я лишь констатирую факт. Я не часто встречаю такой оригинальный способ выражения простых вещей. Не удивительно, что в программе была ошибка.
Здравствуйте, 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>Я лишь констатирую факт. Я не часто встречаю такой оригинальный способ выражения простых вещей. Не удивительно, что в программе была ошибка.
не смеши "мастер" ты ужасен
по поводу что ты так часто видишь, ты просто видимо очень далек от понимания этого
неправильно ты переделал дружок понимаешь или не понимаешь блин
возьми карандаш и отойди от компьютера ты до него не дорос еще
и еще раз подумай что происходит с резиной.
Здравствуйте, 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 сантиметра
так что лучше не переделывай больше ничего и иди ка ты сам поучись товарисчь "мастер" хочется добавить #ев
но не стану. Неужели понимание до тебя так никогда и не дойдет? ??
Здравствуйте, codelord, Вы писали: C>не смеши "мастер" ты ужасен C>по поводу что ты так часто видишь, ты просто видимо очень далек от понимания этого C>неправильно ты переделал дружок понимаешь или не понимаешь блин C>возьми карандаш и отойди от компьютера ты до него не дорос еще C>и еще раз подумай что происходит с резиной.
Я рад, что ты переписал программу с dt. Теперь, подставив ещё меньший dt (0.0001, например), ты узреешь число, похожее на то, к которому будет стремиться твоя убогая аппроксимация. Я подсказал тебе правильный путь, которым ты пренебрег. Что ж, если ты настолько непроходимо глуп, что не видишь ошибки даже если тебе на неё явно указали, то не вижу смысла тратить даже тень своей мегагениальности на недостойного.
C>Ты хоть пробовал вывести первые числа которые получаются на твоей переделке ??? C>я бы сказал полный бред, получается что за первую секунду паук осилит только 3.84 сантиметра C>так что лучше не переделывай больше ничего и иди ка ты сам поучись товарисчь "мастер" хочется добавить #ев C>но не стану. Неужели понимание до тебя так никогда и не дойдет? ??
После первой секунды он пройдет 13.87. Спосбен ли ты скопипастить и запустить программу?
Здравствуйте, 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. ПРОГРАММА НАПИСАНА С ОБЫЧНЫМ ПОДХОДОМ, А НЕ С МОИМ ТЕОРЕТИЧЕСКИМ, Т.Е. НЕ В МЕТРАХ НЕРАСТЯНУТОЙ РЕЗИНКИ, А В ОБЫЧНОЙ СИСТЕМЕ КООРДИНАТ, С ТЕМ, ЧТОБЫ СТОРОННИКИ ПРОСТОГО ПРОГРАММНОГО ПОДХОДА МОГЛИ УБЕДИТЬСЯ, ЧТО НИКАКИХ "ТЕОРЕТИЧЕСКИХ ТРЮКОВ" ЗДЕСЬ НЕТ.
Разумеется, при полном учете растяжения при конечных 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 aboveint 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 stretchingdouble finishx = (cur.bugx + ds) * coef; // where is the finish due to stretchingdouble x0 = startx + ds; // if the stretch of the distance is not taken into accountdouble 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 statevoid 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]: Человек и паучок: финальный топик с программой.
Здравствуйте, vadimcher, Вы писали:
V>Кажется до меня дошло, в чем суть разногласий, и откуда берутся другие результаты (полученные программным путем). Во всем виноваты растяжение и бесконечно малые.
И совершенно верно, что не важно как интергрировать логарифм — приближая прямоугольниками снизу (alpha = 0) или сверху (alpha = 1). Однако, при этом не следует оставлять "зазор", беря прямоугольники предыдущего шага, как было сделано в предложенном ранее программном решении.
V>Разумеется, при полном учете растяжения при конечных dt время получается меньше, так как величины второго порядка играют роль. Однако при уменьшении dt все сходится куда надо.
Ещё бы оно не сходилось! Решение должно быть гладкой функцией, иначе какая это скорость? Гораздо более опасна ошибка вычислений, появляющаяся при последовательных умножениях перемещений паучка на отношение новой и старой длин резинки. К счастью, в данной задаче она не проявляется.