Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C中的复杂数据类型在算法中产生问题_C_Numbers - Fatal编程技术网

C中的复杂数据类型在算法中产生问题

C中的复杂数据类型在算法中产生问题,c,numbers,C,Numbers,我正在尝试执行一个涉及以下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 comple

我正在尝试执行一个涉及以下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;
}
长双复数*tridiag_thomas(长双复数*a,长双复数*b,长双复数*c,长双复数*f,int N){
长双复数*v;v=(长双复数*)malloc(sizeof(长双复数)*N);
长双复数*y;y=(长双复数*)malloc(sizeof(长双复数)*N);
长双络合物w;
int k;
对于(k=0;k=0;k--){
y[k]=y[k]-v[k]*y[k+1];
}
返回y;
}
我通过这个函数(f)传递一个矩阵,找到y,用y修改f,然后再次通过这个函数传递新的f。我这样做大约1000次。当使用实际值时(并对long double complex->long double进行必要的更改),此函数按预期工作。然而,当以上述形式使用复杂参数时,结果会很快发散到无穷远


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

Ido看到一个问题,它正在泄漏“v”。这让我怀疑您没有遵循更高级别的c风格分配。我们没有上层代码


你什么时候被释放?赋值是否通过所有值循环,还是在执行C++样式分配?请记住,c语言中的分配、赋值和解除分配不是免费的,编译器内置的类型除外。

计算论坛上也有同样的线程。由同一个用户。这个计算做什么?它解一个矩阵方程。对于给定的向量(f)和三对角矩阵(沿对角线和围绕对角线的元素由向量a、b、c定义),它求解向量y,使得矩阵乘以y为f。