上QQ阅读APP看书,第一时间看更新
1.8 非线性方程组求解
方程组求解包括线性方程组求解和非线性方程组求解,非线性方程组求解包括线性规划求解和非线性规划求解方法。
1.8.1 线性规划求解
线性规划问题是目标函数和约束条件均为线性函数的问题,在MATLAB 2014a版中,线性规划问题解决函数为linprog,程序代码如下。
>> help linprog linprog - Solve linear programming problems This MATLAB function solves min f'*x such that A*x ≤ b. x = linprog(f,A,b) % 求min f'x,x∊Rn x = linprog(f,A,b,Aeq,beq) % 等式约束Aeq·x=beq,若没有不等式约束A·x ≤ b, 则A=[ ],b=[ ]。 x = linprog(f,A,b,Aeq,beq,lb,ub) % 指定x的范围lb ≤ x ≤ ub,若没有等式约束 Aeq·x=beq,则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为指定的优化参数
求解下面的优化问题:
其中:
编写MATLAB程序如下;
% Designed by Yu Shengwei From SWJTU University % 2014年12月29日 clc,clear,close all % 清理命令区、清理工作区、关闭显示图形 warning off % 消除警告 feature jit off % 加速代码运行 format shortE tic % 运算计时 f=[-25,-40,-61]; % 目标方程系数 A =[1 -1 1; % 不等式约束左侧系数 3 2 4; 3 2 0]; b = [20; 42; 30]; % b lb = zeros(3,1); % 下限大于等于0 [x,object] = linprog(f,A,b,[],[],lb,[]) toc % 计时结束
运行程序结果如下:
Optimization terminated. x = 9.2721e-11 1.5000e+01 3.0000e+00 object = -7.8300e+02 时间已过 0.072996 秒。 >>
1.8.2 非线性规划求解
在MATLAB中使用fminbnd函数求单变量函数最小值。
>> help fminbnd fminbnd - Find minimum of single-variable function on fixed interval This MATLAB function returns a value x that is a local minimizer of the function that is described in fun in the interval x1 < x < x2. x = fminbnd(fun,x1,x2) %返回自变量x在区间x1<x<x2上函数fun取最小值时的x值 x = fminbnd(fun,x1,x2,options) % options为指定优化参数选项 [x,fval] = fminbnd(…) % fval为目标函数的最小值 [x,fval,exitflag] = fminbnd(…) % xitflag为终止迭代的条件 [x,fval,exitflag,output] = fminbnd(…) % output为优化信息
计算下面函数在区间(0,1)内的最小值:
编写MATLAB程序如下:
clc,clear,close all % 清理命令区、清理工作区、关闭显示图形 warning off % 消除警告 feature jit off % 加速代码运行 format short tic % 运算计时 [x,fval,exitflag,output]=fminbnd('(4*x^3+2*cos(x)+3*x*log(x))/(2*exp(x))',0,1) toc % 计时结束 x = 0.3719 fval = 0.3328 exitflag = 1 output = iterations: 8 funcCount: 9 algorithm: 'golden section search, parabolic inte...' message: '优化已终止: 当前的 x 满足使用 1.000000e-04 的 OPT...' 时间已过 0.198718 秒。
MATLAB还提供了求解非线性有约束的多元函数的最小值函数fmincon。
>> help fmincon fmincon - Find minimum of constrained nonlinear multivariable function This MATLAB function starts at x0 and attempts to find a minimizer x of the function described in fun subject to the linear inequalities A*x ≤ b. x = fmincon(fun,x0,A,b) x = fmincon(fun,x0,A,b,Aeq,beq) x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub) x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon) x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options) x = fmincon(problem)
求下面函数在初始点(0,1)处的最优解:
其中:
先在MATLAB编辑器中建立非线性约束函数文件:
function [c, ceq] = non_constraint(x) c=(x(1)-1)^2-x(2); % 不等式约束 ceq=[0]; % 无等式约束 end
编写MATLAB主程序如下:
% Designed by Yu Shengwei From SWJTU University % 2014年12月29日 clc,clear,close all % 清理命令区、清理工作区、关闭显示图形 warning off % 消除警告 feature jit off % 加速代码运行 format short tic % 运算计时 fun='x(1)^2+x(2)^2-x(1)*x(2)-2*x(1)-5*x(2)'; %目标函数 x0=[0 1]; % 初值 A=[-2 3]; % 线性不等式约束 b=6; % 线性不等式约束 Aeq=[ ]; % 无线性等式约束 beq=[ ]; % 无线性等式约束 lb=[ ]; % x没有下界 ub=[ ]; % x没有上界 [x,fval]=fmincon(fun,x0,A,b,Aeq,beq,lb,ub,@non_constraint) toc % 计时结束
运行程序结果如下:
x = 2.9994 3.9992 fval = -13.0000 时间已过 0.127847 秒。