c - 简单矩形法算法问题
问题描述
我被要求编写一个矩形方法算法来计算函数的估计面积,但是,我的讲师将我的代码发回并要求我更正它,因为结束条件是错误的?
double prostokaty(double( *f)(double))
{
double krok, p, suma = 0;
krok = (c_do - c_od) / lp;
for (p = c_od + krok; p < c_do; p += krok) {
suma += (*f)(p);
}
return suma * krok;
}
我花了将近两个小时,弄清楚出了什么问题,但我失败了。
解决方案
最好使用c_od + krok/2
矩形的中间而不是右边缘c_od + krok
。
double prostokaty(double( *f)(double)) {
double p, suma = 0;
double krok = (c_do - c_od) / lp;
// for (p = c_od + krok; p < c_do; p += krok) {
for (p = c_od + krok/2; p < c_do; p += krok) {
suma += (*f)(p);
}
return suma * krok;
}
如果lp
是整数类型,最好避免累积增量错误。
double suma = 0;
double krok = (c_do - c_od) / lp;
for (int i = 0; i < lp; i++) {
double p = c_od + (i + 0.5)*krok;
suma += f(p);
}
return suma * krok;
推荐阅读
- php - Laravel json 不返回响应
- r - R Rhansontable - 有条件地在其他表上的颜色特定单元格
- python - 如何格式化 tqdm 进度条以显示每分钟而不是每秒的进度?
- jquery - 我的 jQuery animate() 运行了 2 次,如何解决这个问题?
- macos - 如何让 PDFView 知道 PDF 已在内存中更改,以便可以更新?
- c++ - ROS/移动它!错误:无法识别任何一组可以驱动指定关节的控制器
- javascript - 在一个组件中更新 redux 存储不会反映在另一个组件中
- python - pygame - 如何完成游戏?
- linux - ~/.bashrc 中句点 (.) 的用途是什么
- jenkins - Jenkins 项目到 GitLab 管道