fminsearch与矢量输入

时间:2013-11-11 21:07:51

标签: matlab numerical-methods fminsearch

我想尽量减少这个功能:

function [GCV2]=GCV(y,x,k)

[n, p]=size(x);

A=(x'*x+k*eye(p));
A=A\x';
A=x*A;

I_mat=eye(n);

num2=(I_mat-A);
num2=num2*y;
num2=norm(num2);
num2=num2^2;
num2=num2/n;

%(norm((I_mat-A)*y)^2)/n;
den2=(I_mat-A);
den2=trace(den2);
den2=den2/n;
den2=den2^2;

GCV2=num2/den2;

end

xy值分别为13 x 4)和13 x 1数组,这些值已在Matlab工作空间中定义。我想优化k值,以便最小化函数值GCV

正在优化的参数以及输出是标量,因此fminsearch应该是合适的。

但我无法让它运行?

我尝试了几种方法,最新的方法是:

k_min = fminsearch(@GCV,(x;y;0));
??? k_min = fminsearch(@GCV,(x;y;0));
                              |
Error: Unbalanced or unexpected parenthesis or bracket.

我做错了什么?

2 个答案:

答案 0 :(得分:1)

fminsearch的第二个输入是起始参数(即k0),因此请指定起始值k。然后,您可以定义匿名帮助函数并对其进行优化:

>> % define x,y
>> GCVk = @(k) GCV(y,x,k);
>> k0 = 0;
>> k_min = fminsearch(GCVk,k0)

可能有另一种方法可以执行此操作,但这是优化程序列出的passing additional parameters方法之一。

由于首先没有奖励积分,幽默怎么样。我们举个例子:

>> x=1; y=1;
>> GCVk = @(k) x+y+k; k0=0;
>> k_min = fminsearch(GCVk,k0)

Exiting: Maximum number of function evaluations has been exceeded
         - increase MaxFunEvals option.
         Current function value: -316912650057057490000000000.000000 

k_min =
  -3.1691e+26

找到它 - 世界上最低的数字(减去2)!利润是多少?

答案 1 :(得分:1)

看起来您正在了解anonymous functionsfminsearch最小化单个变量(可以是向量)。因此,您的目标函数必须只有一个输入。你有一个函数GCV,它有三个输入。两个是静态的,并且在最小化之外的工作空间中定义,而k是要最小化的那个。要使用GCV中的一个输入创建函数,您可以使用任何匿名函数,注意指定哪些变量是参数:

x = ...
y = ...
k0 = 0;
k_min = fminsearch(@(k)GCV(y,x,k),k0);