【最优化方法】实验一 熟悉MATLAB基本功能

实验一  熟悉MATLAB基本功能

实验的目的和要求:在本次实验中,通过亲临使用MATLAB,对该软件做一全面了解并掌握重点内容。

实验内容:

1、全面了解MATLAB系统

2、实验常用工具的具体操作和功能

学习建议:

本次实验在全面了解软件系统基础之上,学习和熟悉一些MATLAB的基础用途,重点掌握优化工具箱函数选用的内容。

重点和难点:

优化工具箱函数选用。

利用Matlab的优化工具箱,可以求解线性规划、非线性规划和多目标规划问题。具体而言,包括线性、非线性最小化,最大最小化,二次规划,半无限问题,线性、非线性方程(组)的求解,线性、非线性的最小二乘问题。另外,该工具箱还提供了线性、非线性最小化,方程求解,曲线拟合,二次规划等问题中大型课题的求解方法,为优化方法在工程中的实际应用提供了更方便快捷的途径。

优化工具箱中的函数

优化工具箱中的函数包括下面几类:

1**.最小化函数**

表1 最小化函数表

fgoalattain 多目标达到问题
fminbnd 有边界的标量非线性最小化
fmincon 有约束的非线性最小化
fminimax 最大最小化
fminsearch, fminunc 无约束非线性最小化
fseminf 半无限问题
linprog 线性课题
quadprog 二次课题

2**.方程求解函数**

表2 方程求解函数表

/ 线性方程求解
fsolve 非线性方程求解
fzero 标量非线性方程求解

3**.最小二乘(曲线拟合)函数**

表3 最小二乘函数表

/ 线性最小二乘
lsqlin 有约束线性最小二乘
lsqcurvefit 非线性曲线拟合
lsqnonlin 非线性最小二乘
lsqnonneg 非负线性最小二乘

4**.实用函数**

表4 实用函数表

optimset 设置参数
optimget

5**.大型方法的演示函数**

表5 大型方法的演示函数表

circustent 马戏团帐篷问题---二次课题
molecule 用无约束非线性最小化进行分子组成求解
optdeblur 用有边界线性最小二乘法进行图形处理

6**.中型方法的演示函数**

表6 中型方法的演示函数表

bandemo 香蕉函数的最小化
dfildemo 过滤器设计的有限精度
goaldemo 目标达到举例
optdemo 演示过程菜单
tutdemo 教程演示

下面以我们最常用的线性规划模型求解函数linprog作为典型对优化工具箱进行简单的介绍。

linprog函数

功能:求解线性规划问题。

在命令窗口,键入doc linprog,得到下图(该图为帮助窗口)

数学模型

其中f , x , b , beq , lbub 为向量,AAeq为矩阵。

语法

matlab 复制代码
x = linprog(f,A,b,Aeq,beq)

x = linprog(f,A,b,Aeq,beq,lb,ub)

x = linprog(f,A,b,Aeq,beq,lb,ub,x0)

x = linprog(f,A,b,Aeq,beq,lb,ub,x0,options)

[x,fval] = linprog(...)

[x,fval,exitflag] = linprog(...)

[x,fval,exitflag,output] = linprog(...)

[x,fval,exitflag,output,lambda] = linprog(...)

描述

x = linprog(f,A,b)求解问题 min f'x,约束条件为Ax <= b。

x = linprog(f,A,b,Aeq,beq)求解上面的问题,但增加等式约束,即Aeq*x = beq。若没有不等式存在,则令A=[]、b=[]。

x = linprog(f,A,b,Aeq,beq,lb,ub)定义设计变量x的下界lb和上界ub,使得x始终在该范围内。若没有等式约束,令Aeq=[]、beq=[]。

x = linprog(f,A,b,Aeq,beq,lb,ub,x0)设置初值为x0。该选项只适用于中型问题,缺省时大型算法将忽略初值。

x = linprog(f,A,b,Aeq,beq,lb,ub,x0,options)用options指定的优化参数进行最小化。

