gpt4 book ai didi

c++ - 如何用矩形积分法得出这个百分比误差

转载 作者:行者123 更新时间:2023-11-30 05:15:14 31 4
gpt4 key购买 nike

我正在复习一些数值积分方法。我遇到了矩形积分法(即欧拉法)。根据我正在阅读的书,实际算法是

enter image description here

代码是不言自明的。作者为这个例子 dxdt=cos(t) 提供了一个初始值 x(0)=0。解析解是x=sin(t)。我们可以在 t=1 处计算误差,实际上作者在下表中提供了它:

enter image description here

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

#include <iostream>
#include <cmath>

int main()
{
double x(0.0), dxdt, t(0.0), T(0.1), stopTime(1.0);

for ( ; t <= stopTime; t += T ){
dxdt = cos(t);
x += dxdt*T;

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

return 0;
}

最佳答案

您需要考虑到当 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;

}

关于c++ - 如何用矩形积分法得出这个百分比误差,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43175837/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com