非线性规划(1)
2021/11/10 6:13:33
本文主要是介绍非线性规划(1),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
提示:教程接内容:第三天打卡--非线性规划(1)_python菜鸟-CSDN博客,学习ing,先了解一下匿名函数哦。
文章目录
- 前言
- 一、建立模型
- 二、非线性规划函数
- 1.fmincon介绍
- 2.几个例子
- 总结
前言
提示:生活中大多数问题都是非线性的,虽然我们高中做的问题好多都是线性哒
提示:以下是本篇文章正文内容,下面案例可供参考
一、建立模型
示例:MATLAB 非线性模型如下:
二、非线性规划函数
1.fmincon用于约束非线性多变量函数的最小值。
语法格式如下:
x = fmincon(fun,x0,A,b,Aeq,beq) 在满足线性等式 Aeq*x = beq 以及不等式 A*x ≤ b 的情况下最小化 fun。如果不存在不等式,则设置 A = [] 和 b = []。 x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub) 对 x 中的设计变量定义一组下界和上界,使解始终在 lb ≤ x ≤ ub 范围内。如果不存在等式,请设置 Aeq = [] 和 beq = []。如果 x(i) 无下界,请设置 lb(i) = -Inf,如果 x(i) 无上界,请设置 ub(i) = Inf。 x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options) 使用 options 所指定的优化选项执行最小化。使用 optimoptions 可设置这些选项。如果没有非线性不等式或等式约束,请设置 nonlcon = []。
%参数介绍 b 和 beq 是向量,A 和 Aeq 是矩阵,c(x) 和 ceq(x) 是返回向量的函数,f(x) 是返回标量的函数。f(x)、c(x) 和 ceq(x) 可以是非线性函数。 x、lb 和 ub 可以作为向量或矩阵传递
2.举几个例子
例一(线性不等式约束):
%例子 fun =(x)100*(x(2)-x(1)^2)^2+(1-x(1))^2 %约束条件 【-1,2】为起点,求最小值x(1)+2x(2)<=1
MATLAB代码:
fun = @(x)100*(x(2)-x(1)^2)^2 + (1-x(1))^2;%匿名函数使用博客讲过 x0 = [-1,2];%起点可以更改,似乎没影响 A = [1,2]; b = 1; [x,y] = fmincon(fun,x0,A,b)%套用函数
运行结果:
例二(带有非线性约束):
%目标函数: min f (x) = x1^2 + x2^2 + x3^2 + 8 %约束条件: x1^2 − x2 + x3 ^2 ≥ 0 x1 + x2^2 + x3 ^3 ≤ 20 − x1 − x2^2 + 2 = 0 x2 + 2x3^2 = 3x1 x1,x2 , x3 ≥ 0
MATLAB代码:
clc clear all %% 主函数 options=optimset('largescale','off'); [x,y] = fmincon(@fun,rand(3,1),[],[],[],[],zeros(3,1),[], @nonlcon, options) %% 目标函数 function f=fun(x) f=sum(x.^2)+8; end %% 非线性约束条件 function [c,ceq]=nonlcon(x) c=[-x(1)^2+x(2)-x(3)^2 x(1)+x(2)^2+x(3)^3-20]; %非线性不等式约束 ceq=[-x(1)-x(2)^2+2 x(2)+2*x(3)^2-3]; %非线性等式约束 end
fun 是一个函数, fun 接受向量或数组 x 。并返回实数标量 f , 非线性约束条件。 nonlcon 是一个函数,接受向量或数组 X ,并返回两个数组c(x),ceq(x)
例三(非线性约束):
%边界函数,求圆内最小值 目标函数: fun = (x)100*(x(2)-x(1)^2)^2+(1-x(1))^2
%匿名函数 fun = (x)100*(x(2)-x(1)^2)^2+(1-x(1))^2; %约束条件 0 ≤ x (1) ≤ 0.5 0 0.2≤x(2)≤0.8 %进一步可得 lb = [0,0.2]; ub = [0.5,0.8]; %在(1/3,1/3)圆心,半径为1/3圆内找 function [c,ceq] = circle(x) c = (x(1)-1/3)^2 + (x(2)-1/3)^2 - (1/3)^2; ceq = []; %没有约束的参数设置 A = []; b = []; Aeq = []; beq = [];
完整代码:
记得前四行函数代码要新建函数(单独的哦)
function [c,ceq] = circle(x) c = (x(1)-1/3)^2 + (x(2)-1/3)^2 - (1/3)^2; ceq = []; end clc clear all fun = @(x)100*(x(2)-x(1)^2)^2 + (1-x(1))^2; lb = [0,0.2]; ub = [0.5,0.8]; A = []; b = []; Aeq = []; beq = []; x0 = [1/4,1/4]; nonlcon = @circle; [x,y] = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon)
结果:
总结
加油坚持一起学习改进,等我好好学学匿名函数。还有奥,川哥开始python爬虫了,我也要跟着了!虽然最近还在准备数学竞赛呜呜呜呜。我还不太会搞出川哥那么好看的板式,我尽量加油
这篇关于非线性规划(1)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-06-26结对编程到底难不难?答案在这里
- 2024-06-19《2023版Java工程师》课程升级公告
- 2024-06-15matplotlib作图不显示3D图,怎么办?
- 2024-06-1503-Loki 日志监控
- 2024-06-1504-让LLM理解知识 -Prompt
- 2024-06-05做软件测试需要懂代码吗?
- 2024-06-0514-ShardingSphere的分布式主键实现
- 2024-06-03为什么以及如何要进行架构设计权衡?
- 2024-05-31全网首发第二弹!软考2024年5月《软件设计师》真题+解析+答案!(11-20题)
- 2024-05-31全网首发!软考2024年5月《软件设计师》真题+解析+答案!(21-30题)