x,fval\] = linprog(...) 返回解x处的目标函数值fval。 \[x,lambda,exitflag\] = linprog(...)返回exitflag值,描述函数计算的退出条件。 \[x,lambda,exitflag,output\] = linprog(...) 返回包含优化信息的输出变量output。 \[x,fval,exitflag,output,lambda\] = linprog(...) 将解x处的拉格朗日乘子返回到lambda参数中。 #### **变量**: lambda参数 lambda参数是解x处的拉格朗日乘子。它有以下一些属性:  lambda.lower --lambda的下界。  lambda.upper --lambda的上界。  lambda.ineqlin --lambda的线性不等式。  lambda.eqlin --lambda的线性等式。 其它参数意义同前。 #### **算法**: 大型优化算法 大型优化算法采用的是LIPSOL法,该法在进行迭代计算之前首先要进行一系列的预处理。 中型优化算法 linprog函数使用的是投影法,就象quadprog函数的算法一样。linprog函数使用的是一种活动集方法,是线性规划中单纯形法的变种。它通过求解另一个线性规划问题来找到初始可行解。 #### **诊断**: 大型优化问题 算法的第一步涉及到一些约束条件的预处理问题。有些问题可能导致linprog函数退出,并显示不可行的信息。在本例中,exitflag参数将被设为负值以表示优化失败。 若Aeq参数中某行的所有元素都为零,但Beq参数中对应的元素不为零,则显示以下退出信息: Exiting due to infeasibility: an all zero row in the constraint matrix does not have a zero in corresponding right hand size entry. 若x的某一个元素没在界内,则给出以下退出信息: Exiting due to infeasibility: objective f'\*x is unbounded below. 若Aeq参数的某一行中只有一个非零值,则x中的相关值称为奇异变量。这里,x中该成分的值可以用Aeq和Beq算得。若算得的值与另一个约束条件相矛盾,则给出以下退出信息: Exiting due to infeasibility: Singleton variables in equality constraints are not feasible. 若奇异变量可以求解但其解超出上界或下界,则给出以下退出信息: Exiting due to infeasibility: singleton variables in the equality constraints are not within bounds. #### **应用实例** **这是matlab帮助窗口里给出的一个例子:** ```matlab Find x that minimizes f(x) = --5x1 -- 4x2 --6x3, subject to x1 -- x2 + x3 ≤ 20 3x1 + 2x2 + 4x3 ≤ 42 3x1 + 2x2 ≤ 30 0 ≤ x1, 0 ≤ x2, 0 ≤ x3. First, enter the coefficients f = [-5; -4; -6]; A = [1 -1 1 3 2 4 3 2 0]; b = [20; 42; 30]; lb = zeros(3,1); Next, call a linear programming routine. [x,fval,exitflag,output,lambda] = linprog(f,A,b,[],[],lb); Examine the solution and Lagrange multipliers: x,lambda.ineqlin,lambda.lower x = 0.0000 15.0000 3.0000 ans = 0.0000 1.5000 0.5000 ans = 1.0000 0.0000 0.0000 ``` 下面在来用linprog解我们最优化考试的题: ```matlab Min f(x)=-3x1 + x2 + x3; S.T. x1 -- 2*x2 + x3<=11 -4*x1 + x2 + 2*x3 -- x4=3 -2*x1 + x3=1 X1,x2,x3,x4>=0 ; 在matlab command window中键入以下指令: f=[-3;1;1]; \>> A=[1 -2 1;4 -1 -2]; \>> b=[11;-3]; \>> Aeq=[-2 0 1]; \>> beq=1; \>> lb=zeros(3,1); \>> [x,fval,exitflag]=linprog(f,A,b,Aeq,beq,lb) Optimization terminated. x = 4.0000 1.0000 9.0000 fval = -2.0000 exitflag = 1 ```

相关推荐
我不会编程55510 小时前
Python Cookbook-5.1 对字典排序
开发语言·数据结构·python
李少兄10 小时前
Unirest:优雅的Java HTTP客户端库
java·开发语言·http
无名之逆10 小时前
Rust 开发提效神器:lombok-macros 宏库
服务器·开发语言·前端·数据库·后端·python·rust
似水এ᭄往昔11 小时前
【C语言】文件操作
c语言·开发语言
啊喜拔牙11 小时前
1. hadoop 集群的常用命令
java·大数据·开发语言·python·scala
xixixin_11 小时前
为什么 js 对象中引用本地图片需要写 require 或 import
开发语言·前端·javascript
W_chuanqi11 小时前
安装 Microsoft Visual C++ Build Tools
开发语言·c++·microsoft
anlogic11 小时前
Java基础 4.3
java·开发语言
A旧城以西12 小时前
数据结构(JAVA)单向,双向链表
java·开发语言·数据结构·学习·链表·intellij-idea·idea
Liudef0612 小时前
deepseek v3-0324实现SVG 编辑器
开发语言·javascript·编辑器·deepseek