我正在嘗試計算給定方程的雅可比矩陣(數值,在給定點)。現在,我事先不知道方程的維數,所以我不能做類似的事情
static double f(double x1, x2)
{
return x1 * x1 - 2 * x1 * x2;
}
所以相反,我將輸入值作為陣列獲取
static double f(double xArray[])
{
return xArray[0] * xArray[0] - 2 * xArray[1] * xArray[0];
}
void jacobian(double xArray[], double jacob_matrix, size_t size,
double f(double xArray[], size_t))
{
// calculations
}
但是,當我嘗試從mainlike呼叫該函式時
int main(void)
{
double x_input[4] = {1., 1., 3., 4.};
double jacob_matrix[4];
jacobian(x_input, jacob_matrix, 4, f(x_input, 4));
return 0;
}
我incompatible type for argument 4 of 'jacobian'想這與我的陣列被轉換為指標有關,但我不知道如何解決這個問題。
uj5u.com熱心網友回復:
您需要將函式指標傳遞給f,而不是呼叫的結果f。嘗試:
jacobian(x_input, jacob_matrix, 4, f);
uj5u.com熱心網友回復:
對于函式簽名:
void jacobian(double xArray[], double jacob_matrix, size_t size,
double f(double xArray[], size_t))
對于第二個引數,如果你要傳遞一個陣列,你需要引數是一個指標,double* jacob_matrix或者double jacob_matrix[].
對于第 4 個引數,傳遞的函式引數應與呼叫方簽名匹配,因此在您的情況下,您傳遞的是一個型別為 的函式double (*)(double *),但呼叫方需要一個型別為 的函式double (*)(double *, size_t),因此應更改其中一個以匹配,或者添加被呼叫函式的第二個引數,或洗掉呼叫者函式簽名的第二個引數。
#include <stdio.h>
static double f(double xArray[])
{
return xArray[0] * xArray[0] - 2 * xArray[1] * xArray[0];
}
void jacobian(double xArray[], double* jacob_matrix, size_t size,
double f(double xArray[]))
{
printf("%f", f(xArray)); // for example
}
int main(void)
{
double x_input[4] = {1., 1., 3., 4.};
double jacob_matrix[4];
jacobian(x_input, jacob_matrix, 4, f);
return 0;
}
請注意,我的方法只解決代碼正確性,而不是數學部分,即雅可比計算。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/402621.html
標籤:
上一篇:【2021個人年度報告】
