2017-07-19 14 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 
}; 

しかし、私はそれを実行しようとするたびに、私は、セグメンテーションエラーメッセージが表示されます。 行列の要素を間違って割り当てているからだと思います。 誰かが私を助けることができますか?

実行中のスクリプト。 Jyどちらも今までに割り当てられているので、

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()'を使うのはまったく正統性がないので、サポートされているプラ​​ットフォームは分かりません。それはあなたの問題の中で最も少なくなるかもしれません。 '** jacobian(...);'行が何をすると思いますか?これは配列の0,0要素を使いますが、コンパイラはそれを最適化するかもしれません。 –

答えて

1

y[k]またはJ[i][j]が大きな問題となっているに値を格納し、コードはコンパイルされませんが、とにかく未定義の動作を持っているでしょう。