0

101x82呼ばれるサイズマトリックスがありAます。この変数行列を使用して、次の2つの変数を計算します。

1) B1x1スカラー、および

2)C50x6行列。

私はそれらの類似変数1)とを比較 し、その値は固定されています:2)3)4)

3)D1x1スカラー、および

4)E50x6行列。

Aここで、次のように行列の値を摂動/変更したいと思います。

1)3)、すなわち、Bにほぼ等しいD、および

2)4)、すなわちCほぼ等しいE

摂動すると、、は変化しますがABCは変化しないことDに注意してくださいE

これを行う方法はありますか?ありがとう!

4

2 に答える 2

1

データをロードする必要があり(私が持っていない)、BまたはCを計算する方法がすぐにわからないため、コードを実行できません.

幸いなことに、私はあなたの問題に答えることができるかもしれません。あなたは最適化の問題を説明していますが、解決策はfminsearch (またはその種類のもの) を使用することです。

行うことは、2 つの要素を持つベクトルを返す関数を定義することです。

y1 = (B - D)^weight1;
y2 = norm((C - E), weight2);

重みは、可変性を許容する強さです (通常、重み = 2 で十分です)。
関数変数は A になります。

于 2011-04-25T23:52:05.087 に答える
0

私の理解では、いくつかの機能があります。

fb(A) = B

fc(A) = C

上記の関数、つまり A からこれらのそれぞれへのマッピングを知っていますか? B が D に近づくように最適化したい場合は、以下を選択する必要があります。

  1. 近いとはどういう意味ですか。||BD||^2 を最小化するなど、B と D の場合のベクトル ノルムを確認できます。この差の要素の二乗の標準的な合計は、おそらくそのトリックを実行し、計算上優れています。
  2. 最適化する方法。これは、ローカルミミナが必要かグローバルミミナが必要かなど、機能に大きく依存します。

つまり、基本的に、問題を最小化するように煮詰めました。

コスト = ||fb(A) - fd(A)||^2

確かにできることの 1 つは、A の個々の要素に関してこのコスト関数の勾配を計算し、適切な「時間ステップ」を使用して順オイラー法で最小化ステップを実行することです。これは高速ではないかもしれませんが、十分に小さいタイム ステップと適切に動作する十分な関数を使用すると、少なくとも極小値に到達できます。

これの勾配を計算する

grad_A(コスト) = 2*||fb(A)-fd(A)||*(grad_A(fb)(A)-grad_A(fd)(A))

ここで、grad_A は A に関する勾配を意味し、grad_A(fb)(A) は A で評価された関数 fb の A に関する勾配を意味します。

grad_A(fb)(A) の計算は、fb の形式に依存しますが、ここにいくつかのページに「行列計算」の恒等式と説明があります。

行列計算の恒等式 行列計算の説明

次に、前方オイラー更新を行うことにより、 A で勾配降下を実行するだけです。

A_next = A_prev - タイムステップ * grad_A(コスト)

于 2011-04-29T01:51:56.597 に答える