用C语言编程实现Sin(x)/sqrt(x)在0和无穷远之间的梯形规则数值积分
在C编程中,我遇到了一个问题,即如何找到sinx/sqrtx的0到无穷大之间的积分的良好近似值。我试着用梯形法则。在我的代码中,我还希望用户输入一个精度值,例如0.001,其中输出值将精确到小数位数。这个代码出了什么问题 包括 包括 包括 int mainvoid { int i,N;//要在循环中交互的整数// 双h,x,y,精度,下限=0.0001,上限=10000,f0,fN; 印刷精度:; 扫描频率%lf,&精度; N=10; 双区域存储,新区域; 做{ 新面积=0.0; areastored=newarea;//areastored是我想要与计算为N个分区的新区域进行比较的区域,以检查新值的精度,看看它是否是更好的近似值// h=上限-下限/N-1; fN=sinupperLim/sqrtupperLim; f0=sinlowerLim/sqrtlowerLim;//在函数中计算的端点// 新面积=新面积+0.5*h*f0+fN; 对于int i=1;i用C语言编程实现Sin(x)/sqrt(x)在0和无穷远之间的梯形规则数值积分,c,integration,numerical-methods,numerical-integration,C,Integration,Numerical Methods,Numerical Integration,在C编程中,我遇到了一个问题,即如何找到sinx/sqrtx的0到无穷大之间的积分的良好近似值。我试着用梯形法则。在我的代码中,我还希望用户输入一个精度值,例如0.001,其中输出值将精确到小数位数。这个代码出了什么问题 包括 包括 包括 int mainvoid { int i,N;//要在循环中交互的整数// 双h,x,y,精度,下限=0.0001,上限=10000,f0,fN; 印刷精度:; 扫描频率%lf,&精度; N=10; 双区域存储,新区域; 做{ 新面积=0.0; areast
} 如果你调试你的程序,你会看到
h = (upperLim - lowerLim)/N-1;
导致N=1250时的h值为负值
这导致了一个无休止的循环
for (x=lowerLim+h; x < upperLim; x+=h) {
如果你调试你的程序,你会看到
h = (upperLim - lowerLim)/N-1;
导致N=1250时的h值为负值
这导致了一个无休止的循环
for (x=lowerLim+h; x < upperLim; x+=h) {
您的代码中至少有两个错误
// ...
newarea = 0.0; // <-- It's initialized here
do {
// ...
h = (upperLim - lowerLim)/N-1; // <-- This doesn't do what you think
// ...
// It's updated, but never reset
newarea = newarea + 0.5*h*(f0 + fN);
// ...
} while ( ... );
您应该移动newarea=0.0;在循环内划线,并修改计算h的公式
还注意到,你有一个固定的上限1000,而对于这种类型的积分,你应该考虑一个增加的上限,或者可能是一个不均匀的网格间距。
在你的代码
中至少有两个错误。// ...
newarea = 0.0; // <-- It's initialized here
do {
// ...
h = (upperLim - lowerLim)/N-1; // <-- This doesn't do what you think
// ...
// It's updated, but never reset
newarea = newarea + 0.5*h*(f0 + fN);
// ...
} while ( ... );
您应该移动newarea=0.0;在循环内划线,并修改计算h的公式
还注意到,你有一个固定的上限1000,而对于这种类型的积分,你应该考虑一个增加的上限,或者可能是一个不均匀的网格间距。
什么使你认为你的代码出了什么问题?@云诺奇我以前使用了一个积分计算器来帮助我计算出我的目标值。程序输出中弹出的值到处都是跳跃式的,而且程序通常不会停止。是什么让你认为你的代码出了问题?@Yunnosch我以前使用过一个积分计算器来帮助我计算出我的目标值。在程序输出中弹出的值到处都是非常不稳定的,而且程序通常不会停止。感谢您的帮助,我希望能够增加上限,而不是保持固定不变。为了实现这一点,你能为我提供进一步的指导吗?也可以更改为x=lowerLim+h;x