gpt4 book ai didi

C++梯形积分函数在不应该返回负数时返回

转载 作者:行者123 更新时间:2023-12-02 10:24:47 24 4
gpt4 key购买 nike

我正在使用以下用 C++ 编写的函数,其目的是获取一个数据数组 (y) 相对于另一个 (x) 的积分

// Define function to perform numerical integration by the trapezoidal rule
double trapz (double xptr[], double yptr[], int Npoints)
{
// The trapzDiagFile object and associated output file are how I monitor what data the for loop actually sees.
std::ofstream trapzDiagFile;
trapzDiagFile.open("trapzDiagFile.txt",std::ofstream::out | std::ofstream::trunc);

double buffer = 0.0;
for (int n = 0; n < (Npoints - 1); n++)
{
buffer += 0.5 * (yptr[n+1] + yptr[n]) * (xptr[n+1] - xptr[n]);
trapzDiagFile << xptr[n] << "," << yptr[n] << std::endl;
}

trapzDiagFile.close();
return buffer;
}

我在 x 包含 100 个从 0 到 1 的均匀间隔点和 y = x^2 的简单情况下验证了这个函数。 ,它返回 0.33334 , 正如它应该。
但是当我将它用于不同的数据集时,它会返回 -3.431 ,这完全没有意义。如果您查看随附的图像文件,我所指的积分是垂直虚线之间曲线下的面积。
这绝对是一个正数。
此外,我在 MATLAB 中对同一组数字使用了 native trapz 命令,结果返回 1.4376。
另外,我把上面的C++ trapz函数翻译成MATLAB,尽可能的逐行,再次得到 1.4376 .
我觉得这里没有看到与 C++ 相关的东西。如果相关,我正在使用 minGW-w64。

为这篇文章的含糊之处道歉。如果我更多地了解我所看到的问题类型,那么简明扼要会更容易。

trapz 函数(我自制的 C++ 版本)返回 -3.431 的数据集图:

enter image description here

最佳答案

请检查 xptr[Npoints - 1] 的值。它可能小于 xptr[Npoints - 2],并且未包含在您输出的值中。

关于C++梯形积分函数在不应该返回负数时返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45627093/

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