Ищем конкретный алгоритм для численного интегрирования

Рассмотрим следующее дифференциальное уравнение
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 ответ

Решение
  1. численное интегрирование всегда возвращает только число

    • если вы не хотите число, а функция вместо
    • тогда вы не можете использовать числовую интеграцию для этой задачи напрямую
  2. Полиномиальный подход

    • Вы можете использовать любой метод аппроксимации / интерполяции, чтобы получить полином, представляющий f(x)
    • затем интегрировать как стандартный многочлен (просто изменить показатель степени и константу умножения)
    • это не подходит для трансцендентных, периодических или сложных функций
    • Наиболее распространенными подходами является использование рядов Л'Грейна или Тейлора.
    • для обоих вам нужен парсер, способный возвращать значение f(x) для любого данного x
  3. алгебраическая интеграция

    • это не разрешимо для любого 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 и для функции как набор синусоидальных волн
Другие вопросы по тегам