Я пытаюсь численно интегрировать произвольную (известную, когда я кодирую) функцию в моей программе
используя методы численного интегрирования. Я использую Python 2.5.2 вместе с пакетом цифровой интеграции SciPy. Чтобы почувствовать это, я решил попробовать интегрировать sin (x) и наблюдал это поведение -
>>> from math import pi
>>> from scipy.integrate import quad
>>> from math import sin
>>> def integrand(x):
... return sin(x)
...
>>> quad(integrand, -pi, pi)
(0.0, 4.3998892617846002e-14)
>>> quad(integrand, 0, 2*pi)
(2.2579473462709165e-16, 4.3998892617846002e-14)
Я считаю это поведение странным, потому что -
1. При обычной интеграции интеграция по полному циклу дает ноль.
2. При численном интегрировании это (1) не обязательно имеет место, потому что вы можете просто
аппроксимируя общую площадь под кривой.
В любом случае, если предположить, что 1 - «Истина», или «2» - «Истина», я считаю, что такое поведение противоречиво. Либо обе интеграции (от -pi до pi и от 0 до 2 * pi) должны возвращать 0.0 (первое значение в кортеже - результат, а второе - ошибка), либо возвращать 2.257 ...
Может кто-нибудь объяснить, почему это происходит? Это действительно несоответствие? Может ли кто-то также сказать мне, если я что-то упускаю из-за численных методов?
В любом случае, в моем последнем приложении я планирую использовать вышеупомянутый метод, чтобы найти длину дуги функции. Если у кого-то есть опыт в этой области, пожалуйста, сообщите мне, как лучше всего это сделать на Python.
Редактировать
Примечание
У меня уже есть первые дифференциальные значения во всех точках диапазона, хранящихся в массиве.
Текущая ошибка допустима.
Конечная нота
Я читал об этом википедию. Как отметил Дмитрий, я буду интегрировать sqrt (1 + diff (f (x), x) ^ 2), чтобы получить длину дуги. Я хотел спросить: есть ли лучшее приближение / лучшие практики (?) / Более быстрый способ сделать это? Если потребуется больше контекста, я выложу его отдельно / опубликую контекст здесь, как вы пожелаете.