gpt4 book ai didi

c - C 中的 Neville 算法

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

我正在尝试实现 Neville's algorithm .

我有 32 个点代表 sin(x) 函数:

int N=32,Nx=10000;
step = 1.0 / (N-1);
for (ii = 0; ii < N; ii++){
px[ii] = ii*step*PI;
py[ii] = sin(px[ii]);}

我有一个用于计算多项式的输入 vector :

for (ii = 0; ii < Nx; ii++)
x[ii] = 2.0 * rand() / (double) RAND_MAX; // 0 < x[ii] <= 2

这是我的 Neville 积木:

double y[Nx];
for (kk=0;kk<Nx;kk++){// for each x[]'s element
for (jj=1;jj<N-1;jj++){
for (ii=0;ii<N-1-jj;ii++)
s[ii]=(((px[jj]-x[kk])*py[ii])+((x[kk]-px[ii])*py[ii]))/(px[jj]-px[ii]);
}
y[kk]=s[0];//insert in the output array the value just calculated
}

问题是s[ii],我不确定这个计数是否正确。

最佳答案

对于 Neville 的方法,您需要选择一个 x 值来近似 f(x),这与 x 数组的值不同。我不确定您使用的是哪个 x 值,但据我所知,您可能试图使用 x[] 数组中的所有值。

我不确定您的实现是否需要一维输出数组,但这是一个使用 this algorithm 的示例实现带有二维输出数组。

该示例使用问题 1。 a. 来自同一页面:

int i, j;
int n = 4;
double X; //X will be used to approximate f(X).
double x[n]; //The x values.
double y[n]; //The y or f(x) values.
double Q[n][n]; //The output table.

for (i = 0; i < n; i++)
for (j = 0; j < n; j++)
Q[i][j] = 0.0; //Initializing the Q matrix to 0.

//Hardcoding the x and y values from problem 1. a.
x[0] = 8.1;
x[1] = 8.3;
x[2] = 8.6;
x[3] = 8.7;
y[0] = 16.94410;
y[1] = 17.56492;
y[2] = 18.50515;
y[3] = 18.82091;

X = 8.4; //Want to approximate f(X), or f(8.4).

for (i = 0; i < n; i++)
Q[i][0] = y[i]; //Setting the first column of Q to y[0] through y[3].

//Neville's method.
for (i = 1; i < n; i++) {
for (j = 1; j <= i; j++) {
Q[i][j] = ((X - x[i - j])*(Q[i][j - 1])
- (X - x[i])*(Q[i - 1][j - 1]))/(x[i] - x[i - j]);
}
}

printf("Resultant Q matrix:\n");
for (i = 0; i < n; i++) {
for (j = 0; j < n; j++) {
printf("%9f ", Q[i][j]);
}
printf("\n");
}

答案 f(8.4) 是表格中最右下角的数字 17.877143。这是合理的,因为 f(8.3) = 17.56492f(8.6) = 18.50515,而 17.877143 介于这两个值之间。

关于c - C 中的 Neville 算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14206013/

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