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];

这样我就可以对 X 进行操作以创建一些要使用 fminsearch 最小化的东西。例如,假设我想找到 a1、a2、a3 和 a4,以便在以下代码中最小化 C,该代码计算给定矩阵的总熵:

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 回答