gpt4 book ai didi

C 中的复杂数据类型给算法带来麻烦

转载 作者:行者123 更新时间:2023-11-30 17:25:05 25 4
gpt4 key购买 nike

我正在尝试执行涉及以下 C 函数的计算:

long double complex* tridiag_thomas(long double complex *a, long double complex *b, long double complex *c, long double complex *f, int N) {

long double complex *v; v = (long double complex *)malloc(sizeof(long double complex) * N);
long double complex *y; y = (long double complex *)malloc(sizeof(long double complex) * N);

long double complex w;

int k;

for (k = 0; k < N; k++) {
y[k] = 0;
v[k] = 0;
}
w = a[0];
y[0] = f[0] / w;
for (k = 1; k < N; k++) {
v[k - 1] = c[k - 1] / w;
w = a[k] - b[k] * v[k - 1];
y[k] = (f[k] - b[k] * y[k - 1]) / w;
}
for (k = N - 2; k >= 0; k--) {
y[k] = y[k] - v[k] * y[k + 1];
}
return y;
}

我通过这个函数(f)传递一个矩阵,找到 y,用 y 修改 f,然后再次通过该函数传递新的 f。我这样做了大约 1000 次。当使用实际值时(并对 long double 复数 -> long double 进行必要的更改),此函数按预期工作。然而,当以上述形式与复杂参数一起使用它时,结果很快就会发散到无穷大。

有人能告诉我为什么会这样吗?我对编程并不陌生,但对 C 语言很陌生。

最佳答案

确实发现了泄漏“v”的问题。这让我怀疑你没有遵循上层的c风格分配。我们没有上层代码。

y什么时候被释放?赋值是否循环遍历所有值,或者您是否正在执行 C++ 样式赋值?请记住,除了编译器内置的类型之外,C 中的分配、赋值和释放并不是免费的。

关于C 中的复杂数据类型给算法带来麻烦,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27117518/

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