这就是我现在正在做的事情:
double fb0(const double *x, const double *par){ // B0'
return -par[0]+(1-Cxr(0,2)*par[1])*x[0]+Cxr(0,2)*par[1]*x[0];
}
double fb1(const double *x, const double *par){ // B1'
return -par[0]+(1-Cxr(1,2)*par[1])*x[1]+Cxr(1,2)*par[1]*x[1];
}
double fb2(const double *x, const double *par){ // B2'
return -par[0]+(1-Cxr(2,2)*par[1])*x[2]+Cxr(3,2)*par[1]*x[3];
}
double fb3(const double *x, const double *par){ // B3'
return -par[0]+(1-Cxr(3,2)*par[1])*x[3]+Cxr(4,2)*par[1]*x[4];
}
double fb4(const double *x, const double *par){ // B4'
return -par[0]+(1-Cxr(4,2)*par[1])*x[4]+Cxr(5,2)*par[1]*x[5];
}
...
Run Code Online (Sandbox Code Playgroud)
一直持续到fb20。然后我调用我的void main(){}. 我想做的是在我的之前有这样的事情void main(){}:
for(int i=0;i<20;i++){
double fb[i](const double *x, const double *par){return -par[0]+(1-Cxr(i,2)*par[1])*x[i]+Cxr(i+1,2)*par[1]*x[i+1];} …Run Code Online (Sandbox Code Playgroud) 我正在使用 ROOT Cern 来求解多变量非线性方程组。对于某些问题,我有 4 个函数和 4 个变量。然而,对于其他人,我需要 20 个函数和 20 个变量。我使用一个名为“WrappedParamFunction”的类来包装函数,然后将包装的函数添加到“GSLMultiRootFinder”来解决它们。该函数是这样包装的:
ROOT::Math::WrappedParamFunction<> g0(&f0, "number of variables", "number of parameters");
Run Code Online (Sandbox Code Playgroud)
因此,我需要在我的void main(){}代码部分之前声明 f0...fi 函数。我以这种方式声明函数:
double f0(const double *x, const double *par){return -par[0]+y[0]*par[1];}
double f1(const double *x, const double *par){return -par[1]+y[1]*par[2];}
.
.
Run Code Online (Sandbox Code Playgroud)
有没有办法在循环内创建这些函数并将它们堆叠在数组中?像这样的东西:
double (*f[20])(const double *x, const double *par);
for(int i=0;i<20;i++){
f[i]= -par[i]+x[i]*par[i+1];
}
Run Code Online (Sandbox Code Playgroud)
这样稍后我就可以用这种方式包装函数:
ROOT::Math::WrappedParamFunction<> g0(f[0], "number of variables", "number of parameters");
Run Code Online (Sandbox Code Playgroud)