简单矩形法算法题
Simple rectangle method algorithm problem
我被要求写一个矩形法算法来计算函数的估计面积,但是我的讲师发回我的代码并让我更正它,因为结束条件是错误的?
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;
我被要求写一个矩形法算法来计算函数的估计面积,但是我的讲师发回我的代码并让我更正它,因为结束条件是错误的?
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;