式エラーの問題を解決するために MATLAB cvx ツールボックスで一般的に使用される置換関数の概要

ヒント: 記事を作成した後、目次を自動的に生成できます。生成方法は、右側のヘルプドキュメントを参照してください。


序文

この記事では、CVX の一般的な置換関数についてまとめます。CVX プログラミングのプロセスでは、多くの式エラーが発生します。通常、プログラミングには問題のあるステートメントはありませんが、CVX ではさまざまなエラーが報告されます。その理由の大部分は、それは、いくつかの独自の特別な関数があり、これらの関数を使用して式を置き換えることで、多くの cvx プログラミング エラーを解決できるということです。

cvx の初心者で、一般的な cvx 構文とプログラミング方法をマスターしたい場合は、この記事を読むことができます:
凸最適化問題を解決するための MATLAB の CVX ツールボックスの基礎知識 - 構文、変数宣言、目的関数、制約、CVX プログラミング エラー、および解決

プログラミング中に予期せぬエラーが多数発生した場合は、CVX エラーが発生した場合に次の記事を読むことができます:
MATLAB cvx エラーの概要、cvx エラー解決、cvx 知識ポイントの概要、cvx プログラミング スキル


1. 基本機能

関数 意味
腹筋(x) 絶対値関数。入力 x の絶対値を返します。
正方形(x) Square 関数は、入力 x の 2 乗、つまり x^2 を返します。
ノルム(x,p) Norm 関数。x の p ノルムを返します。p は 'inf' (無限ノルム) にすることができます。
最大(x,y) x と y の大きい方を返します
min(x,y) x と y の小さい方を返します
exp(x) 指数関数。e の x 乗の値を返します。
ログ(x) 自然対数関数。x の自然対数値 (底 e) を返します。
合計(x) Sum 関数は、ベクトル x のすべての要素の合計を返します。
プロダクト(x) Product 関数は、ベクトル x 内のすべての要素の積を返します。

2. 先進的な機能

このセクションで要約した関数は、あまり一般的ではありませんが、便利で見落とされやすい関数です。これらの機能を使用すると、多くの問題を解決できます。

1.inv_pos() - 正の数の逆数

inv_pos(x) は、正の数 x の逆数、つまり 1/x を求めるために使用されるアトミック関数です。ただし、この関数を定義するときは、パラメーター x が正の数である必要があることを示すプレフィックス「inv_pos」を追加する必要があります。追加しないと、未定義の結果が生成されます。

最適化問題では、多くの場合、行列またはベクトルの逆行列を解くことが必要になります。ただし、非正定行列または特異行列が含まれる場合、逆演算は実行できません。したがって、行列またはベクトルが正定値であることを確認するには、CVX で inv_pos 関数を使用します。この関数は、変数の正定値を自動的に判断し、その逆関数を解きます。inv_pos 関数は、変数が正定値でない場合、inf (無限大) または NaN (非数値) を返します。

コードは次のとおりです (例)。
1/x が最小になるように変数 x を解く必要があり、x は 0.5 以上である必要があります。

cvx_begin
    variable x
    minimize(inv_pos(x) - 1)
    subject to
        x >= 0.5;
cvx_end

2.norm_inv_pos(x, p) - 逆ノルム関数

Norm_inv_pos(x, p) は、変数 x の p ノルムの逆数を計算するアトミック関数です。ここで、p は任意の実数ですが、0 より大きい必要があります。この関数は正の数を返します。

この関数は、Lp ノルムのプログラミング問題を解くためによく使用されます。Lp ノルムの逆関数は、解をより高いスパース性に進めるためのペナルティ項として使用されます。

コードは次のとおりです(例)。

cvx_begin
    variable x(n);
    minimize( norm(x, p) );
    subject to
        norm_inv_pos(x, q) <= t;
cvx_end

ここで、x は列ベクトル、p と q は正の数、t は別の正の数です。最適化問題は、x の Lq ノルムの逆数が t 以下であることを満たしながら、変数 x の Lp ノルムを最小化します。この制約は、x を疎方向にどこまで押し込めるかを制限します。


3.pow_p(x, p) - べき乗関数

pow_p(x, p) は、変数 x の p 乗を計算するために使用されるアトミック関数です。ここで、p には任意の実数を指定できますが、1 以上である必要があります。この関数は数値を返します。

この関数は最適化問題でよく使用されます。目的関数または制約に変数に関するべき乗関数が含まれる場合、pow_p 関数を使用して式を簡素化できます。

コードは次のとおりです (例):
スパース エネルギー モデルに従って最適な信号推定値を計算します。

