声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 4299|回复: 7

[编程技巧] 有关最优化函数fminunc的一个问题,请教高手

[复制链接]
发表于 2006-11-14 17:20 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
函数的格式是[x,fval,exitflag,output]=fminunc(@myfun,x0);
如果在函数myfun中我需要代入已知的向量变量a和b,那么编程的时候应该注意什么呢?
不知道为什么运行的时候总是出错,说a是没有定义的变量
如果哪位前辈比较精通最优化函数的应用,请帮帮忙,谢谢!
回复
分享到:

使用道具 举报

发表于 2006-11-14 17:54 | 显示全部楼层
给出你的详细数据,详细问题先
 楼主| 发表于 2006-11-14 19:40 | 显示全部楼层
我要求解的函数f(x)=求和(x(1)*a(i)+1/2*x(2)*a(i)^2-b(i)/1000)^2,  i=1到n,其中a和b是n维向量,已知,但对于具体某次运算各不相同,所以我需要在函数fun中将这两个变量代入,我是这样编的:

function f=fun(x)
n=length(a);         
c=cell(1,n);            
for i=1:n
    s=['(x(1)*',num2str(a(i)),'+x(2)*(',num2str(a(i)*a(i)),')/2-',num2str(b(i)),'/1000)'];      
    c{i}=[s,'*',s];                                 
end
f='';
for i=1:n-1
    f=[f,c{i},'+'];
end
f=[f,c{n}];        

可是只要我运行 [x,fval,exitflag,output]=fminunc(@fun,x0),就会出现以下出错提示:

??? Input argument 'a' is undefined.

Error in ==> myfun.m
On line 5  ==> n=length(a);            
Error in ==> D:\matlab6.5\toolbox\optim\fminunc.m
On line 149  ==>    f = feval(funfcn{3},x,varargin{:});

以上就是问题所在了,因为我对matlab所知很少,没有办法,只好到这里求助了,希望各位大侠帮我分析一下,谢谢哈:@)
发表于 2006-11-14 21:32 | 显示全部楼层
从你定义的函数fun 来看,是符号运算,
但从你想要的结果来看,又是数值计算,
搞不清楚你到底想得到符号解,还是数值解。

另:你在定义fun时,
在n=length(a);之前应该为变量a和b赋值,

在[x,fval,exitflag,output]=fminunc(@fun,x0), 之前应为x0赋值。
发表于 2006-11-15 08:33 | 显示全部楼层

回复

我开始也认为是"笑石头"想的那样,其实不然.(a,b赋值后仍会出现??? Input argument 'a' is undefined).
我想了一下,问题是出在变量定义上.
另注意:由于最后定义的是一个string函数,@应当不写.

[ 本帖最后由 xjzuo 于 2006-11-15 18:51 编辑 ]
 楼主| 发表于 2006-11-15 10:13 | 显示全部楼层
谢谢笑石头和xjzuo关注我的帖子:handshake

首先,我的程序因为要在式子中代入变量a和b,所以把它写成了string的形式,否则我不知道该怎么实现;

另外,关于a,b和x0,在当前工作空间都是有值的,还需要在程序中再定义么?

对于xjzuo的建议,我试过了,还是出错,只不过错误少了一条:

??? Input argument 'a' is undefined.

Error in ==> myfun.m
On line 5  ==> n=length(a);     

不加@,使用单引号也试过,也不行。我:'(
发表于 2006-11-15 10:27 | 显示全部楼层
原帖由 bobohyb 于 2006-11-15 10:13 发表
谢谢笑石头和xjzuo关注我的帖子:handshake

首先,我的程序因为要在式子中代入变量a和b,所以把它写成了string的形式,否则我不知道该怎么实现;

另外,关于a,b和x0,在当前工作空间都是有值的,还需要在程 ...



你总得告诉matlab,a是什么东西啊!建议楼主先补补编程的基础,与所使用的语言即matlab是否熟悉无关。
发表于 2006-11-15 11:13 | 显示全部楼层
原帖由 bobohyb 于 2006-11-15 10:13 发表
谢谢笑石头和xjzuo关注我的帖子:handshake

首先,我的程序因为要在式子中代入变量a和b,所以把它写成了string的形式,否则我不知道该怎么实现;

另外,关于a,b和x0,在当前工作空间都是有值的,还需要在程 ...


把 function f=fun(x) 改为 function f=fun(x,a,b)
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-11-30 23:15 , Processed in 0.067014 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表