寻找特定的数值积分算法
Looking for a particular algorithm for numerical integration
考虑以下微分方程
f(x) = g'(x)
我有一个构建代码,它为变量 x
输出函数 f(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
数值积分总是return只是一个数字
- 如果您不想要数字而是使用函数
- 那么你不能使用数值积分来完成这个任务直接
多项式方法
- 您可以使用任何 approximation/interpolation 技术来获得表示
f(x)
的多项式
- 然后积分为标准多项式(只需改变指数和乘法常数)
- 这不适用于超越函数、周期函数或复形函数
- 最常见的方法是使用 L'Grange 或泰勒级数
- 对于两者,您需要一个解析器能够 returning 任何给定
x
的 f(x)
值
代数积分
- 这对任何
f(x)
都无法解决,因为我们不知道如何整合一切
- 因此您需要编写所有集成规则
- 喜欢单方、替换、Z 或 L'Place 变换
- 并在 string/symbol 范式
中编写求解器
- 那是巨大的工作量
- 可能有库或 dll 可以做到这一点
- 来自 Derive 或 Matlab 等程序...
[edit1] 因为函数 f(x)
只是形式
中的 table
double f[][2]={ x1,f(x1),x2,f(x2),...xn,f(xn) };
- 您可以在间隔
<0,x>
为 g(x)=Integral(f(x))
创建相同的 table
所以:
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)
...
这只是一个 table 所以如果你想要实际的功能,你需要通过 L'Grange 或任何其他插值将其转换为多项式...
- 你也可以使用 DFFT 和作为正弦波集的函数
考虑以下微分方程
f(x) = g'(x)
我有一个构建代码,它为变量 x
输出函数 f(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
数值积分总是return只是一个数字
- 如果您不想要数字而是使用函数
- 那么你不能使用数值积分来完成这个任务直接
多项式方法
- 您可以使用任何 approximation/interpolation 技术来获得表示
f(x)
的多项式
- 然后积分为标准多项式(只需改变指数和乘法常数)
- 这不适用于超越函数、周期函数或复形函数
- 最常见的方法是使用 L'Grange 或泰勒级数
- 对于两者,您需要一个解析器能够 returning 任何给定
x
的
f(x)
值- 您可以使用任何 approximation/interpolation 技术来获得表示
代数积分
- 这对任何
f(x)
都无法解决,因为我们不知道如何整合一切 - 因此您需要编写所有集成规则
- 喜欢单方、替换、Z 或 L'Place 变换
- 并在 string/symbol 范式 中编写求解器
- 那是巨大的工作量
- 可能有库或 dll 可以做到这一点
- 来自 Derive 或 Matlab 等程序...
- 这对任何
[edit1] 因为函数 f(x)
只是形式
double f[][2]={ x1,f(x1),x2,f(x2),...xn,f(xn) };
- 您可以在间隔
<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) ...
这只是一个 table 所以如果你想要实际的功能,你需要通过 L'Grange 或任何其他插值将其转换为多项式...
- 你也可以使用 DFFT 和作为正弦波集的函数
g(x)=Integral(f(x))
创建相同的 table