該代碼使用辛普森法則來計算X * SIN(X)與(1,2)邊界的積分。我遇到的問題是,它的實際價值非常接近。即使有999次迭代,它仍然沒有達到要求。雖然我有一個單獨的程序,它使用梯形法則來處理同樣的事情,並且它在1000次迭代後恰好達到了這一點。它應該打的一點是「1.440422」辛普森規則錯誤
是什麼應該發生的事情對辛普森的規則?或者我的代碼有問題嗎?
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
double f(double x);
int main()
{
double x,result,y,z,h,s1,s2;
s1 = 0;
s2 = 0;
int i,n;
printf("\nHow many points to you want it evaluated at (odd number)? And what are the bounds? lower bound,upper bound >\n");
scanf("%d %lf,%lf",&n,&y,&z);
h = (z-y)/n;
result = 0;
if(n%2!=0)
{
for(i=0;i<n;i++)
{
if(i%2==0)
{
s1 = s1+f(y+i*h);
}
else
{
s2 = s2+f(y+i*h);
}
}
result = (h/3)*(f(y)+f(z)+4*s2+2*s1);
printf("\nThe value is %lf with %d interations\n",result,i);
}
else
{
printf("\n The number of points has to be odd, try again\n");
}
}
double f(double x)
{
return(x*sin(x));
}
歡迎近似的世界和浮點運算。如果您使用近似公式,則會得到近似結果。這可能是一種僥倖,這個梯形法則最終會以'正確'的正確答案結束。 –
是的,那令我困惑的部分是我認爲辛普森的近似值比梯形誤差更小。但我想這可能只是我正在使用的功能而已。謝謝 – user3908631
在99999次迭代中,我得到了你需要的值'1.440422'。一些函數比其他函數更快地收斂,例如有幾種方法可以計算'pi',但並非全部都有用。 –