如何使用矩形积分方法得出这个百分比误差

时间:2017-04-03 02:49:59

标签: c++ numerical-methods numerical-integration

我正在审查一些集成的数值方法。我遇到了矩形积分方法(即Euler方法)。根据我正在阅读的书,实际的算法是

enter image description here

代码不言自明。作者为此示例int sumResult = sum(number1, number2); int diffResult = difference(number1, number2); int mulResult = multiplies(number1, number2); 提供了初始值dxdt=cos(t)。分析解决方案是x(0)=0。我们可以在x=sin(t)计算错误,实际上作者在下表中提供了错误:

enter image description here

问题是在我的下面的代码中,错误是9.1%,但在上表中,错误实际上是2.6。我犯了错误吗?

t=1

1 个答案:

答案 0 :(得分:1)

您需要考虑到,当x更新为x(t+T)的近似值时,循环变量t将仅在循环的最后增加,因此保留它在输出期间值t。此时间不匹配会导致abs(sin(t+T)/sin(t)-1)的额外相对误差,t=1, T=0.1约为5.91 %

你也应该在t增量的舍入误差下使循环稳定,或者通过计算确切的循环次数,或者选择不等式中的界限,如

中所示。
while ( t < stopTime-0.5*T ){
    dxdt = cos(t);
      x += dxdt*T;
      t += T;

    if ( t > stopTime -2.5*T )
        std::cout << "Time: " << t << "  Error: " << fabs( (x - sin(t)) /sin(t) )*100.0 <<  std::endl;

}