cvx_begin
    variable x(n);
    minimize( norm(y - A*x) + lambda*pow_p(norm(x,1),q) );
cvx_end

このうち、yは観測ベクトル、Aは観測行列、xは取得対象の信号ベクトル、nは信号ベクトルの長さ、lambdaとqはハイパーパラメータである。最適化問題では、スパース性を捉えるために L1 ノルムを正則化項として使用します。この例では、pow_p 関数を使用して、x の L1 ノルムの q 乗を計算します。

4.rel_entr(x, y) - KL 発散の一部

rel_entr(x, y) は、KL 発散の一部 x log(x/y) を表すアトミック関数です。このうち、xとyは同じ大きさ、同じ形であり、要素ごとに計算が行われます。これは主に、確率または分布条件を満たす必要があるいくつかの最適化問題で使用されます。

rel_entr 関数の最初のパラメータ x は、任意の非負の実数または実数ベクトル (または行列) にすることができ、2 番目のパラメータ y も非負の実数または実数ベクトル (または行列) にすることができます。 y の 0 の項目になります。x と y が等しい場合、rel_entr(x, y) の値は 0 になります。CVX 問題では、rel_entr(x, y) は通常、最大エントロピー問題、情報理論問題、対数確率回帰などの特殊な問題を解決するために使用されます。

コードは以下のとおりです(例):
rel_entr関数を使用してKLダイバージェンスを計算します

cvx_begin
    variable x(n);
    maximize(sum(rel_entr(x, p)));
    subject to
        sum(x) == 1;
        x >= 0;
cvx_end

このうち、x は n 次元の列ベクトル、p も同じサイズと形状の列ベクトルで、CVX はすべての要素間の演算を対応する KL 発散公式に自動的に変換します。

5. entr(x) - エントロピー関数

entr(x) は、確率 x で確率変数のエントロピーを計算するアトミック関数です。この関数は数値を返します。

エントロピーは、確率変数の不確実性を測定するために使用される指標であり、一連の可能性における各可能性の平均情報量を表します。機械学習では、エントロピーは、特に情報ゲインやデシジョン ツリーなどのモデルで広範囲に使用されます。

コードは次のとおりです (例):
この例の問題は、最初の低解像度の画像から高解像度の画像を生成することです。

cvx_begin
    variable x(n);
    minimize( norm(y - H*x) );
    subject to
        entr(x) <= epsilon;
cvx_end

ここで、x は求める高解像度画像、y は低解像度の観測値、H はダウンサンプリング行列、n は x の長さ、ε は指定されたしきい値です。この例では、制約により、高解像度画像のエントロピーが特定のしきい値以下であることが要求され、過度に滑らかな解が回避されます。

6.quad_form(x, A) - 二次形式

quad_form(x, A) は、二次形式 x'Ax の値を計算するアトミック関数です。ここで、x は列ベクトル、A は対称行列です。この関数は数値を返します。

この関数は最適化問題でよく使用されます。目的関数または制約にベクトルに関する 2 次形式が含まれる場合、quad_form 関数を使用して式を簡素化できます。

コードは次のとおりです (例):
以下は、quad_form 関数の使用例です。この例の問題は、2 次計画問題を解くことです。

cvx_begin
    variable x(n);
    minimize( x'*Q*x + c'*x );
    subject to
        A*x <= b;
cvx_end

このうち、Qは対称行列、cは列ベクトル、Aは行列、bは列ベクトルである。目的関数は 2 次項を持つ 2 次関数であり、目的関数を最小化することは 2 次計画問題を解くことと同じです。この例では、quad_form 関数を使用して 2 次項 x'Qx の値を計算します。

要約する

上記の内容は、CVX のいくつかのサブ関数の概要です。これらの関数は、式を簡略化するだけでなく、プログラミングで発生する多くのエラーも解決できます。これらの関数の使用法をマスターすると、最適化の問題を解決し、CVX ツールボックスをマスターするのに役立ちます多くの。

MATLAB にあまり詳しくない場合。まずは次の 2 つの記事を読んで基礎知識を固めてください。
MATLAB の基本演算、行列の乗算、配列行列のインデックス付け、最大値と最小値の演算子、ゼロ行列/ランダム行列/恒等行列の生成、対数関数、Inf と NaN の意味、ステートメントが長すぎる場合は、コネクタを使用して行を折り返す、論理演算子と違い

MATLAB描画必見、大全描画!MATLAB 描画基本操作事典 - 折れ線グラフ、散布図、色スタイル、線の太さのまとめ

おすすめ

転載: blog.csdn.net/qq_45296693/article/details/130862818