在c#中求点的数值积分

问题描述 投票:0回答:1

我在c#中有一些点(不是定函数),我需要对它们进行数值积分(最好是梯形)。有没有什么功能可以做到这一点?

我看到Math.Net的OnClosedInterval,但它需要明确的功能。 (注意:可以在点之间创建一个插值作为函数并将其提供给 OnClosedInterval 但我需要知道是否有任何库可以直接进行数值积分。)

c# numerical-integration
1个回答
6
投票

有这样的事吗? 您在 x/y 曲线上采样了点,并希望使用第一个点和最后一个点之间的梯形规则计算曲线下的积分。

//assuming Point has x and y component, and array is sorted according to x
Point[] points = ...;

float integral = 0;
for(int i = 1; i<points.length; i++)
    integral += (points[i].y + points[i-1].y) / 2 * (points[i].x - points[i-1].x);

当然你也可以在你的点之间编写一个线性插值函数,然后给它Math.Net来积分它。但这会非常低效,因为它会盲目地对您的函数进行采样并尝试找到有意义的样本点,而这些样本点只不过是您的点。因此,通过自己进行此(非常简单)积分,您可以轻松受益于您有关线性插值函数的知识。

© www.soinside.com 2019 - 2024. All rights reserved.