我要最小化这个函数:
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;
endx和y值分别为13×4和13×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.我做错了什么?
发布于 2013-11-11 21:20:25
看来你在学习匿名函数。fminsearch最小化单个变量(可能是向量)。因此,您的目标函数必须只有一个输入。您有一个函数,GCV,它需要三个输入。其中两个是静态的,定义在最小化之外的工作区中,而k是要最小化的一个。要创建一个具有来自GCV的一个输入的函数,可以使用任何匿名函数,注意指定哪些变量是参数:
x = ...
y = ...
k0 = 0;
k_min = fminsearch(@(k)GCV(y,x,k),k0);发布于 2013-11-11 21:20:19
fminsearch的第二个输入是起始参数(即k0),因此指定k的起始值。然后您可以定义一个匿名助手函数,并在此基础上进行优化:
>> % define x,y
>> GCVk = @(k) GCV(y,x,k);
>> k0 = 0;
>> k_min = fminsearch(GCVk,k0)可能还有另一种方法可以做到这一点,但这是为优化器列出的传递附加参数方法之一。
既然第一名没有加分,那么幽默又如何?让我们举一个例子:
>> 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)!利润?
https://stackoverflow.com/questions/19915972
复制相似问题