この関数を最小化する方法のコードを教えてください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
:)
(最小許容量を追加しながら最大許容量を差し引くだけです)