Сравниваем HP-50G и TI-89, ищем ошибки!

На днях попытался взять неопределённый интеграл от w*ln((m+x)/m)dx

На TI-89: ((x+m)*ln((x+m)/m)-x)*w, что совпадает с результатом интегрирования по таблицам интегоралов.

На HP-50G: INTVX(w*ln((m+x)/m)) получаю w*((m+x)/m*LN((m+x)/m)-(m+x)/m)/(1/m) чтобы упростить выполняю группировку COLLECT и получаю (LN((m+x)/m)-1)*(m+x)*w

Разница между результатами составила m*w. После такого начинаешь задумываться кто из них прав?

Кто ещё сталкивался с неадекватными ответами этих калькуляторов?

Undefined

Комментарии

А что выдают математические пакеты на компьютере?

MathCad14Программа MathCad14 выдаёт результат, совпадающий также с результатом HP-50G.

Выкладки. Руководствуясь формулой

"Неопределённый интеграл от lnx равен xlnx - x = x(lnx-1)",

самостоятельно получила тот же ответ, что и у MathCad или HP-50G.
Произведём замену переменной

      m + x
y = --------
        m.

Тогда исходный интеграл приобретёт вид

Неопределённый интеграл от w*lny*m*dy.

Т.к. w и m константы, пользуемся вышеупомянутой формулой и получаем

w*m*(ylny-y) = w*m*[(m+x)/m]*{ln[(m+x)/m]-1} =

              m + x
= w*(m+x)*(ln------- -1).
                m

Думаю, я не ошиблась: MathCad вряд ли ошибается точь-в-точь так же.

Проверка корректности. Книги и программы пишут люди. А людей которые не ошибаются - не бывает.

Я использовал таблицы неопределённых интегралов Смолянского от 1965 года.
В принципе Смолянский тоже человек, которому тоже свойственно ошибаться. Есть верный способ проверить кто прав. Надо численно взять этот интеграл на каком-либо интервале, а затем взять этот же определённый интеграл обоими способами. Что точнее совпадёт то и правильно.

Если вы не заметили, то интегрируется формула Циолковского, которая вычисляет скорость ракеты. Интеграл - это перемещение ракеты за время разгона. Подробности уже обсуждались здесь: http://pmk.arbinada.com/node/214 под заголовком "Уточнить математику Лунолётов". Я пока больше склонен верить TI-89, но проверить надо-бы через численное интегрирование. Если кто-либо сделает это раньше меня - я не обижусь ;-)

Мои программируемые калькуляторы:
Б3-21, Б3-34, МК-61, МК-52, МК-85
CASIO: cfx-9850GB+, fx-9750G+, fx-9750GII, fx-9860G, Algebra fx-2.0, fx-5800P, fx-7400G+
HP: 50G, 48G, 35s
TI: Nspire-CAS, Voyage-200, 89Titanium
SHARP EL-9600G

Проверено! Результат проверки меня несколько позабавил.
Итак исходные данные:
w = 100 м/с скорость истечения топлива.
m = 10 кг сухая масса корабля
масса топлива x меняется от 90 до 0 кг.

Численное интегрирование = 14025,851 м
Интегрирование по TI-89 S = F(90) - F(0) = 14025,851 - 0 = 14025,851
Интегрирование по HP50G S = F(90) - F(0) = 13025,851 - (-1000) = 14025,851

Как вам это нравится?

Но всё же интегрирование от TI больше соответствует физике процесса по моему мнению.

Мои программируемые калькуляторы:
Б3-21, Б3-34, МК-61, МК-52, МК-85
CASIO: cfx-9850GB+, fx-9750G+, fx-9750GII, fx-9860G, Algebra fx-2.0, fx-5800P, fx-7400G+
HP: 50G, 48G, 35s
TI: Nspire-CAS, Voyage-200, 89Titanium
SHARP EL-9600G

А собственно, почему мы сразу не заметили: m*w - константа, а неопределённый интеграл вычисляется с точностью до константы, если не задано дополнительного условия! То есть правы и HP-50G, и TI-89.

О константе в интеграле. В неопределённом интеграле константа имеет другое значение. В данном конкретном случае смысл константы - это начальное значение координаты и произведение массы на скорость (импульс) к константе интеграла (начальной координате) не имеет прямого отношения.

