【问题标题】:Having problems implementing mathematical equations in programming在编程中实现数学方程时遇到问题
【发布时间】:2012-06-08 12:26:16
【问题描述】:

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

假设 y=f(x)

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

然后我将如何表示数值积分,例如:

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

【问题讨论】:

  • 那么,您想要一个公式解析器吗?或者您想学习将数学公式转换为代码?
  • 我想把数学公式改成代码
  • 欢迎编程!如下所述,您不能拥有无限的总和。您必须考虑要采取哪些步骤来解决问题并编写相关代码。
  • 我真的不敢相信这个问题是+7。作为一名工程师,我过去一直在做这些事情来自动化工程流程。我不明白有什么大不了的。这里没有魔法。
  • @DanAndrews 阅读加一的实际含义。显示努力?是的,我会说,第一个问题太介意了!有用?你自己这么说,你必须一直这样做,所以一定是一个有用的领域。清除?是的。那么为什么不 +1 呢?

标签: c# algorithm math integral


【解决方案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);
}  

【讨论】:

    【解决方案2】:

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

    如果是这样,有很多方法。有关简短介绍,请查看: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 不推荐,因为浮点数由于舍入截断而没有唯一的二进制表示。

    【讨论】:

    • 我知道这个等式没有意义,我在 Word 中只敲了两张图片,以大致了解我想要做什么,但我的目标是找出如何表示积分不一定是代码中的积分,但据我了解,如果我没有误解你在说什么,我将不得不使用例如数值方法来计算积分
    • IEEE f-p 标准要求 +0 和 -0 比较相等,因此它们具有不同表示的事实不会使 x==0.0 成为无效(或麻烦)的操作。这与“舍入截断”无关
    • @HighPerformanceMark 对x == 0 来说没问题,但更一般地说,将两个浮点数与== 进行比较是否有意义?
    【解决方案3】:

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

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

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

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

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-06-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-12-28
        • 2017-05-25
        • 2015-03-14
        相关资源
        最近更新 更多