数学建模常用的matlab求解命令.docx
- 文档编号:12775053
- 上传时间:2023-04-22
- 格式:DOCX
- 页数:11
- 大小:25.25KB
数学建模常用的matlab求解命令.docx
《数学建模常用的matlab求解命令.docx》由会员分享,可在线阅读,更多相关《数学建模常用的matlab求解命令.docx(11页珍藏版)》请在冰豆网上搜索。
数学建模常用的matlab求解命令
一、数学规划模型的matlab求解
1.线性规划问题
MATLAB中,线性规划问题〔Linear Programming〕的求解使用的是函数linprog。
函数 linprog 格式 x = linprog(f,A,b)
%求min f ' *x sub.to A*x<=b 线性规划的最优解。
x = linprog(f,A,b,Aeq,beq)
%等式约束Aeq*x=beq。
x = linprog(f,A,b,Aeq,beq,lb,ub)
%指定x的X围LB<=X<=UB
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(…)
% 返回目标函数最优值,即fval= f ' *x。
[x,fval,lambda] = linprog(…)
% lambda为解x的Lagrange乘子。
[x, fval,lambda,exitflag] = linprog(…)
% exitflag为终止迭代的错误条件。
[x,fval, lambda,exitflag,output] = linprog(…)
% output为关于优化的一些信息说明 :
若exitflag>0表示函数收敛于解x,exitflag=0表示超过函数估值或迭代的最大数字,exitflag<0表示函数不收敛于解x;
若lambda=lower 表示下界lb,lambda=upper表示上界ub,lambda=ineqlin表示不等式约束,lambda=eqlin表示等式约束,lambda中的非0元素表示对应的约束是有效约束;
output=iterations表示迭代次数,output=algorithm表示使用的运算规则,output=cgiterations表示PCG迭代次数。
2.非线性规划问题
1〕利用函数fminbnd
求无约束有界的一元函数的最小值格式
x = fminbnd(fun,x1,x2)
%返回自变量x在区间[x1,x2]上函数fun的最小值
x = fminbnd(fun,x1,x2,options)
% options为指定优化参数选项
[x,fval] = fminbnd(…)
% fval为目标函数的最小值
[x,fval,exitflag] = fminbnd(…)
%xitflag为终止迭代的条件
[x,fval,exitflag,output] = fminbnd(…)
% output为优化信息
说明 若参数exitflag>0,表示函数收敛于x,若exitflag=0,表示超过函数估计值或迭代的最大数字,exitflag<0表示函数不收敛于x;若参数output=iterations表示迭代次数,output=funccount表示函数赋值次数,output=algorithm表示所使用的算法。
2〕利用函数fminsearch
求无约束多元函数最小值 函数 fminsearch
格式 x = fminsearch(fun,x0)
%x0为初始点,fun为目标函数的表达式字符串或MATLAB自定义函数的函数柄。
x = fminsearch(fun,x0,options)
% options查optimset
[x,fval] = fminsearch(…) %最优点的函数值
[x,fval,exitflag] = fminsearch(…)
% exitflag与单变量情形一致
[x,fval,exitflag,output] = fminsearch(…)
%output与单变量情形一致
注意:
fminsearch采用了Nelder-Mead型简单搜寻法。
3〕 利用函数fminunc
求多变量无约束函数最小值 函数 fminunc
格式 x = fminunc(fun,x0)
%返回给定初始点x0的最小函数值点
%function[f,g]=fun(x)
f=x
(1)^2+2*x
(1)*x
(2)+x
(2)^2;%function
g=[2*x
(1)+2*x
(2)
2*x
(1)+2*x
(2)];%gradient
x = fminunc(fun,x0,options)
% options为指定优化参数
[x,fval] = fminunc(…) %fval最优点x处的函数值
[x,fval,exitflag] = fminunc(…) % exitflag为终止迭代的条件,与上同。
[x,fval,exitflag,output] = fminunc(…) %output为输出优化信息
[x,fval,exitflag,output,grad] = fminunc(…)
% grad为函数在解x处的梯度值
[x,fval,exitflag,output,grad,hessian] = fminunc(…) %目标函数在解x处的海赛〔Hessian〕值
注意:
当函数的阶数大于2时,使用fminunc比fminsearch更有效,但当所选函数高度不连续时,使用fminsearch效果较好。
4〕利用fmincon
求线性有约束的多元函数的最小值函数
fmincon 格式如下
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,fval] = fmincon(…)
[x,fval,exitflag] = fmincon(…)
[x,fval,exitflag,output] = fmincon(…)
[x,fval,exitflag,output,lambda] = fmincon(…)
[x,fval,exitflag,output,lambda,grad] = fmincon(…)
[x,fval,exitflag,output,lambda,grad,hessian] = fmincon(…)
3.二次规划问题 函数
quadprog
格式 x = quadprog(H,f,A,b)
%其中H,f,A,b为标准形中的参数,x为目标函数的最小值。
x = quadprog(H,f,A,b,Aeq,beq) %Aeq,beq满足等约束条件 。
目标函数表示成如下矩阵形式:
约束条件写成如下形式:
x = quadprog(H,f,A,b,Aeq,beq,lb,ub)
% lb,ub分别为解x的下界与上界。
x = quadprog(H,f,A,b,Aeq,beq,lb,ub,x0)
%x0为设置的初值
x = quadprog(H,f,A,b,Aeq,beq,lb,ub,x0,options)
% options为指定的优化参数
[x,fval] = quadprog(…)
%fval为目标函数最优值
[x,fval,exitflag] = quadprog(…)
% exitflag与线性规划中参数意义相同
[x,fval,exitflag,output] = quadprog(…)
% output与线性规划中参数意义相同
[x,fval,exitflag,output,lambda] = quadprog(…)
% lambda与线性规划中参数意义相同
4. 极小化极大〔Minmax〕问题
函数 fminimax
格式如下
x = fminimax(fun,x0)
x = fminimax(fun,x0,A,b)
x = fminimax(fun,x0,A,b,Aeq,beq)
x = fminimax(fun,x0,A,b,Aeq,beq,lb,ub)
x = fminimax(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon)
x = fminimax(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options)
[x,fval,maxfval] = fminimax(…)
[x,fval,maxfval,exitflag] = fminimax(…)
[x,fval,maxfval,exitflag,output] = fminimax(…)
[x,fval,maxfval,exitflag,output,lambda] = fminimax(…)
5.多目标规划问题
函数 fgoalattain
格式 x = fgoalattain(fun,x0,goal,weight)
x = fgoalattain(fun,x0,goal,weight,A,b)
x = fgoalattain(fun,x0,goal,weight,A,b,Aeq,beq)
x = fgoalattain(fun,x0,goal,weight,A,b,Aeq,beq,lb,ub)
x = fgoalattain(fun,x0,goal,weight,A,b,Aeq,beq,lb,ub,nonlcon)
x = fgoalattain(fun,x0,goal,weight,A,b,Aeq,beq,lb,ub,nonlcon,options)
[x,fval] = fgoalattain(…)
[x,fval,attainfactor] = fgoalattain(…)
[x,fval,attainfactor,exitflag] = fgoalattain(…)
[x,fval,attainfactor,exitflag,output] = fgoalattain(…)
[x,fval,attainfactor,exitflag,output,lambda] = fgoalattain(…)
6.最小二乘最优问题
有约束线性最小二乘 函数 lsqlin
格式 x = lsqlin(C,d,A,b)
%求在约束条件 下,方程Cx = d的最小二乘解x。
x = lsqlin(C,d,A,b,Aeq,beq)
x = lsqlin(C,d,A,b,Aeq,beq,lb,ub)
x = lsqlin(C,d,A,b,Aeq,beq,lb,ub,x0)
% x0为初始解向量
x = lsqlin(C,d,A,b,Aeq,beq,lb,ub,x0,options)
% options为指定优化参数
[x,resnorm] = lsqlin(…)
% resnorm=norm(C*x-d)^2,即2-X数。
[x,resnorm,residual] = lsqlin(…)
%residual=C*x-d,即残差。
[x,resnorm,residual,exitflag] = lsqlin(…)
%exitflag为终止迭代的条件
[x,resnorm,residual,exitflag,output] = lsqlin(…)
% output表示输出优化信息
[x,resnorm,residual,exitflag,output,lambda] = lsqlin(…)
% lambda为解x的Lagrange乘子
7、非线性数据〔曲线〕拟合 函数
lsqcurvefit
格式 x = lsqcurvefit(fun,x0,xdata,ydata)
x = lsqcurvefit(fun,x0,xdata,ydata,lb,ub)
x = lsqcurvefit(fun,x0,xdata,ydata,lb,ub,options)
[x,resnorm] = lsqcurvefit(…)
[x,resnorm,residual] = lsqcurvefit(…)
[x,resnorm,residual,exitflag] = lsqcurvefit(…)
[x,resnorm,residual,exitflag,output] = lsqcurvefit(…)
[x,resnorm,residual,exitflag,output,lambda] = lsqcurvefit(…)
8、非线性最小二乘 函数
lsqnonlin
格式 x = lsqnonlin(fun,x0)
%x0为初始解向量;fun为 ,i=1,2,…,m,fun返回向量值F,而不是平方和值,平方和隐含在算法中,fun的定义与前面相同。
x = lsqnonlin(fun,x0,lb,ub) %lb、ub定义x的下界和上界 。
x = lsqnonlin(fun,x0,lb,ub,options) %options为指定优化参数,若x没有界,则lb=[ ],ub=[ ]。
[x,resnorm] = lsqnonlin(…)
% resnorm=sum(fun(x).^2),即解x处目标函数值。
[x,resnorm,residual] = lsqnonlin(…)
% residual=fun(x),即解x处fun的值。
[x,resnorm,residual,exitflag] = lsqnonlin(…)
%exitflag为终止迭代条件。
[x,resnorm,residual,exitflag,output] = lsqnonlin(…)
%output输出优化信息。
[x,resnorm,residual,exitflag,output,lambda] = lsqnonlin(…)
%lambda为Lagrage乘子
[x,resnorm,residual,exitflag,output,lambda,jacobian] =lsqnonlin(…)
%fun在解x处的Jacobian矩阵。
9、非负线性最小二乘 函数
lsqnonneg
格式 x = lsqnonneg(C,d)
%C为实矩阵,d为实向量 x = lsqnonneg(C,d,x0) % x0为初始值且大于0
x = lsqnonneg(C,d,x0,options)
% options为指定优化参数
[x,resnorm] = lsqnonneg(…)
% resnorm=norm (C*x-d)^2
[x,resnorm,residual] = lsqnonneg(…)
%residual=C*x-d [x,resnorm,residual,exitflag] = lsqnonneg(…)
[x,resnorm,residual,exitflag,output] = lsqnonneg(…)
[x,resnorm,residual,exitflag,output,lambda] = lsqnonneg(…)
10.0-1整数规划求解函数
格式
x=BINTPROG(f)
minf'*xsubjectto:
A*x<=b,
Aeq*x=beq,
wheretheelementsofxarebinaryintegers,i.e.,0'sor1's.
x=BINTPROG(f,A,b)
x=BINTPROG(f,A,b,Aeq,beq)
x=BINTPROG(f,A,b,Aeq,beq,x0)
x=BINTPROG(f,A,b,Aeq,beq,x0,OPTIONS)
11.非线性方程(组)求解
1〕求非线性方程的解 函数 fzero
格式 x = fzero (fun,x0)
%用fun定义表达式f(x),x0为初始解。
x = fzero (fun,x0,options)
[x,fval] = fzero(…)
%fval=f(x) [x,fval,exitflag] = fzero(…)
[x,fval,exitflag,output] = fzero(…)
2〕求非线性方程组的解 函数 fsolve
格式 x = fsolve(fun,x0)
%用fun定义向量函数,其定义方式为:
先定义方程函数function F = myfun (x)。
F =[表达式1;表达式2;…表达式m] %保存为myfun.m,
并用下面方式调用:
x = fsolve(myfun,x0),
%x0为初始估计值。
x = fsolve(fun,x0,options) [x,fval] = fsolve(…)
%fval=F(x),即函数值向量
[x,fval,exitflag] = fsolve(…)
[x,fval,exitflag,output] = fsolve(…)
[x,fval,exitflag,output,jacobian] = fsolve(…)
% jacobian为解x处的Jacobian阵。
其余参数与前面参数相似。
二、微分方程问题的matlab求解
1、用Matlab求解常微分方程的符号解,首先定义符号变量,然后调用命令dsolve。
dsolve的调用格式如下
[y1,…,yN]=dsolve(eqns,conds,Name,Value)
其中eqns是符号微分方程或符号微分方程组,conds是初值条件或边值条件,Name和Value是可选的成对参数。
另外,dsolve也可以直接求解齐次线性微分方程组
,其中
是适当维数的矩阵。
2、初值问题的Matlab数值解
Matlab的工具箱提供了几个解常微分方程的功能函数,如ode45,ode23,ode113,其中ode45采用四五阶龙格库塔方法〔以下简称RK方法〕,是解非刚性常微分方程的首选方法,ode23采用二三阶RK方法,ode113采用的是多步法,效率一般比ode45高。
Matlab的工具箱提供了几个解刚性常微分方程的功能函数,如ode15s,ode23s,ode23t,ode23tb。
对简单的一阶方程的初值问题
Matlab的函数形式是
[t,y]=solver('F',tspan,y0),这里solver为ode45,ode23,ode113,输入参数F是用M文件定义的微分方程
右端的函数。
tspan=[t0,tfinal]是求解区间,y0是初值。
注意函数solver('F',tspan,y0)也可以返回一个值,返回一个值时,返回的是结构数组,利用Matlab命令deval和返回的结构数组,我们可以计算我们感兴趣的任意点的函数值。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数学 建模 常用 matlab 求解 命令