Ищем конкретный алгоритм для численного интегрирования
Рассмотрим следующее дифференциальное уравнениеf(x) = g'(x)
У меня есть код сборки, который выплевывает значения функции f(x)
для переменной x
, где x
идет от 0
в very large
,
Теперь я ищу схему, которая будет анализировать эти значения f(x)
чтобы определить g(x)
, У кого-нибудь есть предложения? Основная проблема в том, что если бы я рассчитал g(x) = Integral (f(x) * dx)
тогда я получу только число (то есть площадь под графиком), но мне нужно знать реальную функцию g(x)
,
Я написал этот вопрос здесь: https://math.stackexchange.com/questions/1326854/looking-for-a-particular-algorithm-for-numerical-integration
1 ответ
численное интегрирование всегда возвращает только число
- если вы не хотите число, а функция вместо
- тогда вы не можете использовать числовую интеграцию для этой задачи напрямую
Полиномиальный подход
- Вы можете использовать любой метод аппроксимации / интерполяции, чтобы получить полином, представляющий
f(x)
- затем интегрировать как стандартный многочлен (просто изменить показатель степени и константу умножения)
- это не подходит для трансцендентных, периодических или сложных функций
- Наиболее распространенными подходами является использование рядов Л'Грейна или Тейлора.
- для обоих вам нужен парсер, способный возвращать значение
f(x)
для любого данногоx
- Вы можете использовать любой метод аппроксимации / интерполяции, чтобы получить полином, представляющий
алгебраическая интеграция
- это не разрешимо для любого
f(x)
потому что мы не знаем, как интегрировать все - поэтому вам нужно запрограммировать все правила для интеграции
- как per-partes, замены, преобразования Z или L'Place
- и написать решатель в строковой / символической парадигме
- это огромный объем работы
- может быть есть библиотеки или библиотеки, которые могут это сделать
- из таких программ, как Derive или Matlab...
- это не разрешимо для любого
[edit1] как функция f(x)
это просто таблица в форме
double f[][2]={ x1,f(x1),x2,f(x2),...xn,f(xn) };
- Вы можете создать ту же таблицу для
g(x)=Integral(f(x))
с интервалом<0,x>
так:
g(x1)=f(x1)*(x1-0) g(x2)=f(x1)*(x1-0)+f(x2)*(x2-x1) g(x3)=f(x1)*(x1-0)+f(x2)*(x2-x1)+f(x3)*(x3-x2) ...
это просто таблица, поэтому, если вам нужна фактическая функция, вам нужно преобразовать ее в полином через L'Grange или любую другую интерполяцию...
- Вы также можете использовать DFFT и для функции как набор синусоидальных волн