私のアプリケーションライブラリは、最適化ルーチンを呼び出す必要があります。
err = optim(int n, double *x, double *f, void *obj)
次に、ルーチンは目的関数を呼び出して、目的関数の値を要求します。
void obj(int n, double *x, double *f)
optim()は外部ライブラリの一部です。optim()とobj()のシグネチャが修正されました。
この関数obj()
は、単一のオブジェクト「モデル」に含まれるデータにアクセスする必要があります。他のすべての関数は、モデルオブジェクトへのポインタを渡します。したがって、オプティマイザを実行するための呼び出しは次のようになります。
err = doOptimize(model)
doOptimize()
問題を設定して電話しますoptim()
err= optim(model->n, model->x, model->f, model->obj)
問題は、関数が、、、および?以外にobj()
、オブジェクトに存在する変数にアクセスできるかどうかです。関数は、実際の計算を行うためにオブジェクトを必要とする他の関数を呼び出す必要があります。model
n
x
f
obj()
model
updateParms(model);
computeF(model);
obj()
実際のハンドルなしでこれらの呼び出しを行う方法がわかりませんか?次は動作しますか?
updateParms();
computeF();
ありがとう、