2016-04-16 23 views
0

私は目的関数 'fun'と等価制約 'ceq(x)'を持っていますが、これは 'x'(1x2ベクトル)では非線形です。問題は 'ceq'を直接書くことができない、すなわちメインコードで定義されたいくつかの変数を使用しなければならないということです。これは機能コードです。MATLABの制約定義関数に引数を渡すにはどうすればよいですか?

function [c,ceq] = circlecon(x) 
c = (x(1)-1/3)^2 + (x(2)-1/3)^2 - (1/3)^2; 
ceq = []; 

これは、最適な「x」を見つけたいメインコードの一部です。

nonlcon = @circlecon; 
x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon) 

私は「circlecon」関数にメインのコードからいくつかの変数を渡すと「CEQ」を定義するためにそれらを使用したいです。どうやってやるの?さらに情報と明確にするために、このリンクを見てください:Optimisation with non-linear constraints

答えて

0

のようなものを試してみてください:

x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,@(x) nonlcon(x, arg1, arg2) 

どこarg1arg2は余分な引数です。これはMathworksによって十分に文書化されていることに注意してください。

+1

括弧がないため、制約関数が正しく指定されていません。無名関数は '@(x)nonlcon(x、arg1、arg2)'でなければなりません。この[リンクを余分に渡す](http://www.mathworks.com/help/optim/ug/passing-extra-parameters.html)も役に立ちます。 – horchler

+0

@horchler:本当に、私はそれを試すのに便利なMATLABを持っていませんでした。修正してくれてありがとう(固定)。 – Cyb3rFly3r

関連する問題