我需要尽量减少这个功能:
A = sum(1:N) [(wi/constant)* y];
其中
y = P - P0 + 10*n*log( sqrt((xk-xi)^2 + (yk-yi)^2) )
我知道P
在不同的位置(即不同的(xi,yi)
)。我必须找到最小化P0
的参数n
,xk
,yk
和A
。
我想在MATLAB中使用fminsearch
来解决这个问题,但是,我不确切知道如何使用它?
我在this question上尝试了这个想法,但是我需要使用Bm
作为向量(x,y)
并使用Bm
作为标量?
我可以使用fminsearch
来解决此问题吗?
答案 0 :(得分:0)
请注意,您的函数似乎无限制(结果:-inf
),因为
P0
不受约束,因此可以增长到+∞
,从而导致A ⇒ -∞
n
不受约束,因此缩小为-∞
,导致A ⇒ -∞
xk
和yk
,使得所有方格的总和最小,因此,您将获取一个小数字的对数,该数字往往为-∞
,从而导致A ⇒ -∞
所以,你可能不得不使用一些约束或缩放;如果您有优化工具箱,那么您需要fmincon
寻找。
如果您没有工具箱:可以从文件交换中找到fminsearchbnd
and fminsearchcon
,或者我自己的optimize
。
无论如何,这是您使用fminsearch
实现问题的方式:
%// Some dummy values (for testing)
N = 30;
w = rand(N,1); x = rand(N,1);
P = rand(N,1); y = rand(N,1);
constant = rand;
%// Define Q = [P0 n xk yk]. Then:
A = @(Q) sum( w.*(P - Q(1) + 10*Q(2)*log(sqrt((Q(3)-x).^2 + (Q(4)-y).^2))) )/constant;
%// Most local optimization algorithms need an initial estimate:
Q0 = rand(4,1);
%// Now you can put everything in fminsearch:
[solution, fval] = fminsearch(A, Q0)