Однако можно расписать значения единиц измерения параметров результата интегрирования. В каком случае получаются метры?

Мои программируемые калькуляторы:
Б3-21, Б3-34, МК-61, МК-52, МК-85
CASIO: cfx-9850GB+, fx-9750G+, fx-9750GII, fx-9860G, Algebra fx-2.0, fx-5800P, fx-7400G+
HP: 50G, 48G, 35s
TI: Nspire-CAS, Voyage-200, 89Titanium
SHARP EL-9600G

Интеграл. Мне кажется, что этот интеграл вообще не имеет смысла. Что подразумевается под dx? Ведь x это x(t).

Смысл есть! x - это расход топлива, а значение интеграла - это приращение координаты за время разгона. Этот интеграл утверждает, что (если мы возьмем условия тестового примера, приведенного выше) приращение координаты не зависит от времени расхода топлива. Израсходуем мы 90 кг за секунду, или за 10 секунд, или за 100 - не имеет значения. К концу маневра координата изменится на вычисленную величину по сравнению с равномерным прямолинейным движением. Этот интеграл заменяет выражение a*t2/2 в формуле для равноускоренного движения.

Если утрировать - можно сказать, что координата изменится на одинаковую величину, если произведение ускорения на время его действия есть константа.

Ну и разумеется, что все расчёты происходят в консервативной системе отсчёта для которой выполняются преобразования Галилея.

P.S.
Если суслика (смысла) не видишь - это не значит, что его нет ;-)

Мои программируемые калькуляторы:
Б3-21, Б3-34, МК-61, МК-52, МК-85
CASIO: cfx-9850GB+, fx-9750G+, fx-9750GII, fx-9860G, Algebra fx-2.0, fx-5800P, fx-7400G+
HP: 50G, 48G, 35s
TI: Nspire-CAS, Voyage-200, 89Titanium
SHARP EL-9600G

Пройденное растояние зависит от времени разгона Этот интеграл утверждает, что (если мы возьмем условия тестового примера, приведенного выше) приращение координаты не зависит от времени расхода топлива. Израсходуем мы 90 кг за секунду, или за 10 секунд, или за 100 - не имеет значения.

Это неверно. Растояние пройденое кораблем будет зависеть от времени разгона, причем сильно.
Еще раз повторю, dx тут использовать нельзя, т.к. x зависит от t. Это функция, например: x(t)=m0-a*t (пример равномерного сжигания топлива со скоростью a кг/с ). Поэтому решать надо совершенно другой дифур, и получится совершенно другой интеграл, в решении которого уже, по-идее, не должны вылазить бессмысленные константы с размерностью "килограммометры-в-секунду".

Если утрировать - можно сказать, что координата изменится на одинаковую величину, если произведение ускорения на время его действия есть константа.

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

Вы не внимательно прочли мой пост. Приращение координаты, т.е. приращение расстояния, а не расстояние. В тот момент времени, как вы сожжете всё топливо Вы окажетесь на 14025.851 метров дальше, чем если бы двигались по инерции.

Мои программируемые калькуляторы:
Б3-21, Б3-34, МК-61, МК-52, МК-85
CASIO: cfx-9850GB+, fx-9750G+, fx-9750GII, fx-9860G, Algebra fx-2.0, fx-5800P, fx-7400G+
HP: 50G, 48G, 35s
TI: Nspire-CAS, Voyage-200, 89Titanium
SHARP EL-9600G

Нет, это не так. Перейдите в систему координат движущегося по инерции тела и поймете. Формула Циолковского показывает, что приращение скорости при истечении определенного количества реактивной массы будет постоянным (в принципе это следствие закона сохранения импульса), но никак не пройденное им за это время растояние!!!

Предложите свою модель и обсчитаем её вместе.

Мои программируемые калькуляторы:
Б3-21, Б3-34, МК-61, МК-52, МК-85
CASIO: cfx-9850GB+, fx-9750G+, fx-9750GII, fx-9860G, Algebra fx-2.0, fx-5800P, fx-7400G+
HP: 50G, 48G, 35s
TI: Nspire-CAS, Voyage-200, 89Titanium
SHARP EL-9600G

