gpt4 book ai didi

c - 如何编写平滑给定数组的函数

转载 作者:行者123 更新时间:2023-11-30 16:14:44 24 4
gpt4 key购买 nike

我正在编写一个函数,根据 1:2:1 平滑给定的 n 元素数组,签名为 void smoothData(int n, double data[])下面给出的过滤器。我不应该生成整个新数组并将其复制回原始数组。

si=(d(i−1)+2*di+d(i+1))/4

平滑数组的第一个和最后一个元素应该从以下规则获取,而不是使用 si

s0=(3*d0+d1)/4

s(n−1)=(d(n−2)+3*d(n−1))/4

其中 si 是平滑数组中的第 i 个元素,d 是输入数组。d(n-1) 是原始数组的第 (n-1) 元素等。

我得到的输出为1.250, 2.250, 4.000, 4.000。第三个元素是错误的,应该是3.500

/image/VkJqb.png

#include <stdio.h>

void smoothData(int n, double data[])
{

double s0 = (data[0] * 3 + data[1]) / 4.0;
double sLast = (data[n-2] + data[n-1] * 3) / 4.0;
double si = 0.0;
double di = data[0];
for (int i = 0; i<=n-4; i++) {
si = (di + 2 * data[i+1] + data[i+2])/4.0;
di = data[i+1];
data[i+1] = si;
}
data[0] = s0;
data[n-1] = sLast;
}

int main()
{

double data[] = {1.0, 2.0, 4.0, 4.0};
smoothData(4, data);
printf("Smoothed data: %.3lf", data[0]);
for (int i = 1; i < 4; i++) {
printf(", %.3lf", data[i]);
}
puts("");
}

最佳答案

for (int i = 0; i<=n-4; i++)

这意味着如果 n为 4 时,循环只会执行一次,因为 0 <= 0是真的。因此循环将写入项目 data[i+1] = si;这是第 1 项。然后停止。

稍后您写信给data[0] = s0;这是项目 0 和 data[n-1] = sLast;这是第 3 项。但是您没有在任何地方写入第 2 项,因此它将保持不变。

关于c - 如何编写平滑给定数组的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57447488/

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