使用bsxfun函数查找矩阵的Max条目

时间:2015-05-06 04:36:43

标签: matlab

对于给定的一组qr,我想找到(0,1)和Tp=x * log(1 + (q* r (1 - 1/y)* (2/x - y))/(1 + r* (1 - 1/y) + q* (2/x - y)))x的{​​{1}}的最大值在(1,2)中。

我可以使用两个y循环来计算它们,但是当我使用forx的非常小的步长时,例如0.00001,这需要很长时间。但我知道,如果我将y作为所有Tpx的矩阵,即y是大小为Tp的矩阵,则可能更容易快点。在我阅读时,length(x) x length(y)可能会有所帮助,但我不知道如何在我的问题中应用它。

这是我尝试过的,但它没有给出正确的输出。在这里,我使用更大的步长来理解。有人可以在我的代码中修复此问题吗?

bsxfun(@times,..)

1 个答案:

答案 0 :(得分:1)

for循环中尝试此操作:

Tp = bsxfun(@(x,y) log(1+(q(k)*r(k)*(1 - 1./y).*(2./x - y))./(1 + r(k)*(1 - 1./y) + q(k)*(2./x - y)))*x,x,y.'); %\\'
MaxTp(k,1)=max(max(Tp));
[p2, q2] = ind2sub(size(Tp),find(Tp==MaxTp(k,1)));
ox(k,1)=x0+(p2-1)*stepx;
oy(k,1)=y0+(q2-1)*stepy;

我更改了bsxfun以在功能部分而不是矢量输入中进行计算,并且您还覆盖pq作为ind2sub的结果

您也可以使用fmincon(请注意最大化意味着我们需要最小化函数的负面影响)。以下代码进入for循环:

f=@(x,y) log(1+(q(k)*r(k)*(1 - 1./y).*(2./x - y))./...
    (1 + r(k)*(1 - 1./y) + q(k)*(2./x - y)))*x;
o(:,k)=fmincon(@(x) -f(x(1),x(2)),[0.5;0.5],[],[],[],[],[0;1],[1;2]);

o(:,k)给出了最大的xy坐标,但我认为它与您的oxoy变量不同。