1. 代数方程的求解
一般多项式方程的根可以为实数,也可以为复数。 MATLAB 符号运算工具箱中给出的solve() 函数对多项式类方程是十分有效的,可以用该函数求解出多项式方程所有的根。该函数的定义格式为:
S = solve(eqn1,eqn2,· · · ,eqnn) % 最简调用方式
[x,y,· · · ] = solve(eqn1,eqn2,· · · ,eqnn) % 直接得出根
[x,y,· · · ] = solve(eqn1,eqn2,· · · ,eqnn,'x,y,···') % 同上,并指定变量
MATLAB 语言环境提供了 fsolve() 函数,能够求出已知多元方程的一个实数根。该函数的调用格式为
x = fsolve(Fun,x0) % 最简求解语句
[x,f ,flag,out] = fsolve(Fun,x0,opt,p1,p2,···) % 一般求解格式
其中,Fun为所需求解方程的 M-函数或匿名函数描述,x0 为搜索点的初值方程求根程序将从该值开始以逐步减小误差的算法搜索出满足方程的实根x。
2. 无约束最优化问题求解
MATLAB 语言中提供了求解无约束最优化的函数 fminsearch(),其最优化工具箱中还提供了函数 fminunc(),二者的调用格式完全一致,为:
x = fminunc(Fun,x0) % 最简求解语句
[x,f ,flag,out] = fminunc(Fun,x0,opt,p1,p2,···) % 一般求解格式
其输入与返回参数的定义与 fsolve() 函数中的控制变量完全一致。
John D’Errico 开发的 fminsearchbnd() 函数扩展了现有函数的功能,能直接求解带有变量边界约束的最优化问题,该函数的调用格式为:
x = fminsearchbnd(Fun,x0,xm,xM)
[x,f ,flag,out] = fminsearchbnd(Fun,x0,xm,xM,opt,p1,p2,· · · )
如果上界或下界约束没有给出,则可以将其设置为空矩阵 []。
3. 有约束最优化问题的计算机求解
MATLAB 的最优化工具箱提供了求解二次型规划问题的 quadprog() 函数,其调用格式为:
[x,fopt,flag,c] = quadprog(H,f ,A,B,Aeq,Beq,xm,xM,x0,OPT)
MATLAB 最优化工具箱中提供了一个 fmincon() 函数,专门用于求解各种约下的最优化问题。该函数的调用格式为:
[x,fopt,flag,c] = fmincon(F,x0,A,B,Aeq,Beq,xm,xM,CF,OPT,p1,p2,· · · )
其中,F为给目标函数写的 M-函数或匿名函数,x0为初始搜索点。各个矩阵约束如果不存在,则应该用空矩阵来占位。CF为给非线性约束函数写的M-函数,OPT为控制选项。最优化运算完成后,结果将在变量x中返回,最优化的目标函数将在 fopt 变量中返回。和其他优化函数一样,选项 OPT 有时是很重要的。
4.混合整数规划问题的计算机求解
一般非线性整数规划问题与求解其MATLAB调用格式为:
[err,f ,x] = BNB20 new(fun,x0,intlist,xm,xM,A,B,Aeq,Beq,CFun)
MATLAB 函数 x= bintprog(f ,A,B,Aeq,Beq) 可以用来求解 0–1 线性规划问题,但该函数不能直接求解非线性 0–1 规划问题。 bintprog() 函数也可以求解由结构体描述的最优控制问题,其 solver 成员变量应该设置为 'bintprog'。
5. 线性矩阵不等式问题求解
线性矩阵不等式的概念及其在控制系统研究中的应用是由Willems 提出的,该方法的提出可以将很多控制中的问题变换成线性规划问题的求解,而线性规划问题的求解是很成熟的,所以由线性矩阵不等式来求解控制问题是很有意义的。
Lyapunov 不等式:该函数允许两种调用格式。若已知 A 矩阵,由 F = lyap2lmi(A) ,则返回的 F 是三维数组,其第 i 层,即 F (:,:,i) 为所需的 Fi 矩阵。若只想得出 n × n 的 A 矩阵转换出的线性矩阵不等式,则 F =lyap2lmi(n) ,这时得出的 F 仍为上述定义的三维数组。在程序中,若使 xi= 1,而其他的 xi 的值都为 0,则可以求出 Fi 矩阵。
描述线性矩阵不等式应该有几个步骤:
(1) 创建 LMI 模型
(2) 定义需要求解的变量
(3) 描述分块形式给出线性矩阵不等式
(4) 完成 LMI 模型描述
(5) 求解 LMI 问题
YALMIP工具箱提供了简单的决策变量表示方法,可以调用 sdpvar() 函数来表示,该函数的调用方法为:
X = sdpvar(n) % 对称方阵的表示方法
X = sdpvar(n,m) % 长方型一般矩阵的表示方法
X = sdpvar(n,n,'full') % 一般方阵的表示方法
这样定义的矩阵还可以进一步利用,例如,这样定义的向量还可以和 hankel()联合使用,
6. 多目标优化问题的求解
MATLAB 提供了 lsqnonlin() 函数直接求解无约束多目标函数的最小二乘这类问题,该函数的调用格式为:
[x,nf,fopt,flag,c] = lsqnonlin(F,x0,xm,xM)
其中,F为给目标函数写的 M-函数或匿名函数,x0为初始搜索点。最优化运算完成后,结果将在变量x中返回,最优化的目标函数将在 fopt 变量中返回,其范数由 nf 返回。和其他优化函数一样,选项 OPT 有时是很重要的。
事实上,多目标问题可以按照某种方法转换成特定的单目标问题,例如对多目标函数进行加权或最小二乘处理等。
7.动态规划及其在路径规划中的应用
MATLAB 语言支持关联矩阵的稀疏矩阵表示方法。假设已知某图由 n 个节点构成,图中含有 m 条边,由 ai 节点出发到 bi 节点为止的边权值为 wi , i =1, 2, · · · , m。这样,可以建立三个向量,并由它们构造出关联矩阵:
a = [a1,a2,···,am,n]; % 起始节点向量
b = [b1,b2,···,bm,n]; % 终止节点向量
w = [w1,w2,···,wm,0]; % 边权值向量
R = sparse(a,b,w); % 关联矩阵的稀疏矩阵表示
生物信息学工具箱中提供了有向图及最短路径搜索的现成函数,如 biograph()可以建立有向图对象,view()函数可以显示有向图,而 graphshortestpath()函数可以直接求解最短路径问题。这些函数的具体调用格式为:
P = biograph(R) % 建立有向图对象 P
[d,p] = graphshortestpath(P ,n1,n2) % 求解最短路径问题