小编Jer*_*ias的帖子

如何在c中的循环内创建函数数组

这就是我现在正在做的事情:

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)

c

1
推荐指数
1
解决办法
48
查看次数

有没有办法在 C++ 循环内创建函数数组

我正在使用 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)

c++ root-framework

1
推荐指数
1
解决办法
187
查看次数

标签 统计

c ×1

c++ ×1

root-framework ×1