Я заметил, что математика гасит определенные определенные интегралы, но если я делаю индеифинитное интегрирование и вычитаю предельные значения результирующей функции, это легко даст мне ответ.
Существуют ли различные алгоритмы для вычисления определенных и неопределенных интегралов? Есть ли причина, по которой описанная выше процедура не выполняется системой Mathematica вручную?
Примеры:
Как люди в комментарии просили примеры, вот два.
Timing[Integrate[(r - c x)/(r^2 + c^2 - (2 r) c x)^(3/2), x]]
Out:={0.010452,(-c+r x)/(r^2 Sqrt[c^2+r^2-2 c r x])}
Немедленное получение выходных данных. Пока
Integrate[(r - c x)/(r^2 + c^2 - (2 r) c x)^(3/2), {x, -1, 1}]
Продолжает работать и замедляет работу моего старого компьютера. По прошествии некоторого времени он возвращает нежелательно длинный результат с большим количеством случаев. Это система Mathematica 7. В этом интеграле или в комплексных числах и т.д. нет сингулярностей. Чтобы получить значение, давайте прервем вычисление примерно на минуту и найдем значение с помощью фундаментальной теоремы исчисления вручную.
g = (r - c x)/(r^2 + c^2 - (2 r) c x)^(3/2)
l = Integrate[g, x] /. x -> -1;
u = Integrate[g, x] /. x -> 1;
u - l
Out:= (-c+r)/(r^2 Sqrt[c^2-2 c r+r^2])-(-c-r)/(r^2 Sqrt[c^2+2 c r+r^2])
FullSimplify[%]
Out:= ((-c+r)/Sqrt[(c-r)^2]+(c+r)/Sqrt[(c+r)^2])/r^2
Что на самом деле правильно. Наконец, для полноты, давайте сравним вывод и время для определенного интеграла:
Timing[Integrate[(r - c x)/(r^2 + c^2 - (2 r) c x)^(3/2), {x, -1,
1}]]
Out:= {174.52,If[(Re[c/r+r/c]>=2||2+Re[c/r+r/c]<=0||c/r+r/c\[NotElement]Reals)&&((Im[r] Re[c]+Im[c] Re[r]<=0&&((Im[c]+Im[r]) (Re[c]+Re[r])>=0||Im[c]^3 Re[r]+Im[r] Re[c] (Im[r]^2-Re[c]^2+Re[r]^2)>=Im[c] (Im[c] Im[r] Re[c]+Re[r] (Im[r]^2 ... blah blah half a page
Обратите внимание на три минуты вычисления и очень запутанный ответ.
Настоящий пример из моей работы, я заметил это и был озадачен, но забыл об этом после крайнего срока подачи, до сегодняшнего дня, когда я снова столкнулся с той же проблемой.
f = 1/((-I c + k^2/2 - 1/2 (a + k)^2) (I d + k^2/2 -
1/2 (-b + k)^2)) + 1/((I c + k^2/2 - 1/2 (-a + k)^2) (I c + I d +
k^2/2 - 1/2 (-a - b + k)^2)) + 1/((I d + k^2/2 -
1/2 (-b + k)^2) (I c + I d + k^2/2 -
1/2 (-a - b + k)^2)) + 1/((I c + k^2/2 - 1/2 (-a + k)^2) (-I d +
k^2/2 - 1/2 (b + k)^2)) + 1/((-I c + k^2/2 -
1/2 (a + k)^2) (-I c - I d + k^2/2 -
1/2 (a + b + k)^2)) + 1/((-I d + k^2/2 - 1/2 (b + k)^2) (-I c -
I d + k^2/2 - 1/2 (a + b + k)^2))
Когда я пробовал определенный интеграл, я ждал и ждал через несколько часов (правда!) Наконец, я решил попробовать обходной путь, который сработал в кратчайшие сроки:
fl = Integrate[f, k] /. k -> -1 ;
fu = Integrate[f, k] /. k -> 1 ;
F = fu - fl;
F1 = F /. {a -> .01, c -> 0, d -> 1};
Пожалуйста, обратите внимание , что я не говорю об сингулярности, как предлагал один комментарий. Интеграция [1/x, {x, -1, 1}]
почти сразу возвращает Интеграция:: idiv: Integral of 1/x не сходится на {-1,1}. > >
, что является вполне разумным результатом.
-121--979939-
Программист ПЛК и я задаются вопросом, почему используется зарезервированное слово elsif (т.е. без E). Я знаю, что Элсейф или любая другая комбинация не используется в качестве зарезервированных слов. Существует ли история для использования в других языках. Если да, то почему? Просто чтобы сэкономить на наборе причины для меня я, кажется, ошибаюсь, набирая e, вероятно, 5 раз в день.