2

この関数を最小化する方法のコードを教えてください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
4

3 に答える 3

1

を使用できますfminconv = 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)

注: 最初の推測をランダム化したい場合は、lbubベクトルを使用して で行うことができますx0 = lb + (ub - lb)*rand()

これは、この問題に必要なツールよりも少し強力なツールですが、男に釣りを教えてください.

于 2013-06-12T14:10:16.483 に答える
0

とても簡単です。

>> Min_Ra = 0.237 − 0.00175*167.03 + 8.693*0.025 − 0.00159*14.8

ans = 
    0.1384905

:)

(最小許容量を追加しながら最大許容量を差し引くだけです)

于 2013-06-12T11:55:14.693 に答える