用于4个参数的函数最小化的MATLAB fminsearch

时间:2014-03-12 15:13:58

标签: matlab fminsearch

我需要尽量减少这个功能:

A = sum(1:N) [(wi/constant)* y];

其中

y = P - P0 + 10*n*log( sqrt((xk-xi)^2 + (yk-yi)^2) )

我知道P在不同的位置(即不同的(xi,yi))。我必须找到最小化P0的参数nxkykA

我想在MATLAB中使用fminsearch来解决这个问题,但是,我不确切知道如何使用它?

我在this question上尝试了这个想法,但是我需要使用Bm作为向量(x,y)并使用Bm作为标量?

我可以使用fminsearch来解决此问题吗?

1 个答案:

答案 0 :(得分:0)

请注意,您的函数似乎无限制(结果:-inf),因为

  • P0不受约束,因此可以增长到+∞,从而导致A ⇒ -∞
  • n不受约束,因此缩小为-∞,导致A ⇒ -∞
  • 可以选择
  • xkyk,使得所有方格的总和最小,因此,您将获取一个小数字的对数,该数字往往为-∞,从而导致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)