MATLAB fminsearch实现4个参数的函数最小化



我需要最小化这个函数:

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, xkyk

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

我尝试了这个问题的想法,但是我需要使用Bm作为矢量(x,y),他们使用Bm作为标量?

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

请注意,您的函数似乎是无界的(result: -inf),因为

  • P0是不受约束的,因此可以生长到+∞,从而导致A ⇒ -∞
  • n是不受约束的,因此可以收缩到-∞,从而导致A ⇒ -∞
  • xkyk可以选择使所有平方和最小,因此,你正在取一个很小的数字的对数,趋于-∞,导致A ⇒ -∞

所以,你可能需要使用一些约束或缩放;如果你有优化工具箱,你要找的就是fmincon

如果你没有工具箱:有fminsearchbndfminsearchcon,可以从文件交换,或者我自己的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)

相关内容

  • 没有找到相关文章

最新更新