我需要最小化这个函数:
A = sum(1:N) [(wi/constant)* y];
,
y = P - P0 + 10*n*log( sqrt((xk-xi)^2 + (yk-yi)^2) )
我知道不同位置的P
(即不同的(xi,yi)
)。我必须找到使A
最小化的参数P0
, n
, xk
和yk
。
我想在MATLAB中使用fminsearch
来解决这个问题,但是,我不知道确切地如何使用它?
我尝试了这个问题的想法,但是我需要使用Bm
作为矢量(x,y)
,他们使用Bm
作为标量?
我可以使用fminsearch
来解决这个问题吗?
请注意,您的函数似乎是无界的(result: -inf
),因为
-
P0
是不受约束的,因此可以生长到+∞
,从而导致A ⇒ -∞
-
n
是不受约束的,因此可以收缩到-∞
,从而导致A ⇒ -∞
-
xk
和yk
可以选择使所有平方和最小,因此,你正在取一个很小的数字的对数,趋于-∞
,导致A ⇒ -∞
所以,你可能需要使用一些约束或缩放;如果你有优化工具箱,你要找的就是fmincon
。
如果你没有工具箱:有fminsearchbnd
和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)