求助matlab程序——罚函数或乘子法

求助matlab程序——罚函数或乘子法,第1张

设长宽高分别是x,y,z,问题就是在条件xyz=512下求f(x,y,z)=0.4xy+0.4(x+y)z的最小值。

拉格朗日函数是f(x,y,z)=0.4xy+0.4(x+y)z+λ(xyz-512)。

根据fx=0,fy=0,fz=0得到x=y=z。代入xyz-512=0中得x=y=z=8。

你只算了2个侧面,实际有4个侧面。

1、首先在电脑中启动matlab,新建一个函数文件,用来写目标函数。

2、在编辑器窗口中写入要求的目标函数,并保存,注意使函数名与文件名相同。

3、然后再新建一个函数文件,用来编写非线性约束条件。步骤及其注意事项同上。额外需要注意的是,需要将两个函数文件放在同一个文件夹中。

4、最后,在命令行窗口处写入fmincon命令。此处需要注意的是,对于没有的线性约束条件的位置药用空矩阵代替,并且初始条件需要满足非线性约束条件。

5、敲下键盘上的enter建,结果得出。可以发现exitflag=1是大于0的,所以结果正确。

M是一个“十分大”,也叫“足够大”的正数。。。其作用是使得检验数得到足够的数值,以将相应的变量从基变量中排除。。。一般是为了人造一个初始基,然后将其变量排除用。。。

上题中:f是原始的目标函数,g则是原始目标函数加上一个初始基之后的新目标函数。

单纯形法原理中,Cj = M 则 检验数 Cj - CbB^(-1)Pj 总是和M的符号一致(因为M足够大,所以只用考虑Cj的符号就行了)。

则在求最大化问题中,使得人工变量的系数为-M,则此变量将一定会被排除出基变量。

在求最小化问题中,使得人工变量的系数为M,则此变量也一定会被排除出基变量。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/11175199.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-14
下一篇2023-05-14

发表评论

登录后才能评论

评论列表(0条)

    保存