声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 1637|回复: 6

[编程技巧] 关于变系数的inline函数问题

[复制链接]
发表于 2008-3-25 19:03 | 显示全部楼层 |阅读模式

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

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

x
本人遇到一个优化问题,想使用MATLAB 的优化函数进行计算,在编写FUN函数时遇到了困难,希望高手给点建议:
      优化函数min F=a(1)*X(1)*X(3)+a(2)*X(1)*X(2)+a(3)*X(2)*X(3)
                            s.t.    x>0;
主要问题是,系数矩阵a(i)的值是由另一个子程序算出的,是可变的。请问高手的是怎么在编写函数时,能使用a(i),也就是说能够把a(i)的值传递给函数F。

希望大家给点意见,这个问题解决不了,就不不好写论文啊,高手们请给点意见!!!

[ 本帖最后由 eight 于 2008-3-25 19:55 编辑 ]
回复
分享到:

使用道具 举报

发表于 2008-3-25 19:23 | 显示全部楼层
help inline, 很明显参数是可以传递的(包括作循环时)。
或者,也可以编成函数(多个子函数组成),传递应该也没有什么问题。
另:问问题时,最好能贴出具体问题,指出你出错的地方------当然,可以适当简化原问题,再拿来讨论。
 楼主| 发表于 2008-3-25 19:45 | 显示全部楼层

重新写下问题

首先谢谢楼上的同志!
我把自己的程序先写下!
1 主程序
  主要是算出a,bb,w,wh的值,然后调用youhua.m来进行优化。
2.youhua.m

function [y,f]=youhua(a,bb,w,wh)
x0=[a(2) a(3) a(4) w 1];   初值
fun='(a(1)-bb(1)*x(5))^2+(x(1)-bb(2)*x(5))^2+(x(2)-bb(3)*x(5))^2+(x(3)-bb(4)*x(5))^2+(x(4)-wh)^2';
b=0;
A=[];
Aeq=[];
beq=[];
lb=[0 0 0 0 0];
ub=[];
[x,fv]=fmincon(fun,x0,A,b,Aeq,beq,lb,ub);
y=[a(1) x];
f=fv;


运行的错误是:
Error using ==> fmincon
FMINCON cannot continue because user supplied objective function
failed with the following error:
Error using ==> inlineeval
Error in inline expression ==> (a(1)-bb(1)*x(5))^2+(x(1)-bb(2)*x(5))^2+(x(2)-bb(3)*x(5))^2+(x(3)-bb(4)*x(5))^2+(x(4)-wh)^2
??? Undefined function or variable 'a'.
Error in ==> E:\program\train\nonliner hunting\youhua.m
On line 10  ==> [x,fv]=fmincon(fun,x0,A,b,Aeq,beq,lb,ub);
希望高手给点意见和建议!
发表于 2008-3-25 19:56 | 显示全部楼层
自己动手,参考版面成功的示例,然后试试,而不是一味等别人回答
发表于 2008-3-26 21:02 | 显示全部楼层
问题最好也用公式贴一下,方便大家直接理解问题.
我看了一下代码,大概知道你的问题出在哪里:只需help fmincon, 注意参数的传递即可。
 楼主| 发表于 2008-3-27 09:05 | 显示全部楼层
谢谢各位的热心帮助,这个程序我已经调试通了,使用全局变量来传递参数的值,不过在运行后会出现这样的文字:
Warning: Large-scale (trust region) method does not currently solve this type of problem,
switching to medium-scale (line search).
> In C:\MATLAB6p5\toolbox\optim\fmincon.m at line 213
  In G:\nonliner hunting\main.m at line 158
不知道对结果有没有影响。如果没有影响,我的优化程序是嵌套在循环中的,每运行一次的话都会出现这样的文字,很麻烦,请问有没有什么命令可以消除这些文字,不让它们显示呢?
   有人推荐我使用一下的语句:
ff=optimset;
ff.Display='off';
[x,fv]=fmincon('youhua',x0,A,b,Aeq,beq,lb,ub,[],ff);   %优化函数
   不过就会出现上面的文字,请高手指教!!!
发表于 2009-5-30 23:34 | 显示全部楼层
具体怎么调试的啊??能否把这一段程序贴一下,我也学习一下,麻烦你了
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

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

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

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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