视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
MATLAB数学建模算法学习笔记
2025-10-02 13:50:55 责编:小OO
文档
关于MATLAB的数学建模算法学习笔记

目录

线性规划中应用:    3

非线性规划:    3

指派问题;投资问题:(0-1问题)    3

1) 应用fmincon命令语句    3

2)应用指令函数:bintprog    5

重新整理矩阵类型    6

1)应用reshape    6

2) 应用命令:nonzeros    7

非线性的最小值得求法:含有一个变量时,应用命令:fminsearch(@fun,x0)    7

含有多个变量时用:fminunc()    7

求解非线性多变量等式应用命令fsolve    8

二次规划问题应用:quadprog    8

把有条件的问题转化成无条件问题。罚函数法:fminunc    9

在Matlab中求解极值问题函数有:    9

1)fminbnd    9

1:在Matlab中求解距离的函数为:dist    9

最小生成树    9

prim算法    10

Find函数的应用    10

关于图论的Matlab工具箱相关命令    10

这些命令基本上都用到稀疏阵,产生稀疏阵用sparse命令    10

查看网图用view    11

积分命令quadl    11

Matlab插值工具箱    11

一维插值:interp1    11

二维插值:    11

插值接点为网格节点:interp2    11

插值节点为散乱节点:griddata    11

最小二乘法    11

2)应用lsqlin命令语句    12

三次样条差    12

积分函数命令   :quadl    13

同一组数据用不同插值方法效果比较    线性插值、三次样条插值    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具体见《数学建模算法与应用》P131    18

5) 多目标规划可以归结为:    18

分类问题    19

聚类分析:Q型和R型    19

用于求元素之间距离的命令:mandist    19

去掉非零元命令:nonzeros    19

去掉重复的元素命令:union    19

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 * X   Beq ,如果没有线性约束,则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=[0   3   5   7   9   11   12   13   14  15];

y0=[0  1.2  1.7  2.0  2.1  2.0  1.8  1.2   1.0  1.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('Piecewise linear')

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]

hold on

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为在定义区间中采用四五阶龙哥库塔方法取a——d之间的值,y为其求解对应的值。

3)高阶微分方程

方法:就是讲高阶微分方程转化为一节微分方程逐级求解,在同一个命令语句里将多同意解的多节微分方程求出。用:ode45、ode15s等命令。用法和2)中有点不同之处为:fun代表的是一次微分方程且为列向量形式。Y0为一次对应的变量的初始值且也是按列向量形式排列。具体实例见《数学建模算法与应用》的P118。

4)边值问题的Matlab数值解

应用函数:bvp4c%计算数值解以及bvpinit %给出初始猜测解的结构函数。具体用法见《数学建模算法与应用》P119

For example:

具体程序如下:

clc, clear

yprime=@(x,y)[y(2);(y(1)-1)*(1+y(2)^2)^(3/2)]; %定义一阶方程组的匿名函数

res=@(ya,yb)[ya(1);yb(1)]; %定义边值条件的匿名函数

yinit=@(x)[x.^2;2*x]; %定义初始猜测解的匿名函数,这里换了另外一个初始猜测解

solinit=bvpinit(linspace(-1,1,20),yinit); %给出初始猜测解的结构

sol=bvp4c(yprime,res,solinit); %计算数值解

fill(sol.x,sol.y(1,:),[0.7,0.7,0.7]) %填充解曲线

axis([-1,1,0,1])

xlabel('x','FontSize',12)

ylabel('h','Rotation',0,'FontSize',12)

多目标规划问题

解决方案:

1)加权系数法。

2)优先等级法。

3)序贯算法

     就是根据优先级的先后次序,将目标规划问题分解为一系列的单目标规划问题,然后再一次求解。

4)应用多目标规划的MATLAB函数fgoalattain具体见《数学建模算法与应用》P131

5)多目标规划可以归结为:

应用fgoalattain的多目标规划步骤实质上是将多目标先分解为单目标进行求解单目标的最优,再根据单目标求解的最优目标运用fgoalattain函数根据各目标的优先级、权重等进行重新规划,得到的才是符合整体目标的数值。

分类问题

《数学建模算法与应用》P193

一般用元素之间的距离来表示样本元素之间的相似性,一次来分类。

聚类分析:Q型和R型

用于求元素之间距离的命令:mandist

去掉非零元命令:nonzeros

去掉重复的元素命令:union

Matlab聚类分析的相关命令

相关资料在《数学建模算法与应用》P198——200下载本文

显示全文
专题