Численное интегрирование функции, известной только по точкам данных — предпочтительнее AS3

Есть ли какая-либо библиотека или функция с открытым исходным кодом, которые аппроксимируют площадь под линией, которая описывается некоторыми ее значениями, взятыми через неравные интервалы?

Предпочтительнее использовать Action Script, но Java также может работать нормально.


person Marsellus Wallace    schedule 13.10.2011    source источник


Ответы (1)


Вы можете использовать математическую библиотеку as3mathlib. Вот соответствующий класс:

http://code.google.com/p/as3mathlib/source/browse/trunk/src/com/vizsage/as3mathlib/math/calc/Integral.as

Он включает в себя наиболее распространенные методы интегральной аппроксимации.

Изменить для получения дополнительных пояснений (на основе комментариев ниже):

Используйте значения отметки времени для каждой даты; преобразуйте во что-либо еще, только если вам нужно отобразить его пользователю, и сделайте это в самом конце.

Будем надеяться, что среди различных различий между каждым набором смежных временных меток есть стандартный наибольший общий делитель (GCD). (Если нет, вам нужно будет сначала вычислить это.) Другими словами, мы надеемся, что каждая временная метка отличается на количество целых дней. Если это так, НОД составляет 1 день. Если это не так, вам придется вычислять, чему равен этот НОД на лету.

Затем используйте значение GCD в сочетании с дельтой между первой и последней отметками времени, чтобы определить n, количество разделов. Затем в f (ваша функция, которую нужно интегрировать) определите, соответствует ли переданный x определенной метке времени. Если это так, верните numeric_value, связанный с этой меткой времени. Если нет, интерполируйте между numeric_values ближайших двух определенных временных меток и верните это.

person N Rohler    schedule 13.10.2011
comment
Спасибо! Все методы аппроксимации требуют ввода Function. Я не совсем знаком с этим классом, но я не уверен, можно ли создать Function с учетом ряда значений. Я видел такую ​​реализацию: var f:Function = function(x:Number):Number { return 1.0/x; }, но я не уверен, как адаптировать ее для удовлетворения моих потребностей. Есть предположения? - person Marsellus Wallace; 14.10.2011
comment
Как выглядит ваш ряд значений? Это список значений через равные промежутки времени или что-то еще? - person N Rohler; 14.10.2011
comment
У меня есть коллекция ArrayCollection, которая сопоставляет string date с numeric value. Интервалы (временные метки) не регулярны, а упорядочены. Спасибо за помощь! - person Marsellus Wallace; 14.10.2011
comment
Простейшей функцией будет найти интервал, вернуть numeric_value, соответствующий левому концу интервала, чтобы получить лучшую функцию, рассмотрите интерполяцию между левым и правым значениями. - person Alexei Levenkov; 14.10.2011
comment
@Gevorg: Подробное объяснение добавлено выше. - person N Rohler; 14.10.2011