cqhuanghe1 发表于 2009-5-19 12:46

手里有一个有约束非线性的最优化问题,稍稍复杂了点,求大侠指点!!

结果是求目标函数的最小值。这个式子稍稍有点复杂,本来想用C语言做的,但是好像做这种比较复杂的最优化问题,C语言有点力不从心。查资料了解到用MATLAB的最优化工具箱比较容易实现。目标函数和约束条件都在WORD文档里,请大侠们看看这个程序到底应该怎么编,先谢过大家了,头疼呀。

yufeng 发表于 2009-5-19 20:58

使用fmincon即可 不过可能得到的是局部最优

ChaChing 发表于 2009-5-19 21:52

回复 楼主 cqhuanghe1 的帖子

既然已了解比较容易实现, 就试试看吧! 具体些再说

pglong 发表于 2009-5-20 09:15

实在不好办,就先转化为无约束的吧!
无约束的方法会很多的!网上搜!嘿嘿!

cqhuanghe1 发表于 2009-5-21 17:37

有大家的回复真好,这个的确是用yufeng同学讲的fmincon函数求解。我已经借到了两本书 《最优化技术方法及MATLAB的实现》和《工程最优化设计》,里面详细的讲解了各种求最优化技术的方法。我正在尝试着做,不过matlab是初学,在输入目标函数的时候,提示我:等号或不等号失衡或滥用(Error: Unbalanced or misused parentheses or brackets.)。我是这样输入的f=(x(1)*x(2)*1.04*pi*(x(4)^2-x(3)^2)((pi*x(4)*x(5))/60)^3)/(4.16*0.606*(1-((x(4)+x(6))^2-x(4)^2)/(x(4)^2-x(3)^2)))。检查了好几遍,括号数目相等,不知道哪里有问题呢?

ChaChing 发表于 2009-5-21 21:04

f=(x(1)*x(2)*1.04*pi*(x(4)^2-x(3)^2)*((pi*x(4)*x(5))/60)^3)/(4.16*0.606*(1-((x(4)+x(6))^2-x(4)^2)/(x(4)^2-x(3)^2)))

cqhuanghe1 发表于 2009-5-22 17:38

果然,漏了个乘号。ChaChing大虾果然细心。另外这个程序我已经编出来了,给大家看看。可是结果不太满意,因为MATLAB对初值的依赖性太强了,导致结果变化太大,所以我现在在尝试用1stOpt做,希望能得到满意的结果。

先自己编两个M-FILE函数保存在work目录下。然后在命令窗口下这样:
A=[-1,0,0,0,0,0;1,0,0,0,0,0;0,1,0,0,0,0;0,0,-1,0,0,0;0,0,1,0,0,0;0,0,0,-1,0,0;0,0,0,1,0,0;0,0,-1,0.28,0,0;0,0,1,-0.36,0,0;0,0,0,0,-1,0;0,0,0,0,1,0;0,0,0,0,0,-1;0,0,0,0,0,1];
b=;
x0=;
=fmincon('myfun',x0,A,b,[],[],[],[],'mycon')

完成。这样就能出结果了,可惜对初值的依赖性太强,结果不好。总之谢谢大家了。

[ 本帖最后由 ChaChing 于 2009-5-22 18:25 编辑 ]

cqhuanghe1 发表于 2009-5-22 17:39

忘了写上那两个要自己编的函数。补充在这里。
其一,
function=mycon(x)
c=x(2)*(pi/4)*(x(4)^2-x(3)^2)*((pi*x(4)*x(5))/60)-1.82780;
ceq=[];
其二,
function f=myfun(x)
f=(x(1)*x(2)*1.04*pi*(x(4)^2-x(3)^2)*((pi*x(4)*x(5))/60)^3)/(4.16*0.606*(1-((x(4)+x(6))^2-x(4)^2)/(x(4)^2-x(3)^2)));

[ 本帖最后由 ChaChing 于 2009-5-22 18:17 编辑 ]
页: [1]
查看完整版本: 手里有一个有约束非线性的最优化问题,稍稍复杂了点,求大侠指点!!