0

fminsearch で使用する必要がある正方行列があります。行列の値の一部は、fminsearch で使用する値であり、行列内の位置を保持する必要があるため、変数にする必要があります。たとえば、

X=[1,2,3;4,5,6;7,8,9];

これを作ってみたい

p(1)=a1;
p(2)=a2;
p(3)=a3;
p(4)=a4;
X=[1, 2, a1 ; a2, 5, a3 ; 7, 8, a4];

fminsearchで最小化するものを作成するためにXで操作を行うことができるように。たとえば、次のコードで C を最小化するために、a1、a2、a3、および a4 を見つけたいとします。このコードは、特定の行列の合計エントロピーを計算します。

Ent=zeros(size(X,1),1);
    for k=1:size(X,2);
        const=X(k,:);
        logX=log(X(k,:));
        logX=logX';
        Ent(k,:)=const*logX;
    end
Ent=-Ent;
C=sum(Ent);

これは MATLAB で可能ですか? さらに、q パラメータを持つ nxn 行列があるとします。同じ C を最小化するには、どのようにアイデアを調整すればよいでしょうか?

編集:

私は自分がやりたいことをする方法を見つけました。しかし、勾配降下アルゴリズムがこれを行うためのより良い方法であることがわかりました。私がやっていたことのサンプルを投稿します:

function test()
[new_param entropy]=fminsearch(@Cost,[3,3,3]);

function C=Cost(p)
X=rand(5);
X(1,1)=p(1);
X(2,2)=p(2);
X(3,3)=p(3);
Ent=zeros(size(X,1),1);
for k=1:size(X,2);
    const=X(k,:);
    logX=log(X(k,:));
    logX=logX';
    Ent(k,:)=const*logX;
end
Ent=-Ent;
C=sum(Ent);
end
X(1,1)=new_param(1);
X(2,2)=new_param(2);
X(3,3)=new_param(3);
X
new_param
entropy
end
4

2 に答える 2

1

次のようなことを試すことができると思います。

A = @(x) [1 2 x(1); 3 4 x(2); 5 6 x(3)]; 

または、代わりに、次を利用しますSymbolic Toolbox

syms x y z

A =  [1 2 x; 3 4 y; 5 6 z];
于 2013-08-13T06:10:17.647 に答える
0

誤解しているかもしれませんが、次のように簡単だと思います。

X=[1, 2, p(1) ; p(2), 5, p(3) ; 7, 8, p(4)];

更新後p、このステートメントを再度実行するだけで、目的のX.

于 2013-08-13T07:48:05.667 に答える