дифуры. Давненько я не брал в руки шаш..., тоесть не решал дифуры. Пожалуй, где-то курса с третего универа ;) Так что, скорей всего наглючу.
Начнем с того, что формула Циолковского - это следствие интегрирования формулы Мещерского - вот с нее то и надо начать.
Внаглую спер ее с википедии ;)
m*dV/dt-u*dm/dt=0
m - масса, V - скорость, u — относительная скорость, с которой движется отделяющаяся от точки часть её массы (это скорость истечения продуктов сгорания в нашем случае)
Добавляем условие V(0)=V0, решаем систему (я решал в Maple), получаем:
V(t) = u*ln(m(t)/m(0))+V0
Вот она, родимая, формула Циолковского (достаточно вычесть V(t2)-V(t1) чтоб выйти на нее).
Дальше подставляем для случая равномерного расхода топлива со скоростью a следующую формулу: m(t)=m0-a*t, добавляем условие S(0)=S0, решаем, получаем:
S(t) = u*(t-m0/a)*ln(1-a*t/m0)-u*t+V0*t+S0
Для проверки нарисовал графики изменения скорости и движения для случая когда: S0=0,V0=0,m0=100 кг.,u=-100 м/с (минус т.к. реактивная масса истекает в обратном направлении),a=1 кг/с,t=0..100:
График скорости:
Free Image Hosting at www.ImageShack.us

Перемещение:
Free Image Hosting at www.ImageShack.us

Подредактировал, упростил формулы.

Ушат холодной воды. Приятно видеть теоретические изыскания, друзья.

Но в реальности (если мы хотим продолжить моделирование плоского движения) тяга имеет угол, и этот угол со временем меняется. Даже если угол отсчитывается не от направления движения, а от направления на центр планеты (как в "Лунолёте-3").

угол меняется. Не думаю, что это главная проблема. Обращаю внимание, что u,V,S - это не обязательно скалярные переменные. Если задать их вектором, тогда u и будет направление тяги. Если u будет изменться дискретно (как в реале - корабль сначала ориентируют, потом дают тягу), тогда эта аналитическая модель вполне применима при моделировании. Она не подходит только для случая, когда вектор тяги изменяют во действия время самой тяги (например, если корабль вращают с включенным двигателем - тут надо вводить вместо константы u функцию u(t) и в большинстве случаев аналитическое решение не получится).
Более интересная проблема - это как добавить сюда гравитацию? В общем случае, когда G зависит от положения корабля относительно планеты, решить задачу аналитически вряд ли возможно (?). Но, учитывая то, что обычно время маневра очень ограничено, можно немного упростить задачу и считать G на время маневра константой. В этом случае, если не ошибаюсь, к V(t) надо просто добавить g*t (g, кстати тоже необязательно скаляр), а к S(t) добавить g*t^2/2.

угол меняется > Обращаю внимание, что u,V,S - это не обязательно скалярные переменные.

Именно! Дифуры должны быть векторными.

Ajaja:
> Если u будет изменться дискретно (как в реале - корабль сначала ориентируют,
> потом дают тягу),

В реале в корабле есть кибернетическая система, следящая за ориентацией корабля и правящая вектор тяги в соответствии с программой полёта. Очень редко направление тяги постоянно относительно звёзд. В случае "Лунолёта-3" вектор тяги постоянен относительно местной вертикали, которая зависит от угловой координаты корабля.

> Более интересная проблема - это как добавить сюда гравитацию?

Да, это вторая задача. И гравитация действительно зависит и от расстояния, и от направления до центра планеты.

> считать G на время маневра константой.

Само ТМное понятие манёвра искусственно, т.к. соответствует игровому ходу. В космонавтике манёвр это такая операция, как разгон корабля или стыковка.

При программировании на МК-152 игровой ход можно разбить на несколько вычислительных квантов, на протяжении которых ряд переменных можно условно считать константами или изменяющимися линейно.

>Именно! Дифуры должны быть векторными.
Эти уравнения универсальны, как и их решение. Нет никакой разницы, скаляры там (по сути - одномерный вектор) или векторы (см. тензорное исчисление). Решение будет тем же.

Убедили! Вы Меня убедили, что я несколько перемудрил в своих утверждениях. Спасибо.

