如何:在 C 语言中通过求积进行数值积分/删除 NaN

计算科学 正交 数字 一体化
2021-12-17 06:11:07

我想解决以下问题(通过求积法) 在此处输入图像描述

我想从 z[0]、tau[0] 到 z[2249]、tau[2249] 获取两个数据数组( z 和 tau )。

由于被积函数在 z=0.9, 1.125 处发散,我需要驯服发散,但首先,我想为我的程序制定简单的方案。

以下是我的数值积分C语言代码

#include <stdio.h>
#include <math.h>

int main(int argc, char **argv){
int Narray;
int k;
Narray = 2250;
double zeta[Narray];
double dzeta = 0.225/Narray;
double tau[Narray];
zeta[0]=0.9;
tau[0]=0;

for (k=1; k<Narray-1 ; k++){
    zeta[k]=zeta[k-1]+dzeta;
    tau[k]=tau[k-1]+dzeta*zeta[k]/sqrt(0.987654*(zeta[k]-0.9)*(9/8-zeta[k]));
    printf("zeta = %lf tau = %lf \n", zeta[k], tau[k]);
    }
return 0;
}

但是,当我在 ubuntu 中编译代码时,结果显示为 NaN...

此外,数据与 Wolframalpha 的计算不同。

(我采样了几个点并与 Wolfram alpha 进行了比较。)

在此处输入图像描述

我想问题出现在 zeta 方程上……我该如何解决这个问题?

1个回答

没有检查其余部分,但 9/8 是一个整数表达式,因此返回一个整数,即 1。尝试 9.0/8.0,并了解为什么这很重要。