2
に2次元配列を解釈 問題は、私の場合はFunc<double[], double> function
あるNonlinearObjectiveFunction
機能テイク引数function
はそれがはのFunc私は非線形制約付き非線形関数を解決するためにアコードの数学を使用しています<double[]>
x =>
x[0] * (Matrix[0, 0] * x[0] + Matrix[1, 0] * x[1] + Matrix[2, 0] * x[2]) +
x[1] * (Matrix[0, 1] * x[0] + Matrix[1, 1] * x[1] + Matrix[2, 1] * x[2]) +
x[2] * (Matrix[0, 2] * x[0] + Matrix[1, 2] * x[1] + Matrix[2, 2] * x[2])
のようなものそれはだということです何とかこれを構築するにはfunction
サイクルを使用していますか?入力行列の次元が変わる可能性があるためです。
class Program
{
static void Main(string[] args)
{
double[,] Matrix = new double[3, 3];
Matrix[0, 0] = 0.00234329;
Matrix[0, 1] = 0.00118878;
Matrix[0, 2] = 0.00152143;
Matrix[1, 0] = 0.00118878;
Matrix[1, 1] = 0.00206312;
Matrix[1, 2] = 0.00124812;
Matrix[2, 0] = 0.00152143;
Matrix[2, 1] = 0.00124812;
Matrix[2, 2] = 0.00194796;
double x1 = 0.0107;
double x2 = -0.00054;
double x3 = -0.0034;
var f = new NonlinearObjectiveFunction(3, x =>
x[0] * (Matrix[0, 0] * x[0] + Matrix[1, 0] * x[1] + Matrix[2, 0] * x[2]) +
x[1] * (Matrix[0, 1] * x[0] + Matrix[1, 1] * x[1] + Matrix[2, 1] * x[2]) +
x[2] * (Matrix[0, 2] * x[0] + Matrix[1, 2] * x[1] + Matrix[2, 2] * x[2])
);
var constraints = new[]
{
new NonlinearConstraint(3, x => x1 * x[0] + x2 * x[1] + x3 * x[2] >= 0.01),
new NonlinearConstraint(3, x=> x[0] + x[1] + x[2]>=1),
new NonlinearConstraint(3, x=> x[0] + x[1] + x[2]<=1),
new NonlinearConstraint(3, x=> x[0]>=0),
new NonlinearConstraint(3, x=> x[1]>=0),
new NonlinearConstraint(3, x=> x[2]>=0)
};
var cobyla = new Cobyla(f, constraints);
bool success = cobyla.Minimize();
double minimum = cobyla.Value;
double[] solution = cobyla.Solution;
}
}
ん「サイクルを使用しては、」特別な何かを意味しますか? (明らかに、過去に多くの人が行ったように、行列乗算をループで書くことができます...私はあなたが別の何かを必要とすると思いますが、それが何であるかは明らかではありません) –