問題タブ [cvx]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
matlab - CVX でノルムを二乗するにはどうすればよいですか?
Matlab の CVX パッケージで、 $|Ax-b|_2^2$ のような関数を最小化したいと考えています。2ノルムの2乗を意味します。それを CVX でコーディングするにはどうすればよいですか? 私は両方を試しました:
と
しかし、両方ともエラーをスローしました。使用することになっている組み込み関数はありますか?
(注、実際には、そのノルムの二乗と別のノルムの合計を最小化しようとしているため、minimize (norm(A*x-b,2)^2 + norm(x,1));
二乗されたノルムの最小値を見つけるだけで満足するのではなく、ノルムの二乗を指定しようとしています。)
matlab - MATLAB syms/symbolics を cvx sdp ソルバーに渡す方法は?
3D 行列At
、n x n x nvar
、nvar
変数がありますy1...y25
。変数を cvx に簡単にフィードできました。
ただし、最後の行の等号により、次のエラーが発生しています。
私はその平等をいくつかの異なる方法で設定しようとしました:
最初に作成したのと同じfor
ループを使用します ( double の行列を使用):At
Cfun
このエラーが発生します:
うまくいくとは思っていませんでしたが、試してみる価値はあると思いました。
また、cvx 内で行列を作成するために使用しようとしbsxfun
ましたが、bsxfun がシンボリックを処理できるとは思いません。repmat
私が今調べている「bsxfun」の代替です(そう言われました)。
この方法で問題を解決しようとしている理由は、cvx を使用して任意の数/組み合わせのバスの最適な電力の流れを解決できるルーチンを作成することです。毎回個別に変数を作成する必要はありません。
matlab - 単純な線形制約による効率的な二次最適化 CVX を使用した MatLab
(フォーマットについて申し訳ありません、私は最善を尽くします)私は解決したい:
ここA
で、 はNxH
論理行列 (およそ半分がゼロ、半分が 1)、b
はすべてのエントリが同じである定数ベクトルです Hx1
(たとえば、は確率の定数ベクトルなので、すべてのエントリは にあります。最適は分布でもあるため、すべて実際には は非常に大きく (例: ) 、比較的小さい (例: ) であることに注意してください。b = (0.1,0.1,0.1,...)
p
Nx1
[0,1]
x
[0,1]
H
2 million
N
150
現在、これを解決するために CVX を使用しています。明示的に、私のコードは次のとおりです。
これにより、正しい結果が得られます。ただし、H
が大きいとかなり遅くなります。私の最適化プログラムの構造 (論理 A、定数制約、制約がなければ分析解がある問題など) を考えると、これにアプローチするより良い方法はありますか? ここで CVX をお勧めしますか?
ご協力ありがとうございました。
matlab - l1マジックエラー - matlab
信号の次元よりも少ない観測値を使用して画像を再構築しようとしています(圧縮センシング)。次のコードを実行しようとしています -
ただし、コードを実行すると、次のエラーが発生します。
上記のコードは、センシング行列が dft 行列ではなく dct 行列である場合に解を回復します。誰かがエラーの場所を教えてもらえますか? l1-magic固有の問題でしょうか?別のソルバーを使用してもうまくいきますか?
注: l1qc_logbarrier はライブラリ l1 magic の関数です。http://users.ece.gatech.edu/justin/l1magic/index.html
l1qc_logbarrier が解決する -
matlab - Matlab で CVX を並行して実行する
さまざまなパラメーターを使用して CVX を並行して実行しています。シリアルで実行すると警告は表示されませんが、(parfor を使用して) 並列で実行すると、次のようになります。
これは前に見たことがなく、解決方法がわかりません。どんな助けでも大歓迎です。
matlab - CVXGEN プログラムの任意の次元
MatLab
を使用して QP/LP 問題を解決したいと考えてCVXGEN
います。の方がはるかに高速であるため、 CVXGEN
overを優先します。特に解決したいのはCVX
CVXGEN
ここf(x)
で、 は二次形式であり、X
コンパクトで凸であり、線形関数によって定義されます。問題のサイズは実行によって異なります。手続きをできるだけ自動化したい。CVXGEN
説明のために、コードの例を次に示し ます。
このコードは で入力しcvxgen.com
ます。この Web サイトで、一意の番号を与える C コードを生成できます。次に、一意の番号を使用して、これを MEX コードにコンパイルできます。最後に、次のコードを実行して、この MEX コード ( csolve
) を MatLab から呼び出すことができます。
ただし、この手順では、実行する問題の次元ごとに、に移動し、 を変更し、コードをコンパイルn
してから、コードを実行する必要があります。パラメータとして入力させることはできますか?このように、コードを 1 回コンパイルするだけで済みます。次に、コード セット内でとを呼び出し、次に を呼び出します。cvxgen.com
n
MatLab
n
MatLab
params.n = n
params.Q = eye(n,n)
[vars, status] = csolve(params);