首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带向量输入的fminsearch

带向量输入的fminsearch
EN

Stack Overflow用户
提问于 2013-11-11 21:07:51
回答 2查看 3.8K关注 0票数 0

我要最小化这个函数:

代码语言:javascript
复制
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×4和13×1数组,这些值已在Matlab工作区中定义。我希望对k值进行优化,以便最小化函数值GCV

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

但我不能让它跑?

我尝试过几种方法,最近的一种方法是:

代码语言:javascript
复制
k_min = fminsearch(@GCV,(x;y;0));
??? k_min = fminsearch(@GCV,(x;y;0));
                              |
Error: Unbalanced or unexpected parenthesis or bracket.

我做错了什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-11-11 21:20:25

看来你在学习匿名函数fminsearch最小化单个变量(可能是向量)。因此,您的目标函数必须只有一个输入。您有一个函数,GCV,它需要三个输入。其中两个是静态的,定义在最小化之外的工作区中,而k是要最小化的一个。要创建一个具有来自GCV的一个输入的函数,可以使用任何匿名函数,注意指定哪些变量是参数:

代码语言:javascript
复制
x = ...
y = ...
k0 = 0;
k_min = fminsearch(@(k)GCV(y,x,k),k0);
票数 1
EN

Stack Overflow用户

发布于 2013-11-11 21:20:19

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

代码语言:javascript
复制
>> % define x,y
>> GCVk = @(k) GCV(y,x,k);
>> k0 = 0;
>> k_min = fminsearch(GCVk,k0)

可能还有另一种方法可以做到这一点,但这是为优化器列出的传递附加参数方法之一。

既然第一名没有加分,那么幽默又如何?让我们举一个例子:

代码语言:javascript
复制
>> 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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19915972

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档