c - 矩阵分配

标签 c matrix

我正在尝试编写一个函数,该函数的结果应该是一个矩阵。 函数如下所示:

double **jacobian(double *Xn, double *Clvi, double *c, double *Vinf,
                  int *Np, double *mu, double *dx) {
    /*Calculating the Fn values*/

    int position = *Np / 2;
    int k;
    double *y;
    double **J;

    double *Gama = malloc(position * sizeof(double)); 
    double *Dalpha = malloc(position * sizeof(double));

    memcpy(Gama, Xn, position * sizeof(Gama));
    memcpy(Dalpha, Xn + position, position * sizeof(Gama)); 

    for (k = 1; k <= (position - 2); k++) {
        y[k] = Dalpha[k] - Clvi[k] / (2 * pi) + Gama[k] / (pi * *Vinf * *c) -
               *mu * (Dalpha[k - 1] - 2 * Dalpha[k] + Dalpha[k + 1]); // n values listed as F1, F2,...Fn  - rows
    }

    int i;
    int j;

    //Gamma values
    for (i = 1; i <= (position - 2); i++) {
        for (j = 1; j < position - 2; j++) {
            if (i == j) {
                J[i][j] = ((Dalpha[j] - Clvi[j] / (2 * pi) + 
                            (Gama[j] + *dx) / (pi * *Vinf * *c) -
                             *mu * (Dalpha[j - 1] - 2 * Dalpha[j] + Dalpha[j + 1])) - y[i]) / (*dx);
            } else {
                J[i][j] = 0;
            }
        }
    }
    for (j = position; j < *Np; j++) {  
        if (abs(i - j) > 3) {
            J[i][j] = 0;
        } else {
            J[i][j] = (((Dalpha[j] + *dx) -
                        Clvi[j] / (2 * pi) + Gama[j] / (pi * *Vinf * *c) - 
                        *mu * (Dalpha[j - 1] - 2 * (Dalpha[j] + *dx) + 
                               Dalpha[j + 1])) - y[i]) / (*dx);

        }
    }
}

return J
};

但是,每次我尝试运行它时,我都会收到段错误消息。 我想这是因为我错误地分配了矩阵元素。 有人可以帮助我吗?

运行脚本。

double main() {
    double Xn[12] = {1.0,2.0,3.0,4.0,5.0,6.0,0.1,0.2,0.3,0.4,0.5,0.6};
    double Clvi[6] = {0.2,0.3,0.35,0.4,0.5,0.6};
    double alpha[6] = {1.0,2.0,3.0,4.0,5.0,6.0};
    double c = 1.0;
    double Vinf = 300.0;
    double mu = 0.2;
    int Np1 = 12;
    double dx = 0.1;

    **jacobian(Xn, Clvi, &c, &Vinf, &Np1, &mu, &dx);
}

最佳答案

代码无法编译,但无论如何它都会有未定义的行为,因为 Jy 都没有分配,将值存储到 y[k] J[i][j] 是主要问题。

关于c - 矩阵分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45179401/

相关文章:

c++ - C格式说明符问题

c - 为什么 FreeRTOS 中需要程序集包装器?

matrix - 如何从里程计/tf 数据中获取投影矩阵?

r - 如何绘制 geom_tile 图

c++ - 一个实例会影响另一个实例,尽管它不应该

c - 当指针指向使用 malloc() 获得的内存位置时,编译器如何处理 CONST 限定符?

C - 更改结构体元素的顺序会导致段错误

c - 使用 regex 在 C 中设置正确的正则表达式时出现问题

javascript - 反转 CSS3 变换矩阵

c# - 模拟海水,需要计算复杂的值