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
};
しかし、私はそれを実行しようとするたびに、私は、セグメンテーションエラーメッセージが表示されます。 行列の要素を間違って割り当てているからだと思います。 誰かが私を助けることができますか?
実行中のスクリプト。 J
もy
どちらも今までに割り当てられているので、
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);
}
そのC++ではないC# – juharr
C#タグは明らかにC#ではないので、削除します。私はそれがCかC++かどうか分からないので、あなたの質問に適切に再タグ付けしてください。 – Rob
'double main()'を使うのはまったく正統性がないので、サポートされているプラットフォームは分かりません。それはあなたの問題の中で最も少なくなるかもしれません。 '** jacobian(...);'行が何をすると思いますか?これは配列の0,0要素を使いますが、コンパイラはそれを最適化するかもしれません。 –