Однако, в свою защиту хочу сказать, что выведенная Вами формула перемещения при реактивном движении и выведенная мной ранее (см. ссылку на пост "Уточняем математику Лунолётов" http://pmk.arbinada.com/node/214) дают совершенно одинаковые решения при одинаковых исходных данных.

Мои программируемые калькуляторы:
Б3-21, Б3-34, МК-61, МК-52, МК-85
CASIO: cfx-9850GB+, fx-9750G+, fx-9750GII, fx-9860G, Algebra fx-2.0, fx-5800P, fx-7400G+
HP: 50G, 48G, 35s
TI: Nspire-CAS, Voyage-200, 89Titanium
SHARP EL-9600G

Жжём топливо. Ajaja wrote to basvic
>> приращение координаты не зависит от времени расхода топлива
> Это неверно. Растояние пройденое кораблем будет зависеть от времени разгона

Согласен.

Корабль жжёт топливо. И когда мы разгоняем полные баки, это тяжелее, чем идти на пустых баках.

В принципе, это и было солью рассказа «Истинная правда» (слова того селенолога). Первым нашим уроком навигации.

Обозначения > x - это расход топлива

Предлагаю последовательно придерживаться обозначений из ТМ. Это не только наш общий авторитет, но по тем формулам уже вычерчены блок-схемы и доступны программы, проверенные временем и людьми, имеющими отношение к космонавтике.

К тому же во время Интернета нам всем доступны статьи из ТМ, на которые можно свободно ссылаться в случае выявления терминологических разногласий.

Тогда не придётся изучать обозначения друг друга — по крайней мере когда речь идёт о переменных, давно использующихся в «Лунолётах».

:-( Другой интеграл. Почти табличный интеграл (интеграл от функции с линейной подстановкой):
интеграл от корня третьей степени из квадрата суммы икс плюс один.
На HP 50g получается так же как и на TI-89T, но со знаком минус. Проверка дифференцированием показывает, что HP 50g считает с ошибкой (по одному из основных свойств неопределённого интеграла производная результата интегрирования должна совпадать с подынтегральной функцией). Подынтегральная функция задаётся в указанном случае с помощью XROOT, а если задавать как (x+1)^(2/3), то ответ HP 50g правильный.

Похоже, что в первом случае интеграл вычисляется не от кубического корня от квадрата двучлена, а квадрата от корня кубического от двучлена... Разный порядок действий привёл к разным путям решения. Если ввести сначала корень кубический от двучлена, а затем возвести его в квадрат, то получится тот же интеграл, что и для степени 2/3.

Мои программируемые калькуляторы:
Б3-21, Б3-34, МК-61, МК-52, МК-85
CASIO: cfx-9850GB+, fx-9750G+, fx-9750GII, fx-9860G, Algebra fx-2.0, fx-5800P, fx-7400G+
HP: 50G, 48G, 35s
TI: Nspire-CAS, Voyage-200, 89Titanium
SHARP EL-9600G

Разный порядок выполнения операций возведения в 1/3 и во 2 степень никак не влияет на результат, а использование кубического корня XROOT(3, ) вместо 1/3 степени влияет:
INTVX(XROOT(3,(X+1)^2))<>INTVX(XROOT(3,X+1))^2.

Ещё один интеграл (тройной). S(S(S(1,z,0,sqrt(1-x^2-y^2)),y,0,sqrt(1-x^2)),x,0,1) неправильно вычисляется TI-89T, который даёт ответ sin(oo)*PI/6. HP 50g считает правильно - PI/6. Примечание: S - интеграл, oo - бесконечность. Интересно, что в этом случае насчитывает TI Nspire CAS?

TI Nspire CAS ОС версии 2.1 то же, что и TI-89. sin(oo)*pi/6.

Мои программируемые калькуляторы:
Б3-21, Б3-34, МК-61, МК-52, МК-85
CASIO: cfx-9850GB+, fx-9750G+, fx-9750GII, fx-9860G, Algebra fx-2.0, fx-5800P, fx-7400G+
HP: 50G, 48G, 35s
TI: Nspire-CAS, Voyage-200, 89Titanium
SHARP EL-9600G

Спасибо за быстрый ответ ! :-)