11

我正在为学校实施一种算法,但在理解编程中如何表示定积分时遇到了问题。例如,我知道求和方程可以实现为以下示例:
在此处输入图像描述

假设 y=f(x)

if(x==0){
    y=x+1;
}else{
    for(int i = 0; i < n; i++){
        y = y + (x - 1);
    }
}

那么我将如何表示一个数值积分,例如:
在此处输入图像描述
这里种植的方程可能没有数学意义,但我的目标是在 c# 中为我必须执行的学校编程项目实现类似的方程,在该项目中我必须实现包含的算法积分。我一直在读到有数值方法可以解决定积分,例如辛普森规则;我是否必须使用这样的方法来实现方程,或者积分可以在编程中表示,例如循环或类似的东西?

4

4 回答 4

1

数值积分的主题很大并且可能会变得非常复杂,所以我不会在这个答案中涵盖所有内容。

辛普森规则是一种对频谱的简单和近似(而不是复杂、准确或两者兼有)端进行数值积分的方法。开始研究该主题对您来说不是一个糟糕的选择,因为它非常易于理解和编程。我毫不怀疑你可以用你最喜欢的编程语言直接实现Wikipedia 上提供的公式。

现在,将循环和辛普森规则联系在一起:随着积分限制(在您的示例中为 3 和 20)越来越接近,辛普森规则对积分真实值的近似精度得到提高。因此,您可以采取的一种方法是编写一个循环来计算从 3 到 4、从 4 到 5 的积分,然后将它们全部加起来。集成产生区域,将区域相加会产生(通常)另一个更大的区域。

对于数值积分领域的所有其他专家,是的,我知道还有其他方法,并且许多其他方法“更好”(在许多不同的意义上),而且我知道辛普森规则会遇到一些问题(很多) 功能,但它不是一个糟糕的起点。

于 2012-06-08T12:53:16.357 回答
1

这取决于你想要做什么。如果这是一个特定的实现,您可以简单地整合公式x-1(x^2)/2 - x然后返回最大值减去最小值。

或者,它可以作为为 dx 选择适当步长的估计来实现。

decimal dx=0.1;

if(x==0){  
    y=x+1;  // could just return y=1
}else{  
    decimal tempY=0;
    for(decimal i = 3; i <= 20; i+=dx){  
        tempY += (i - 1);  
    }  
    // Either return tempY as decimal or
    y= Convert.ToInt32(tempY);
}  
于 2012-06-08T12:55:33.087 回答
1

也许我不明白,但你想知道如何计算积分吗?

如果是这样,有很多方法。有关简短介绍,请查看:http ://en.wikipedia.org/wiki/Numerical_integration

从您的示例中,您可以简单地执行以下操作:

int f(int x) {
    if(x == 0) {
       y = x + 1;
    }else{ 
      y = computeIntegral()
    }
    return y
}

computeIntegral()为了计算积分,您必须编写的函数在哪里。

但是我认为您的函数 f(x) 存在问题,因为如果 x 不为零,则 f(x) 仅作为一个值。也许积分边界应该取决于 x ?

最后的评论。如果 x 是浮点数x == 0,则不建议使用,因为浮点数由于舍入截断而没有唯一的二进制表示。

于 2012-06-08T12:49:32.463 回答
0

您不能简单地用循环来表示积分,因为积分是无限和。您必须使用近似方法或修改方程以删除积分符号。第二个方程中的积分应该很容易去除。

于 2012-06-08T12:49:38.110 回答