gpt4 book ai didi

c - 如何在 C 语言中对程序中正在计算的变量进行数值积分作为指针(使用例如梯形规则)

转载 作者:太空宇宙 更新时间:2023-11-04 04:05:32 25 4
gpt4 key购买 nike

我有一个代码,不是我做的。在这个复杂的代码中,应用了许多规则来计算数量 d(x)。在代码中使用了一个指针来计算它。

我想计算一个积分,比如: W= Int_0 ^L d(x) dx ?

我这样做:

#define DX 0.003
void WORK(double *d, double *W)
{
double INTE5=0.0;
int N_X_POINTS=333;
double h=((d[N_X_POINTS]-d[0])/N_X_POINTS);
W[0]=W[0]+((h/2)*(d[1]+2.0*d[0]+d[N_X_POINTS-1])); /*BC*/
for (i=1;i<N_X_POINTS-1;i++)
{
W[i]=W[i]+((h/2)*(d[0]+2*d[i]+d[N_X_POINTS]))*DX;
INTE5+=W[i];
}
W[N_X_POINTS-1]=W[N_X_POINTS-1]+((h/2)*(d[0]+2.0*d[N_X_POINTS-1]+d[N_X_POINTS-2])); /*BC*/
}

我收到“段错误”。我想知道我是否正确地将 W 计算为指针,或者应该将其声明为简单的 double ?我猜这是段错误。

另外一点,我是否正确使用了梯形法则?

任何帮助/提示,​​将不胜感激。

路易斯

最佳答案

我不知道该代码从何而来,但它非常丑陋,并且有一些硬编码限制(333 点和递增 0.003)。要使用它,您需要正确地“采样”您的函数并生成对 (x, f(x))...

您的问题可能更清晰的解决方案是 here .

让我们考虑一下您的功能并让我们假设它可以工作(我相信它不会,这是一个非常晦涩的代码......;例如,当您集成一个功能时,您期望一个数字作为结果;这个数字在哪里?也许INTE5?它没有被归还……如果是这样,为什么最后更新 W 数组?它没用,或者也许我们对 W 有一些有意义的东西?)。你会如何使用它?

原型(prototype)

  void WORK(double *d, double *W);

表示 WORK 需要两个指针。这些指针必须是什么取决于代码;看一下它表明您确实需要两个数组,每个数组都有 N_X_POINTS 个元素。代码从数组 W 读取和写入,并且只从 d 读取。 N_X_POINTS int 是 333,所以你需要传递给至少 333 个 double 的函数数组:

   double d[333];
double W[333];

然后你必须正确地填写它们。我认为你需要用 (x, f(x)) 填充它们,用适当的步骤对函数进行采样。但这当然没有太大意义。已经说过代码是晦涩的(现在我不想尝试逆向工程编码器的意图......)。

无论如何,如果您使用 WORK(d, W) 调用它,您将不会遇到段错误,因为数组足够大。结果将是错误的,但这更难追踪(再次抱歉,没有“逆向工程”)。

最后的注释(也来自评论):如果您有 double a[N],则 a 的类型为 double *

关于c - 如何在 C 语言中对程序中正在计算的变量进行数值积分作为指针(使用例如梯形规则),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6485976/

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