matlab解约束非线性多变量函数的最小值,注意是有约束,附程序及注释,无它

约束类型1:线性不等式约束

函数为F(x)=100*(x(2)-x(1)^2)^2 + (1-x(1))^2,约束为 x(1)+2x(2)≤1。写成矩阵形式以 A = [1,2]b = 1 为条件,以 Ax <= b 形式表达此约束。

建立m1脚本文件,写入下列程序:

fun = @(x) 100*(x(2)-x(1)^2)^2 + (1-x(1))^2;
x0 = [-1,2];
A = [1,2];
b = 1;
x = fmincon(fun,x0,A,b)

运行m1.m脚本文件解得x如下:

x =

    0.5022    0.2489

约束类型2:线性不等式和等式约束

函数为F(x)=100*(x(2)-x(1)^2)^2 + (1-x(1))^2

从点 [0.5,0] 开始求最小值,约束为 x(1)+2x(2)≤1 和 2x(1)+x(2)=1。

A = [1,2]b = 1 为条件,以 A*x <= b 形式表达线性不等式约束。

Aeq = [2,1]beq = 1 为条件,以 Aeq*x = beq 形式表达线性等式约束。

建立m1脚本文件,写入下列程序:

fun = @(x)100*(x(2)-x(1)^2)^2 + (1-x(1))^2;
x0 = [0.5,0];
A = [1,2];
b = 1;
Aeq = [2,1];
beq = 1;
x = fmincon(fun,x0,A,b,Aeq,beq)

运行m1.m脚本文件解得x如下:


x =

    0.4149    0.1701

约束类型3:具有边界约束的最小化

函数为F(x)=100*(x(2)-x(1)^2)^2 + (1-x(1))^2,约束为 0≤x(1)≤1 和 0≤x(2)≤2,初值为区域内中点,无线性或非线性约束。

建立m1脚本文件,写入下列程序:

fun = @(x)1+x(1)/(1+x(2)) - 3*x(1)*x(2) + x(2)*(1+x(1));
lb = [0,0];%x(1),x(2)的下界
ub = [1,2];%x(1),x(2)的上界
A = [];%没有线性或非线性约束,矩阵里面为空
b = [];
Aeq = [];
beq = [];
x0 = (lb + ub)/2;%初值选取区域中部的初始点
x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub)

运行m1.m脚本文件解得x如下:

x =

    1.0000    2.0000

以上内容总结于matlab帮助文档,详细内容请自行参阅文档!

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值