MATLAB数学建模算法学习笔记.docx
《MATLAB数学建模算法学习笔记.docx》由会员分享,可在线阅读,更多相关《MATLAB数学建模算法学习笔记.docx(18页珍藏版)》请在冰豆网上搜索。
![MATLAB数学建模算法学习笔记.docx](https://file1.bdocx.com/fileroot1/2022-10/29/61306206-6d87-4eef-9407-075f8601636f/61306206-6d87-4eef-9407-075f8601636f1.gif)
MATLAB数学建模算法学习笔记
关于MATLAB的数学建模算法学习笔记
目录
线性规划中应用:
3
非线性规划:
3
指派问题;投资问题:
(0-1问题)3
1)应用fmincon命令语句3
2)应用指令函数:
bintprog5
重新整理矩阵类型6
1)应用reshape6
2)应用命令:
nonzeros7
非线性的最小值得求法:
含有一个变量时,应用命令:
fminsearch(@fun,x0)7
含有多个变量时用:
fminunc()7
求解非线性多变量等式应用命令fsolve8
二次规划问题应用:
quadprog8
把有条件的问题转化成无条件问题。
罚函数法:
fminunc9
在Matlab中求解极值问题函数有:
9
1)fminbnd9
1:
在Matlab中求解距离的函数为:
dist9
最小生成树9
prim算法10
Find函数的应用10
关于图论的Matlab工具箱相关命令10
这些命令基本上都用到稀疏阵,产生稀疏阵用sparse命令10
查看网图用view11
积分命令quadl11
Matlab插值工具箱11
一维插值:
interp111
二维插值:
11
插值接点为网格节点:
interp211
插值节点为散乱节点:
griddata11
最小二乘法11
2)应用lsqlin命令语句12
三次样条差12
积分函数命令:
quadl13
同一组数据用不同插值方法效果比较线性插值、三次样条插值13
参数估计14
1)非线性最小拟合14
命令:
lsqcurvefit解决非线性拟合问题。
14
2)线性最小二乘法15
解微分方程16
1)求解常微分、线性常微分、齐次与非齐次微分方程等问题16
2)初值问题的matlab数值解16
3)高阶微分方程16
4)边值问题的Matlab数值解16
多目标规划问题18
解决方案:
18
1)加权系数法。
18
2)优先等级法。
18
3)序贯算法18
4)应用多目标规划的MATLAB函数fgoalattain具体见《数学建模算法与应用》P13118
5)多目标规划可以归结为:
18
分类问题19
聚类分析:
Q型和R型19
用于求元素之间距离的命令:
mandist19
去掉非零元命令:
nonzeros19
去掉重复的元素命令:
union19
Matlab聚类分析的相关命令19
知识点
线性规划中应用:
1)X=linprog(c,a,b,aeq,beq,zeros(x的个数,1))用于在限制条件下的最小值;
X=linprog(-c,a,b,aeq,beq,zeros(x的个数,1))用于在限制条件下的最大值;
非线性规划:
1)X=fmincon(fun,X0,A,B,Aeq,Beq,LB,UB,NONLCON,OPTIONS)
指派问题;投资问题:
(0-1问题)
1)应用fmincon命令语句
Matlab中非线性规划的数学模型写成以下形式
其中f(x)是标量函数,A,B,Aeq,Beq是相应维数的矩阵和向量,C(x),Ceq(x)是非线性向量函数。
Matlab中的命令是
X=FMINCON(FUN,X0,A,B,Aeq,Beq,LB,UB,NONLCON,OPTIONS)
它的返回值是向量x,其中FUN是用M文件定义的函数f(x);X0是x的初始值;A,B,Aeq,Beq定义了线性约束A*X≤B,Aeq*XBeq,如果没有线性约束,则A=[],B=[],Aeq=[],Beq=[];LB和UB是变量x的下界和上界,如果上界和下界没有约束,则LB=[],UB=[],如果x无下界,则LB的各分量都为-inf,如果x无上界,则UB的各分量都为inf;NONLCON是用M文件定义的非线性向量函数C(x),Ceq(x);OPTIONS定义了优化参数,可以使用Matlab缺省的参数设置。
例子:
2)应用指令函数:
bintprog
重新整理矩阵类型
1)应用reshape
2)应用命令:
nonzeros
功能是将a=nonzeros(b)矩阵b按列逐次去值放在a中形成一个列向量。
非线性的最小值得求法:
含有一个变量时,应用命令:
fminsearch(@fun,x0)
含有多个变量时用:
fminunc()
求解非线性多变量等式应用命令fsolve
二次规划问题应用:
quadprog
把有条件的问题转化成无条件问题。
罚函数法:
fminunc
其中:
用法[X,Y]=fminunc(‘test3’,rand(1,2))与[X,Y]=fminunc(@test3,rand(1,2))相同。
缺点:
精度不高。
在Matlab中求解极值问题函数有:
1)fminbnd
解决单变量非线性函数在区间上的极小值问题。
3)fseminf
解决多变量、含有非线性约束的极小值问题。
3)fminimax
解决多变量,满足在多个式子中极小——极大问题。
加一个负号就是解决多个式子中极大——极小值问题。
4)利用梯度求解约束优化问题。
1:
在Matlab中求解距离的函数为:
dist
2:
Sin()的反函数用asind()表示
3:
将数据生成txt文本:
dlmwrite
最小生成树
prim算法
Find函数的应用
1)I=find(A)找出A内的非零元素位置,按列查找。
一次写在I中。
2)[I,J,K]=find(A)找出A中非零元素的位置,将行标放入I中,将列表放入J中,将数值放入K中,按理寻找。
关于图论的Matlab工具箱相关命令
这些命令基本上都用到稀疏阵,产生稀疏阵用sparse命令
1)graphallshortestpaths求图中所有顶点之间的最短距离
2)graphconncomp找无向图的连通分支,或有向图的强(弱)连通分支
3)Graphisdag测试所有有向图是否含有圈,不含圈返回1,含圈返回0
4)Graphisomorphism确定连个图是否同构,同构返回1,否则返回0
5)Graphisspantree确定一个图是否是生成树,是返回1,否则返回0
6)Graphmaxflow计算有向图的最大流
7)Graphminspantree在图中找最小生成树
8)Graphpred2path把前驱顶点的一对顶点间的最短距离和嘴短路径
9)Graphtopoorder执行有向无圈图的拓扑排序
10)Graphtraverse求从一顶点出发,所能遍历图中的顶点
查看网图用view
用法:
view(biograph(ST,[],'ShowArrows','off','ShowWeights','on'))其中ST为树。
积分命令quadl
Matlab插值工具箱
一维插值:
interp1
二维插值:
插值接点为网格节点:
interp2
插值节点为散乱节点:
griddata
最小二乘法
1)
2)应用lsqlin命令语句
3)
三次样条差
积分函数命令:
quadl
同一组数据用不同插值方法效果比较线性插值、三次样条插值
例子clc;clear;
x0=[035791112131415];
y0=[01.21.72.02.12.01.81.21.01.6];
x=0:
0.1:
15;
y1=interp1(x0,y0,x);%%线性插值
y2=interp1(x0,y0,x,'spline');%%%立方样条插值
pp1=csape(x0,y0);
y3=ppval(pp1,x);%%边界为一阶导插值
pp2=csape(x0,y0,'second');
y4=ppval(pp2,x);%%边界为二阶导插值
[x',y1',y2',y3',y4'];
subplot(1,3,1)
plot(x0,y0,'+',x,y1)
title('Piecewiselinear')
subplot(1,3,2)
plot(x0,y0,'+',x,y2)
title('Spline1')
subplot(1,3,3)
plot(x0,y0,'+',x,y3)
title('Spline2')
dx=diff(x);%%diff为一阶微分
dy=diff(y3);
dy_dx=dy./dx;
dy_dx0=dy_dx
(1)
%%求13<=x<=15内y的最小值
ytemp=y3(131:
151);
ymin=min(ytemp);
index=find(y3==ymin);
%%
xmin=x(index);
[xmin,ymin]
holdon
plot(xmin,ymin,'ro')
参数估计
1)非线性最小拟合
命令:
lsqcurvefit解决非线性拟合问题。
人口数学模型的应用:
例子:
数学建模算法与应用的的6章人口预报模型
clc,clear
a=textread('data4.txt');%把原始数据保存在纯文本文件data4.txt中
x=a([2:
2:
6],:
)';%提出人口数据
x=nonzeros(x);%去掉后面的零,并变成列向量
t=[1790:
10:
2000]';
t0=t
(1);x0=x
(1);
fun=@(cs,td)cs
(1)./(1+(cs
(1)/x0-1)*exp(-cs
(2)*(td-t0)));%cs
(1)=xm,cs
(2)=r
cs=lsqcurvefit(fun,rand(2,1),t(2:
end),x(2:
end),zeros(2,1))%%拟合,满足使最小二乘最小的参数cs
xhat=fun(cs,[t;2010])%预测已知年代和2010年的人口
2)线性最小二乘法
人口数学模型的应用,例子:
1)利用后项查分
clc,clear
a=textread('data4.txt');%把原始数据保存在纯文本文件data4.txt中
x=a([2:
2:
6],:
)';
x=nonzeros(x);
t=[1790:
10:
2000]';
a=[ones(21,1),-x(2:
end)];
b=diff(x)./x(2:
end)/10;%%时间间隔为10年
cs=a\b;
r=cs
(1),xm=r/cs
(2)
2)利用前项查分
clc,clear
a=textread('data4.txt');%把原始数据保存在纯文本文件data4.txt中
x=a([2:
2:
6],:
)';x=nonzeros(x);
t=[1790:
10:
2000]';
a=[ones(21,1),-x(1:
end-1)];
b=diff(x)./x(1:
end-1)/10;
cs=a\b;
r=cs
(1),xm=r/cs
(2)
解微分方程
1)求解常微分、线性常微分、齐次与非齐次微分方程等问题
用命令:
dsolve数学建模算法与应用p112-P114
2)初值问题的matlab数值解
用:
ode45(采用四五阶龙哥库塔方简称RK方法)、ode23(采用二三阶RK方法)、ode113(采用多步法,效率一般比ode45高)
用法:
例如:
[x,y]=ode45(fun,[a,d],y0)其中fun为定义微分方程,[a,d]为定义区间,y0为初始值,x为在定义区间中采用四