2017-07-19 127 views
1

我想写一个函数,应该有一个矩阵的结果。 功能如下显示:矩阵分配

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); 
} 
+0

C++不是C# – juharr

+0

我正在删除C#标记,因为它显然不是C#。我不确定它是C还是C++,所以请重新标记你的问题 – Rob

+0

使用'double main()'是完全非正统的,我不知道它支持的平台。这可能是你的问题中最少的。你认为'雅克比安(......)'线要做什么?它使用数组中的0,0元素,但编译器可能会优化它。 –

回答

1

的代码无法编译,但它无论如何都会有不确定的操作,因为无论是J也不y是不断分配存储值y[k]J[i][j]是主要问题。