声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 1345|回复: 7

[综合讨论] [求助]请教最优化问题

[复制链接]
发表于 2006-6-24 19:48 | 显示全部楼层 |阅读模式

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

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

x
求解一个问题,<BR>目标函数是2次的,约束有线性的,有非线性的<BR>比如求解:<BR>   min   1/2 * x' * H * x + f' *x<BR>subject to :A*x&lt;=b<BR>                   Aeq*x=beq<BR>                   x' * H1 *x =b1<BR>                   x' * H2 *x&lt;=b2<BR>好像没找到有类似的命令,请问是否有这样的命令呢?<BR>或者有谁编过类似的代码可否共享一下?<BR>谢谢了
回复
分享到:

使用道具 举报

发表于 2006-6-24 21:10 | 显示全部楼层

回复:(yqchenlolo)[求助]请教最优化问题

fmincon不行吗?
 楼主| 发表于 2006-6-25 10:41 | 显示全部楼层
min fun:=1/2 * x' * H * x + f' *x<BR>s.t ......<BR><BR>x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options,P1,P2, ...);<BR>问题是我的目标函数里面的变量个数比较多,<BR>这样定义成函数好像比较麻烦的样子。<BR>而且当固定变量个数的时候,我的目标函数的H和f并不是固定的<BR>是在程序中求出来之后然后才定义的相应的目标函数,<BR>比如我的变量x的长度为16,程序算出了一个H(16×16)和f(16×1)的,如何定义出这个fun ?<BR>请happy教授指教,谢谢了 :)
 楼主| 发表于 2006-6-25 11:26 | 显示全部楼层
x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options,P1,P2, ...);<BR>顺便问一下,命令中的P1和P2怎么用?看了帮助不太明白<BR>qqq
发表于 2006-6-25 11:56 | 显示全部楼层
doc 一下<BR>里面应该有例程的。
 楼主| 发表于 2006-6-25 15:07 | 显示全部楼层
doc 过了,只有一个很简单的例子,三个变量的,也没有非线性约束,口可口可<BR>搞的真头痛啊[em06]
 楼主| 发表于 2006-6-25 16:08 | 显示全部楼层
<P>刚才找到了一个fmincon的大尺度的例子:<BR>里面有一个自带的函数<BR>function [f, grad] = tbroyfg(x,<FONT color=#f70909>dummy</FONT>)<BR>%TBROYFG Test problem</P>
<P>%   Copyright 1990-2002 The MathWorks, Inc.<BR>%   $Revision: 1.5 $  $Date: 2002/03/12 20:36:23 $<BR>%   Thomas F. Coleman 7-1-96</P>
<P><FONT face=黑体 color=#ee1111>n=length(x);  % n should be a multiple of 4</FONT></P>
<P>p=7/3; y=zeros(n,1);<BR>i=2:(n-1);<BR>y(i)= abs((3-2*x(i)).*x(i)-x(i-1)-x(i+1)+1).^p;<BR>y(n)= abs((3-2*x(n)).*x(n)-x(n-1)+1).^p;<BR>y(1)= abs((3-2*x(1)).*x(1)-x(2)+1).^p;<BR>j=1:(n/2); z=zeros(length(j),1);<BR>z(j)=abs(x(j)+x(j+n/2)).^p;<BR>f=1+sum(y)+sum(z);<BR>%<BR>% Evaluate the gradient.<BR>if nargout &gt; 1<BR>   p=7/3; n=length(x); g = zeros(n,1); t = zeros(n,1);<BR>   i=2:(n-1);<BR>   t(i)=(3-2*x(i)).*x(i)-x(i-1)-x(i+1)+1;<BR>   g(i)= p*abs(t(i)).^(p-1).*sign(t(i)).*(3-4*x(i));<BR>   g(i-1)=g(i-1)-p*abs(t(i)).^(p-1).*sign(t(i));<BR>   g(i+1)=g(i+1)-p*abs(t(i)).^(p-1).*sign(t(i));<BR>   tt = (3-2*x(n)).*x(n)-x(n-1)+1;<BR>   g(n)=g(n)+p*abs(tt).^(p-1).*sign(tt).*(3-4*x(n));<BR>   g(n-1)=g(n-1)-p*abs(tt).^(p-1).*sign(tt);<BR>   tt=(3-2*x(1)).*x(1)-x(2)+1;<BR>   g(1)=g(1)+p*abs(tt).^(p-1).*sign(tt).*(3-4*x(1));<BR>   g(2)=g(2)-p*abs(tt).^(p-1).*sign(tt);<BR>   j=1:(n/2); t(j)=x(j)+x(j+n/2);<BR>   g(j) = g(j)+p*abs(t(j)).^(p-1).*sign(t(j));<BR>   jj=j+(n/2);<BR>   g(jj) = g(jj)+p*abs(t(j)).^(p-1).*sign(t(j));<BR>   grad = g;<BR>end<BR>这个函数的定义不太明白,那个dummy什么作用?<BR>还有<BR><FONT face=黑体 color=#ee1111>n=length(x);  % n should be a multiple of 4<BR><FONT color=#000000>这句什么意思?x不是自变量么?如果是定义函数的时候怎么能预先知道x的长度呢?<BR>还有注释说n必须是4的倍数?</FONT></FONT></P>[em03][em03][em03][em03]
发表于 2006-6-25 18:55 | 显示全部楼层

回复:(yqchenlolo)x = fmincon(fun,x0,A,b,Aeq,beq...

<DIV class=quote><B>以下是引用<I>yqchenlolo</I>在2006-6-25 11:26:09的发言:</B><BR>x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options,P1,P2, ...);<BR>顺便问一下,命令中的P1和P2怎么用?看了帮助不太明白<BR>qqq</DIV>
<P>P1和P2是传递用户自定义变量用的</P>
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

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

GMT+8, 2024-9-25 11:16 , Processed in 0.055950 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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