この関数を最小化する方法のコードを教えてくださいMATLAB
Minimize Ra = (0.237 − 0.00175v + 8.693f − 0.00159z)
subjected to 124.53 ≤ v ≤ 167.03
0.025 ≤ f ≤ 0.083
6.2 ≤ z ≤ 14.8
この関数を最小化する方法のコードを教えてくださいMATLAB
Minimize Ra = (0.237 − 0.00175v + 8.693f − 0.00159z)
subjected to 124.53 ≤ v ≤ 167.03
0.025 ≤ f ≤ 0.083
6.2 ≤ z ≤ 14.8
を使用できますfmincon。v = x(1)、f = x(2)、および としましょうz = x(3)。これらはすべてベクトルになります。まず、関数のハンドルを次のように定義します。
h = @(x)(0.237 - − 0.00175*x(1) + 8.693*x(2) − 0.00159*x(3))
フォームで制約を定義する必要がありますA*x ≤ b。あなたの例では、制約を両方とも関数よりも小さいものとして書き直します。
v ≤ 167.03
-v ≤ -124.53
f ≤ 0.083
-f ≤ -0.025
z ≤ 14.8
-z ≤ -6.2
これで、上記を行列形式に変換できますA*x ≤ b。
A = [1, 0, 0;
-1, 0, 0;
0, 1, 0;
0, -1, 0;
0, 0, 1;
0, 0, -1]
b = [167.03; -124.53; 0.083; -0.025; 14.8; -6.2]
x0最後に、変数の初期推定を定義し、次のようxに呼び出して最適化しますfmincon。
xOpt = fmincon(h, x0, A, b)
初期推定は、制約内にある任意の値にすることができるため、機能するx0 = [167; 0.08; 14]可能性があります。
EDIT :下限と上限のベクトルをlb = [124.53; 0.025; 6.2]andとして定義し、次を使用しub = [167.03; 0.083; 14.8]て呼び出すこともできます。fmincon
xOpt = fmincon(h, x0, [], [], [], [], lb, ub)
注: 最初の推測をランダム化したい場合は、lbとubベクトルを使用して で行うことができますx0 = lb + (ub - lb)*rand()。
これは、この問題に必要なツールよりも少し強力なツールですが、男に釣りを教えてください.
とても簡単です。
>> Min_Ra = 0.237 − 0.00175*167.03 + 8.693*0.025 − 0.00159*14.8
ans =
0.1384905
:)
(最小許容量を追加しながら最大許容量を差し引くだけです)