数学建模算法的matlab代码

数学建模算法的matlab代码
数学建模算法的matlab代码

N=13;

for i=1:N

for j=1:N

C(i,j)=inf;

end

end

for i=1:N

C(i,i)=0;

end

C(1,2)=6.0;C(1,13)=12.9;

C(2,3)=5.9;C(2,4)=10.3;

C(3,4)=12.2;C(3,5)=17.6;

C(4,13)=8.8;C(4,7)=7.4;

C(4,5)=11.5;

C(5,2)=17.6;C(5,6)=8.2;

C(6,9)=14.9;C(6,7)=20.3;

C(7,9)=19.0;C(7,8)=7.3;

C(8,9)=8.1;C(8,13)=9.2;

C(9,10)=10.3;

C(10,11)=7.7;

C(11,12)=7.2;

C(12,13)=7.9;

for i=1:N

for j=1:N

if C(i,j) < inf

C(j,i)=C(i,j);

end

end

end

for i=1:N

C(i,i)=0;

end

R=[4 7 6 5 3 2 1 13 12 11 10 9 8];

%%%%%%%%jiaohuan3.m%%%%%%%%%% n=0;

for I=1:(N-2)

for J=(I+1):(N-1)

for K=(J+1):N

n=n+1;

Z(n,:)=[I J K];

end

end

end

R=1:N

for m=1:(N*(N-1)*(N-2)/6)

I=Z(m,1);J=Z(m,2);K=Z(m,3);

r=R;

if J-I~=1&K-J~=1&K-I~=N-1

for q=1:(J-I)

r(I+q)=R(J+1-q);

end

for q=1:(K-J)

r(J+q)=R(K+1-q);

end

end

if J-I==1&K-J==1

r(K)=R(J);r(J)=R(K);

end

if J-I==1&K-J~=1&K-I~=N-1

for q=1:(K-J)

r(I+q)=R(I+1+q);

end

r(K)=R(J);

end

if K-J==1&J-I~=1&K~=N

for q=1:(J-I)

r(I+1+q)=R(I+q);

end

r(I+1)=R(K);

end

if I==1&J==2&K==N

for q=1:(N-2)

r(1+q)=R(2+q);

end

r(N)=R(2);

end

if I==1&J==(N-1)&K==N

for q=1:(N-2)

r(q)=R(1+q);

end

r(N-1)=R(1);

end

if J-I~=1&K-I==N-1

for q=1:(J-1)

r(q)=R(1+q);

end

r(J)=R(1);

end

if J==(N-1)&K==N&J-I~=1

r(J+1)=R(N);

for q=1:(N-J-1)

r(J+1+q)=R(J+q);

end

end

if cost_sum(r,C,N)

R=r

end

end

fprintf('总长为%f\n',cost_sum(R,C,N))

%%%%%%cost_sum.m%%%%%%%%function y=cost_sum(x,C,N)y=0;for i=1:(N-1) y=y+C(x(i),x(i+1));endy=y+C(x(N),x(1));

三,灰色预测代码

clear

clc

X=[136 143 165 152 165 181 204 272 319 491 571 605 665 640 628];

x1(1)=X(1);

X1=[];

for i=1:1:14

x1(i+1)=x1(i)+X(i+1);

X1=[X1,x1(i)];

end

X1=[X1,X1(14)+X(15)]

for k=3:1:15

p(k)=X(k)/X1(k-1);

p1(k)=X1(k)/X1(k-1);

end

p,p1

clear k

Z=[];

for k=2:1:15

z(k)=0.5*X1(k)+0.5*X1(k-1);

Z=[Z,z(k)];

end

Z

B=[-Z',ones(14,1)]

Y=[];

clear i

for i=2:1:15

Y=[Y;X(i)];

end

Y

A=inv(B'*B)*B'*Y

clear k

y1=[];

for k=1:1:15

y(k)=(X(1)-A(2)/A(1))*exp(-A(1)*(k-1))+A(2)/A(1);

y1=[y1;y(k)];

end

y1

clear k

X2=[];

for k=2:1:15

x2(k)=y1(k)-y1(k-1);

X2=[X2;x2(k)];

end

X2=[y1(1);X2]

e=X'-X2

m=abs(e)./X'

s=e'*e

n=sum(m)/13

clear k

syms k

y=(X(1)-A(2)/A(1))*exp(-A(1)*(k-1))+A(2)/A(1)

Y1=[];

for j=16:1:21

y11=subs(y,k,j)-subs(y,k,j-1);

Y1=[Y1;y11];

end

Y1

%程序中的变量定义:alpha是包含α、μ值的矩阵;%ago是预测后累加值矩阵;var是预测值矩阵;%error是残差矩阵; c是后验差比值function basicgrey(x,m) %定义函数basicgray(x)if nargin==1 %m为想预测数据的个数,默认为1 m=1;endclc; %清屏,以使计算结果独立显示if length(x(:,1))==1 %对输入矩阵进行判断,如不是一维列矩阵,进行转置变换x=x';endn=length(x); %取输入数据的样本量x1(:,1)=cumsum(x); %计算累加值,并将值赋与矩阵be for i=2:n %对原始数列平行移位Y(i-1,:)=x(i,:);endfor i=2:n %计算数据矩阵B的第一列数据z(i,1)=0.5*x1(i-1,:)+0.5*x1(i,:);endB=ones(n-1,2); %构造数据矩阵BB(:,1)=-z(2:n,1);alpha=inv(B'*B)*B'*Y; %计算参数α、μ矩阵for i=1:n+m %计算数据估计值的累加数列,如改n+1为n+m可预测后m个值ago(i,:)=(x1(1,:)-alpha(2,:)/alpha(1,:))*exp(-alpha(1,:)*(i-1))+alpha(2,:)/alpha(1,:);en

dvar(1,:)=ago(1,:);for i=1:n+m-1 %可预测后m个值var(i+1,:)=ago(i+1,:)-ago(i,:); %估计值的累加数列的还原,并计算出下m个预测值end[P,c,error]=lcheck(x,var); %进行后验差检验[rela]=relations([x';var(1:n)']); %关联度检验ago %显示输出预测值的累加数列alpha %显示输出参数α、μ数列var %显示输出预测值error %显示输出误差P %显示计算小残差概率 c %显示后验差的比值crela %显示关联度judge(P,c,rela) %评价函数显示这个模型是否合格

function judge(P,c,rela)

%评价指标并显示比较结果

if rela>0.6

'根据经验关联度检验结果为满意(关联度只是参考主要看后验差的结果)' else

'根据经验关联度检验结果为不满意(关联度只是参考主要看后验差的结果)' end

if P>0.95&c<0.5

'后验差结果显示这个模型评价为“优”'

else if P>0.8&c<0.5

'后验差结果显示这个模型评价为“合格”'

else if P>0.7&c<0.65

'后验差结果显示这个模型评价为“勉强合格”'

else

'后验差结果显示这个模型评价为“不合格”'

end

end

end

function [P,c,error]=lcheck(x,var)

%进行后验差检验

n=length(x);

for i=1:n

error(i,:)=abs(var(i,:)-x(i,:)); %计算绝对残差

end

c=std(abs(error))/std(x); %调用统计工具箱的标准差函数计算后验差的比值c

s0=0.6745*std(x);

ek=abs(error-mean(error));

pk=0;

for i=1:n

if ek(i,:)

pk=pk+1;

end

end

P=pk/n; %计算小残差概率

%附带的质料里有一部分讲了关联度

function [rela]=relations(x)

%以x(1,:)的参考序列求关联度

[m,n]=size(x);

for i=1:m

for j=n:-1:2

x(i,j)=x(i,j)/x(i,1);

end

end

for i=2:m

x(i,:)=abs(x(i,:)-x(1,:)); %求序列差

end

c=x(2:m,:);

Max=max(max(c)); %求两极差

Min=min(min(c));

p=0.5; %p称为分辨率,0

for i=1:m-1

for j=1:n

r(i,j)=(Min+p*Max)/(c(i,j)+p*Max); %计算关联系数

end

end

for i=1:m-1

rela(i)=sum(r(i,:))/n; %求关联度

end

四,非线性拟合

function f=example1(c,tdata)

f=c(1)*(exp(-c(2)*tdata)-exp(-c(3)*tdata));

function f=zhengtai(c,x)

f=(1./(sqrt(2.*3.14).*c(1))).*exp(-(x-c(1)).^2./(2.*c(2)^2));

x=1:1:12;

y=[0

1

3

10

12

8

2

1

2

]';

c0=[2 8];

for i=1:1000

c=lsqcurvefit(@zhengtai,c0,x,y);

c0=c;

end

y1=(1./(sqrt(2.*3.14).*c(1))).*exp(-(x-c(1)).^2./(2.*c(2)^2));

plot(x,y,'r-',x,y1);

legend('实验数据','拟合曲线')

x=[0.25 0.5 0.75 1 1.5 2 2.5 3 3.5 4 4.5 5 6 7 8 9 10 11 12 13 14 15 16]';

y=[30 68 75 82 82 77 68 68 58 51 50 41 38 35 28 25 18 15 12 10 7 7 4]';

f=@(c,x)c(1)*(exp(-c(2)*x)-exp(-c(3)*x));

c0=[114 0.1 2]';

for i=1:50

opt=optimset('TolFun',1e-3);

[c R]=nlinfit(x,y,f,c0,opt)

c0=c;

hold on

plot(x,c(1)*(exp(-c(2)*x)-exp(-c(3)*x)),'g')

end

t=[0.25 0.5 0.75 1 1.5 2 2.5 3 3.5 4 4.5 5 6 7 8 9 10 11 12 13 14 15 16];y=[30 68 75 82 82 77 68 68 58 51 50 41 38 35 28 25 18 15 12 10 7 7 4];c0=[1 1 1];for i=1:50 c=lsqcurvefit(@example1,c0,t,y);

c0=c;endy1=c(1)*(exp(-c(2)*t)-exp(-c(3)*t));plot(t,y,'+',t,y1);legend('实验数据','拟合曲线')

五,插值拟合

相关知识

在生产和科学实验中,自变量与因变量间的函数关系有时不能写出解析表达式,而只能得到函数在若干点的函数值或导数值,或者表达式过于复杂而需要较大的计算量。当要求知道其它点的函数值时,需要估计函数值在该点的值。

为了完成这样的任务,需要构造一个比较简单的函数,使函数在观测点的值等于已知的值,或使函数在该点的导数值等于已知的值,寻找这样的函数有很多方法。根据测量数据的类型有以下两类处理观测数据的方法。

(1)测量值是准确的,没有误差,一般用插值。

(2)测量值与真实值有误差,一般用曲线拟合。

在MATLAB中,无论是插值还是拟合,都有相应的函数来处理。

一、插值

1、一维插值:

已知离散点上的数据集,即已知在点集X=上的函数值Y=,构造一个解析函数(其图形为一曲线)通过这些点,并能够求出这些点之间的值,这一过程称为一维插值。MATLAB命令:yi=interp1(X, Y, xi, method)

该命令用指定的算法找出一个一元函数,然后以给出处的值。xi可以是一个标量,也可以是一个向量,是向量时,必须单调,method可以下列方法之一:

‘nearest’:最近邻点插值,直接完成计算;

‘spline’:三次样条函数插值;

‘linear’:线性插值(缺省方式),直接完成计算;

‘cubic’:三次函数插值;

对于[min{xi},max{xi}]外的值,MATLAB使用外推的方法计算数值。

例1:已知某产品从1900年到2010年每隔10年的产量为:75.995, 91.972, 105.711, 123.203,131.699, 150.697, 179.323, 203.212, 226.505, 249.633, 256.344,

267.893,计算出1995年的产量,用三次样条插值的方法,画出每隔一年的插值曲

线图形,同时将原始的数据画在同一图上。

解:程序如下

[plain]view plaincopyprint?

1.year=1900:10:2010;

2.

3.product=[75.995, 91.972, 105.711,123.203, 131.699, 150.697, 179.323,

203.212, 226.505, 249.633, 256.344,267.893]

4.

5.p1995=interp1(year,product,1995)

6.

7.x=1900:2010;

8.

9.y=interp1(year,product,x,'cubic');

10.

11.p lot(year,product,'o',x,y);

1.years=1950:10:1990;

2.

3.service=10:10:30;

4.

5.wage=[150.697 169.592 187.652

6.

7.179.323 195.072 250.287

8.

9.203.212 239.092 322.767

10.

11.226.505 273.706 426.730

12.

13.249.633 370.281 598.243];

14.

15.m esh(service,years,wage) %绘原始数据图

16.

17.w=interp2(service,years,wage,15,1975); %求点(15,1975)处的值

1.x=1:6;

2.

3.y=1:4;

4.

5.t=[12,10,11,11,13,15

6.

7.16,22,28,35,27,20

8.

9.18,21,26,32,28,25;

10.

11.20,25,30,33,32,20]

12.

13.s ubplot(1,2,1)

14.

15.m esh(x,y,t)

16.

17.x1=1:0.1:6;

18.

19.y1=1:0.1:4;

20.

21.[x2,y2]=meshgrid(x1,y1);

22.

23.t1=interp2(x,y,t,x2,y2,'cubic');

24.

25.s ubplot(1,2,2)

26.

27.m esh(x1,y1,t1);

87 88 89 98 99 97 96 98 9492 87

1、画出原始数据图;

2、画出加密后的地貌图,并在图中标出原始数据

二、拟合

曲线拟合

已知离散点上的数据集,即已知在点集上的函数值,构造一个解析函数(其图形为一曲线)使在原离散点上尽可能接近给定的值,这一过程称为曲线拟合。最常用的曲线拟合方法是最小二乘法,该方法是寻找函数使得最小。

MATLAB函数:p=polyfit(x,y,n)

[p,s]= polyfit(x,y,n)

说明:x,y为数据点,n为多项式阶数,返回p为幂次从高到低的多项式系数向量p。x必须是单调的。矩阵s用于生成预测值的误差估计。(见下一函数polyval)

多项式曲线求值函数:polyval( )

调用格式:y=polyval(p,x)

[y,DELTA]=polyval(p,x,s)

说明:y=polyval(p,x)为返回对应自变量x在给定系数P的多项式的值。

[y,DELTA]=polyval(p,x,s) 使用polyfit函数的选项输出s得出误差估计Y DELTA。它假设polyfit函数数据输入的误差是独立正态的,并且方差为常数。则Y DELTA将至少包含50%的预测值。

例5:求如下给定数据的拟合曲线,x=[0.5,1.0,1.5,2.0,2.5,3.0],

y=[1.75,2.45,3.81,4.80,7.00,8.60]。

解:MATLAB程序如下:

[plain]view plaincopyprint?

1.x=[0.5,1.0,1.5,

2.0,2.5,

3.0];

2.

3.y=[1.75,2.45,3.81,

4.80,7.00,8.60];

4.

5.p=polyfit(x,y,2)

6.

7.x1=0.5:0.05:3.0;

8.

9.y1=polyval(p,x1);

10.

11.p lot(x,y,'*r',x1,y1,'-b')

1.x=1:20;

2.

3.y=x+3*sin(x);

4.

5.p=polyfit(x,y,6)

6.

7.xi=linspace(1,20,100);

8.

9.z=polyval(p,xi); %?à??ê??ó?μoˉêy

10.

11.p lot(x,y,'o',xi,z,'k:',x,y,'b')

1.x=1:20;

2.

3.y=x+3*sin(x);

4.

5.p=polyfit(x,y,10)

6.

7.xi=linspace(1,20,100);

8.

9.z=polyval(p,xi);

10.

11.p lot(x,y,'o',xi,z,'k:',x,y,'b')

数学建模常用软件

数学建模常用软件有哪些哈 MatlabMathematicalingoSAS详细介绍:数学建模软件介绍一般来说学习数学建模,常用的软件有四种,分别是:matlab、lingo、Mathematica和SAS下面简单介绍一下这四种。 1.MA TLAB的概况MA TLAB是矩阵实验室(Matrix Laboratory)之意。除具备卓越的数值计算能力外,它还提供了专业水平的符号计算,文字处理,可视化建模仿真和实时控制等功能。MATLAB的基本数据单位是矩阵,它的指令表达式与数学,工程中常用的形式十分相似,故用MATLAB来解算问题要比用C,FORTRAN等语言完相同的事情简捷得多. 当前流行的MA TLAB 5.3/Simulink 3.0包括拥有数百个内部函数的主包和三十几种工具包(Toolbox).工具包又可以分为功能性工具包和学科工具包.功能工具包用来扩充MATLAB的符号计算,可视化建模仿真,文字处理及实时控制等功能.学科工具包是专业性比较强的工具包,控制工具包,信号处理工具包,通信工具包等都属于此类. 开放性使MATLAB广受用户欢迎.除内部函数外,所有MA TLAB主包文件和各种工具包都是可读可修改的文件,用户通过对源程序的修改或加入自己编写程序构造新的专用工具包. 2.Mathematica的概况Wolfram Research 是高科技计算机运算( Technical computing )的先趋,由复杂理论的发明者Stephen Wolfram 成立于1987年,在1988年推出高科技计算机运算软件Mathematica,是一个足以媲美诺贝尔奖的天才产品。Mathematica 是一套整合数字以及符号运算的数学工具软件,提供了全球超过百万的研究人员,工程师,物理学家,分析师以及其它技术专业人员容易使用的顶级科学运算环境。目前已在学术界、电机、机械、化学、土木、信息工程、财务金融、医学、物理、统计、教育出版、OEM 等领域广泛使用。Mathematica 的特色·具有高阶的演算方法和丰富的数学函数库和庞大的数学知识库,让Mathematica 5 在线性代数方面的数值运算,例如特征向量、反矩阵等,皆比Matlab R13做得更快更好,提供业界最精确的数值运算结果。·Mathematica不但可以做数值计算,还提供最优秀的可设计的符号运算。·丰富的数学函数库,可以快速的解答微积分、线性代数、微分方程、复变函数、数值分析、机率统计等等问题。·Mathematica可以绘制各专业领域专业函数图形,提供丰富的图形表示方法,结果呈现可视化。·Mathematica可编排专业的科学论文期刊,让运算与排版在同一环境下完成,提供高品质可编辑的排版公式与表格,屏幕与打印的自动最佳化排版,组织由初始概念到最后报告的计划,并且对txt、html、pdf 等格式的输出提供了最好的兼容性。·可与C、C++ 、Fortran、Perl、Visual Basic、以及Java 结合,提供强大高级语言接口功能,使得程序开发更方便。·Mathematica本身就是一个方便学习的程序语言。Mathematica提供互动且丰富的帮助功能,让使用者现学现卖。强大的功能,简单的操作,非常容易学习特点,可以最有效的缩短研发时间。 3.lingo的概况LINGO则用于求解非线性规划(NLP—NON—LINEAR PROGRAMMING)和二次规则(QP—QUARATIC PROGRAMING)其中LINGO 6.0学生版最多可版最多达300个变量和150个约束的规则问题,其标准版的求解能力亦再10^4量级以上。虽然LINDO和LINGO不能直接求解目标规划问题,但用序贯式算法可分解成一个个LINDO和LINGO能解决的规划问题。模型建立语言和求解引擎的整合LINGO是使建立和求解线性、非线性和整数最佳化模型更快更简单更有效率的综合工具。LINGO提供强大的语言和快速的求解引擎来阐述和求解最佳化模型。■简单的模型表示LINGO可以将线性、非线性和整数问题迅速得予以公式表示,并且容易阅读、了解和修改。■方便的数据输入和输出选择LINGO建立的模型可以直接从数据库或工作表获取资料。同样地,LINGO可以将求解结果直接输出到数据库或工作表。■强大的求解引擎LINGO内建的求解引擎有线性、非线性(convex and nonconvex)、二次、二次

数学建模算法分类

数学模型按照不同的分类标准有许多种类: 1.按照模型的数学方法分,有几何模型,图论模型,微分方程模型。概率模型,最优控制模型,规划论模型,马氏链模型。 2.按模型的特征分,有静态模型和动态模型,确定性模型和随机模型,离散模型和连续性模型,线性模型和非线性模型。 3.按模型的应用领域分,有人口模型,交通模型,经济模型,生态模型,资源模型。环境模型。 4.按建模的目的分,有预测模型,优化模型,决策模型,控制模型等。 5.按对模型结构的了解程度分,有白箱模型,灰箱模型,黑箱模型。 数学建模的十大算法: 蒙特卡洛算法(该算法又称随机性模拟算法,是通过计算机仿真来解决问题的算法,同时可以通过模拟可以来检验自己模型的正确性,比较好用的算法。) 数据拟合、参数估计、插值等数据处理算法(比赛中通常会遇到大量的数据需要处理,而处理数据的关键就在于这些算法,通常使用matlab作为工具。) 线性规划、整数规划、多元规划、二次规划等规划类问题(建模竞赛大多数问题属于最优化问题,很多时候这些问题可以用数学规划算法来描述,通常使用lingo、lingdo软件实现)图论算法(这类算法可以分为很多种,包括最短路、网络流、二分图等算法,涉及到图论的问题可以用这些方法解决,需要认真准备。) 动态规划、回溯搜索、分治算法、分支定界等计算机算法(这些算法是算法设计中比较常用的方法,很多场合可以用到竞赛中) 最优化理论的三大非经典算法:模拟退火法、神经网络、遗传算法(这些问题时用来解决一些较困难的最优化问题的算法,对于有些问题非常有帮助,但是算法的实现比较困难,需谨慎使用) 网格算法和穷举法(当重点讨论模型本身而情史算法的时候,可以使用这种暴力方案,最好使用一些高级语言作为编程工具) 一些连续离散化方法(很多问题都是从实际来的,数据可以是连续的,而计算机只认得是离散的数据,因此将其离散化后进行差分代替微分、求和代替积分等思想是非常重要的。 数值分析算法(如果在比赛中采用高级语言进行编程的话,那一些数值分析中常用的算法比如方程组求解、矩阵运算、函数积分等算法就需要额外编写库函数进行调用。) 图像处理算法(赛题中有一类问题与图形有关,即使与图形无关,论文中也应该要不乏图片的,这些图形如何展示以及如何处理就是需要解决的问题,通常使用matlab来处理问题。) 数学建模方法 统计:1.预测与预报2.评价与决策3.分类与判别4.关联与因果 优化:5.优化与控制 预测与预报 ①灰色预测模型(必须掌握) 满足两个条件可用: a数据样本点个数少,6-15个 b数据呈现指数或曲线的形式 ②微分方程预测(备用) 无法直接找到原始数据之间的关系,但可以找到原始数据变化速度之间的关系,通过公式

数学建模常用算法程序

假设图G 权的邻接矩阵为0A , ????? ? ??? ???=nn n n n n a a a a a a a a a A 2 1 22221 112110 来存放各边长度,其中: 0=ii a n i ,,2,1 =; ∞=ij a j i ,之间没有边,在程序中以各边都不可能达到的充分大的数代替; ij ij w a = ij w 是j i ,之间边的长度,n j i ,,2,1, =。 对于无向图,0A 是对称矩阵,ji ij a a =。 Floyd 算法的基本思想是:递推产生一个矩阵序列n k A A A A ,,,,,10 ,其中),(j i A k 表示从顶点i v 到顶点j v 的路径上所经过的顶点序号不大于k 的最短路径长度。 计算时用迭代公式: )),(),(),,(min(),(111j k A k i A j i A j i A k k k k ---+= k 是迭代次数,n k j i ,,2,1,, =。 最后,当n k =时,n A 即是各顶点之间的最短通路值。 例10 用Floyd 算法求解例1。 矩阵path 用来存放每对顶点之间最短路径上所经过的顶点的序号。Floyd 算法的Matlab 程序如下: clear; clc; M=10000; a(1,:)=[0,50,M,40,25,10]; a(2,:)=[zeros(1,2),15,20,M,25]; a(3,:)=[zeros(1,3),10,20,M]; a(4,:)=[zeros(1,4),10,25]; a(5,:)=[zeros(1,5),55]; a(6,:)=zeros(1,6); b=a+a';path=zeros(length(b)); for k=1:6 for i=1:6 for j=1:6 if b(i,j)>b(i,k)+b(k,j)

数学建模算法大全层次分析法

第八章 层次分析法 层次分析法(Analytic Hierarchy Process ,简称AHP )是对一些较为复杂、较为模糊的问题作出决策的简易方法,它特别适用于那些难于完全定量分析的问题。它是美国运筹学家T. L. Saaty 教授于70年代初期提出的一种简便、灵活而又实用的多准则决策方法。 §1 层次分析法的基本原理与步骤 人们在进行社会的、经济的以及科学管理领域问题的系统分析中,面临的常常是一个由相互关联、相互制约的众多因素构成的复杂而往往缺少定量数据的系统。层次分析法为这类问题的决策和排序提供了一种新的、简洁而实用的建模方法。 运用层次分析法建模,大体上可按下面四个步骤进行: (i )建立递阶层次结构模型; (ii )构造出各层次中的所有判断矩阵; (iii )层次单排序及一致性检验; (iv )层次总排序及一致性检验。 下面分别说明这四个步骤的实现过程。 1.1 递阶层次结构的建立与特点 应用AHP 分析决策问题时,首先要把问题条理化、层次化,构造出一个有层次的结构模型。在这个模型下,复杂问题被分解为元素的组成部分。这些元素又按其属性及关系形成若干层次。上一层次的元素作为准则对下一层次有关元素起支配作用。这些层次可以分为三类: (i )最高层:这一层次中只有一个元素,一般它是分析问题的预定目标或理想结果,因此也称为目标层。 (ii )中间层:这一层次中包含了为实现目标所涉及的中间环节,它可以由若干个层次组成,包括所需考虑的准则、子准则,因此也称为准则层。 (iii )最底层:这一层次包括了为实现目标可供选择的各种措施、决策方案等,因此也称为措施层或方案层。 递阶层次结构中的层次数与问题的复杂程度及需要分析的详尽程度有关,一般地层次数不受限制。每一层次中各元素所支配的元素一般不要超过9个。这是因为支配的元素过多会给两两比较判断带来困难。 下面结合一个实例来说明递阶层次结构的建立。 例1 假期旅游有1P 、2P 、3P 3个旅游胜地供你选择,试确定一个最佳地点。 在此问题中,你会根据诸如景色、费用、居住、饮食和旅途条件等一些准则去反复比较3个侯选地点。可以建立如下的层次结构模型。 目标层O 选择旅游地 准则层C 景色 费用 居住 饮食 旅途 措施层P 1P 2P 3P 1.2 构造判断矩阵 层次结构反映了因素之间的关系,但准则层中的各准则在目标衡量中所占的比重并不一定相同,在决策者的心目中,它们各占有一定的比例。 在确定影响某因素的诸因子在该因素中所占的比重时,遇到的主要困难是这些比重常常不易定量化。此外,当影响某因素的因子较多时,直接考虑各因子对该因素有多大程度的影响时,常常会因考虑不周全、顾此失彼而使决策者提出与他实际认为的

MATLAB及在数学建模中的应用

第1讲MATLAB及 在数学建模中的应用 ? MatLab简介及基本运算?常用计算方法 ?应用实例

一、 MatLab简介及基本运算 1.1 MatLab简介 1.2 MatLab界面 1.3 MatLab基本数学运算 1.4 MatLab绘图

1.1 MatLab简介?MATLAB名字由MATrix和 LABoratory 两词组成。20世纪七十年代后期, 美国新墨西哥大学计算机科学系主任Cleve Moler教授为减轻学生编程负担,为学生设计了一组调用LINPACK和EISPACK库程序的“通俗易用”的接口,此即用FORTRAN编写的萌芽状态的MATLAB。

?经几年的校际流传,在Little的推动下,由Little、Moler、Steve Bangert合作,于1984年成立了MathWorks公司,并把MATLAB正式推向市场。从这时起,MATLAB的内核采用C语言编写,而且除原有的数值计算能力外,还新增了数据图视功能。

?1997年春,MATLAB5.0版问世,紧接着是5.1、5.2、5.3、6.0、6.1、6.5、7.0版。现今的MATLAB拥有更丰富的数据类型和结构、更友善的面向对象、更加快速精良的图形可视、更广博的数学和数据分析资源、更多的应用开发工具。 ?20世纪九十年代的时候,MATLAB已经成为国际控制界公认的标准计算软件。

?MATLAB具有用法简易、可灵活运用、程式结构强又兼具延展性。以下为其几个特色: ①可靠的数值运算和符号计算。在MATLAB环境中,有超过500种数学、统计、科学及工程方面的函 数可使用。 ②强大的绘图功能。 MATLAB可以绘制各种图形,包括二维和三维图形。 ③简单易学的语言体系。 ④为数众多的应用工具箱。

数学建模10种常用算法

数学建模10种常用算法 1、蒙特卡罗算法(该算法又称随机性模拟算法,是通过计算机仿真来解决问题的算法,同时可以通过模拟可以来检验自己模型的正确性,是比赛时必用的方法) 2、数据拟合、参数估计、插值等数据处理算法(比赛中通常会遇到大量的数据需要处理,而处理数据的关键就在于这些算法,通常使用Matlab作为工具) 3、线性规划、整数规划、多元规划、二次规划等规划类问 题(建模竞赛大多数问题属于最优化问题,很多时候这些问题可以用数学规划算法来描述,通常使用Lindo、Lingo软件实现) 4、图论算法(这类算法可以分为很多种,包括最短路、网络流、二分图等算法,涉及到图论的问题可以用这些方法解决,需要认真准备) 5、动态规划、回溯搜索、分治算法、分支定界等计算机算法(这些算法是算法设计中比较常用的方法,很多场合可以用到竞赛中) 6、最优化理论的三大非经典算法:模拟退火法、神经网络、遗传算法(这些问题是用来解决一些较困难的最优化问题的算法,对于有些问题非常有帮助,但是算法的实现比较困难,需慎重使用) 7、网格算法和穷举法(网格算法和穷举法都是暴力搜索最优点的算法,在很多竞赛题中有应用,当重点讨论模型本身而轻视算法的时候,可以使用这种暴力方案,最好使用一些高级语言作为编程工具) 8、一些连续离散化方法(很多问题都是实际来的,数据可以是连续的,而计算机只认的是离散的数据,因此将其离散化后进行差分代替微分、求和代替积分等思想是非常重要的) 9、数值分析算法(如果在比赛中采用高级语言进行

编程的话,那一些数值分析中常用的算法比如方程组 求解、矩阵运算、函数积分等算法就需要额外编写库 函数进行调用) 10、图象处理算法(赛题中有一类问题与图形有关, 即使与图形无关,论文中也应该要不乏图片的,这些 图形如何展示以及如何处理就是需要解决的问题,通 常使用Matlab进行处 参数估计 C.F. 20世纪60年代,随着电子计算机的 。参数估计有多种方法,有最小二乘法、极大似然法、极大验后法、最小风险法和极小化极大熵法等。在一定条件下,后面三个方法都与极大似然法相同。最基本的方法是最小二乘法和极大似然法. 基本介绍 参数估计(parameter 尽可能接近的参数 误差 平方和  θ,使已知数据Y 最大,这里P(Y│θ)是数据Y P(Y│θ)。在实践中这是困难的,一般可假设P(Y│θ

matlab常用算法大全(数学建模)

本文总结了matlab常用的几个算法,希望对数学建模有帮助。 利用matlab编程FFD算法完成装箱问题: 设有6种物品,它们的体积分别为:60、45、35、20、20和20单位体积,箱子的容积为100个单位体积。 建立box_main.m function[box_count,b]=box_main(v) vmax=100; sort(v,'descend'); n=length(v); b=zeros(1,n); for i=1:n b(i)=vmax; end box_count=1; for i=1:n for j=1:box_count if v(i)<=b(j) %可以放入 b(j)=b(j)-v(i); break; else%不可放入时 continue; end end if j==box_count box_count=box_count+1; end end box_count=box_count-1; end 主程序为: v=[60 45 35 20 20 20]; [box_count,b]=box_main(v) 结果: box_count =3 b =5 15 80 100 100 100 所以,使用的箱子数为3, 使用的箱子的剩余空间为5,15 ,80。 “超市大赢家”提供了50种商品作为奖品供中奖顾客选择,车的容量为1000dm3 , 奖品i 占用的空间为wi dm3 ,价值为vi 元, 具体的数据如下: vi = { 220, 208, 198, 192, 180, 180, 165, 162, 160, 158,155, 130, 125, 122, 120, 118, 115, 110, 105, 101, 100, 100, 98,96, 95, 90, 88, 82, 80, 77, 75, 73, 72, 70, 69, 66, 65, 63, 60, 58,56, 50, 30, 20, 15, 10, 8, 5, 3, 1} wi = {80, 82, 85, 70, 72, 70, 66, 50, 55, 25, 50, 55, 40, 48,50, 32, 22, 60, 30, 32, 40, 38, 35, 32, 25, 28, 30, 22, 50, 30, 45,30, 60, 50, 20, 65, 20, 25, 30, 10, 20, 25, 15, 10, 10, 10, 4, 4, 2,1}。 解: 模型建立:用价值密度贪婪准则的方法设x=v/w,对x做正向排序,依次选取商品。 建立chaoshi.m function [item_count,y]=chaoshi(v,w,car) n=length(v); x=zeros(n,3); x(:,1)=v'; x(:,2)=w'; x(:,3)=v'./v'; x=sortrows(x,-3); item_count=0;for i=1:n if car>=x(i,2) car=car-x(i,2); item_count=item_count+1; else break; end end

数学建模常用方法

数学建模常用方法 建模常用算法,仅供参考: 1、蒙特卡罗算法(该算法又称随机性模拟算法,是通过计算机仿真来解决问题的算法,同时可以通过模拟可以来检验自己模型的正确性,是比赛时必 用的方法) 2、数据拟合、参数估计、插值等数据处理算法(比赛中通常会遇到大量的数据需要处理,而处理数据的关键就在于这些算法,通常使用M a t l a b作为工具) 3、线性规划、整数规划、多元规划、二次规划等规划类问题(建模竞赛大多数问题属于最优化问题,很多时候这些问题可以用数学规划算法来描述,通 常使用L i n d o、L i n g o软件实现) 4、图论算法(这类算法可以分为很多种,包括最短路、网络流、二分图等算法,涉及到图论的问题可以用这些方法解决,需要认真准备) 5、动态规划、回溯搜索、分治算法、分支定界等计算机算法(这些算法是算法设计中比较常用的方法,很多场合可以用到竞赛中) 6、最优化理论的三大非经典算法:模拟退火法、神经网络、遗传算法(这些问题是用来解决一些较困难的最优化问题的算法,对于有些问题非常有帮助,但是算法的实现比较困难,需慎重使用) 7、网格算法和穷举法(网格算法和穷举法都是暴力搜索最优点的算法,在很多竞赛题中有应用,当重点讨论模型本身而轻视算法的时候,可以使用这种 暴力方案,最好使用一些高级语言作为编程工具) 8、一些连续离散化方法(很多问题都是实际来的,数据可以是连续的,而计 算机只认的是离散的数据,因此将其离散化后进行差分代替微分、求和代替积分等思想是非常重要的) 9、数值分析算法(如果在比赛中采用高级语言进行编程的话,那一些数值分析中常用的算法比如方程组求解、矩阵运算、函数积分等算法就需要额外编写库函数进行调用) 10、图象处理算法(赛题中有一类问题与图形有关,即使与图形无关,论文 中也应该要不乏图片的,这些图形如何展示以及如何处理就是需要解决的问题,通常使用M a t l a b进行处理) 一、在数学建模中常用的方法: 1.类比法 2.二分法 3.量纲分析法 4.差分法 5.变分法 6.图论法 7.层次分析法 8.数据拟合法 9.回归分析法 10.数学规划(线性规划、非线性规划、整数规划、动态规划、目标规划) 11.机理分析 12.排队方法

推荐:数学建模参赛真实经验(强烈推荐)1

数学建模参赛真实经验(强烈推荐) 本文档节选自: Matlab在数学建模中的应用,卓金武等编著,北航出版社,2011年4月出版 以下内容根据作者的讲座整理出来,多年数学建模实践经历证明这些经验对数学建模参赛队员非常有帮助,希望大家结合自己的实践慢慢体会总结,并祝愿大家在数学建模和Matlab世界能够找到自己的快乐和价值所在。 一、如何准备数学建模竞赛 一般,可以把参加数学建模竞赛的过程分成三个阶段:第一阶段,是个人的入门和积累阶段,这个阶段关键看个人的主观能动性;第二阶段,就是通常各学校都进行的集训阶段,通过模拟实战来提高参赛队员的水平;第三阶段是实际比赛阶段。这里讲的如何准备数学建模竞赛是针对第一阶段来讲的。 回顾作者自己的参赛过程,认为这个阶段是真正的学习阶段,就像是修炼内功一样,如果在这个阶段打下深厚的基础,对后面的两个阶段非常有利,也是个人是否能在建模竞赛中占优势的关键阶段。下面就分几个方面谈一下如何准备数学建模竞赛。 首先是要有一定的数学基础,尤其是良好的数学思维能力。并不是数学分数高就说明有很高的数学思维能力,但扎实的数学知识是数学思维的根基。对大学生来说,有高等数学、概率和线性代数就够了,当然其它数学知识知道的越多越好了,如图论、排队论、泛函等。我大一下学期开始接触数学建模,大学的数学课程只学习过高等数学。说这一点,主要想说明只要数学基础还可以,平时的数学考试都能在80分以上就可以参加数学建模竞赛了,数学方面的知识可以在以后的学习中逐渐去提高,不必刻意去补充单纯的数学理论。 真正准备数学建模竞赛应该从看数学建模书籍开始,要知道什么是数学建模,有哪些常见的数学模型和建模方法,知道一些常见的数学建模案例,这些方面都要通过看建模方面的书籍而获得。现在数学建模的书籍也比较多,图书馆和互联网上都有丰富的数学建模资料。作者认为姜启源、谢金星、叶齐孝、朱道元等老师的建模书籍都非常的棒,可以先看二三本。刚开始看数学建模书籍时,一定会有很多地方看不懂,但要知道基本思路,时间长了就知道什么问题用什么建模方法求解了。这里面需要提的一点是,运筹学与数学建模息息相关,最好再看一二本运筹学著作,仍然可以采取诸葛亮的看书策略,只观其大略就可以了,等知道需要具体用哪块知识后,再集中精力将其消化,然后应用之。 大家都知道,参加数学建模竞赛一定要有些编程功底,当然现在有Matlab这种强大的工程软件,对编程的的要求就降低了,至少入门容易多了,因为很容易用1条Matlab命令解决以前要用20行C语言才能实现的功能。因为Matlab的强大功能,Matlab在数学建模中已经有了非常广泛的应用,在很多学校,数学建模队员必须学习Matlab。当然Matlab的入门也非常容易,只要有本Matlab参考书,照猫画虎可以很快实现一些基本的数学建模功能,如数据处理、绘图、计算等。我的一个队友,当年用一天时间把一本二百多页的Matlab 教程操作完了,然后在经常运用中,慢慢地就变成了一名Matlab高手了。 对于有些编程基础的同学,最好再看一些算法方面的书籍,了解常见的数据结构和基本

数学建模十种常用算法

数学建模有下面十种常用算法, 可供参考: 1.蒙特卡罗算法(该算法又称随机性模拟算法,是通过计算机仿真来解决问 题的算法,同时可以通过模拟可以来检验自己模型的正确性,是比赛时必用的方法) 2.数据拟合、参数估计、插值等数据处理算法(比赛中通常会遇到大量的数 据需要处理,而处理数据的关键就在于这些算法,通常使用Matlab作为工具) 3.线性规划、整数规划、多元规划、二次规划等规划类问题(建模竞赛大多 数问题属于最优化问题,很多时候这些问题可以用数学规划算法来描述,通常使用Lindo、Lingo软件实现) 4.图论算法(这类算法可以分为很多种,包括最短路、网络流、二分图等算 法,涉及到图论的问题可以用这些方法解决,需要认真准备) 5.动态规划、回溯搜索、分治算法、分支定界等计算机算法(这些算法是算 法设计中比较常用的方法,很多场合可以用到竞赛中) 6.最优化理论的三大非经典算法:模拟退火法、神经网络、遗传算法(这些 问题是用来解决一些较困难的最优化问题的算法,对于有些问题非常有帮助,但是算法的实现比较困难,需慎重使用) 7.网格算法和穷举法(网格算法和穷举法都是暴力搜索最优点的算法,在很 多竞赛题中有应用,当重点讨论模型本身而轻视算法的时候,可以使用这种暴力方案,最好使用一些高级语言作为编程工具) 8.一些连续离散化方法(很多问题都是实际来的,数据可以是连续的,而计 算机只认的是离散的数据,因此将其离散化后进行差分代替微分、求和代替积分等思想是非常重要的) 9.数值分析算法(如果在比赛中采用高级语言进行编程的话,那一些数值分 析中常用的算法比如方程组求解、矩阵运算、函数积分等算法就需要额外编写库函数进行调用) 10.图象处理算法(赛题中有一类问题与图形有关,即使与图形无关,论文中 也应该要不乏图片的,这些图形如何展示以及如何处理就是需要解决的问题,通常使用Matlab 进行处理)

数学建模matlab例题参考及练习

数学实验与数学建模 实验报告 学院: 专业班级: 姓名: 学号: 完成时间:年月日

承 诺 书 本人承诺所呈交的数学实验与数学建模作业都是本人通过学习自行进行编程独立完成,所有结果都通过上机验证,无转载或抄袭他人,也未经他人转载或抄袭。若承诺不实,本人愿意承担一切责任。 承诺人: 年 月 日 数学实验学习体会 (每个人必须要写字数1200字以上,占总成绩的20%) 练习1 一元函数的图形 1. 画出x y arcsin =的图象. 2. 画出x y sec =在],0[π之间的图象. 3. 在同一坐标系中画出x y =,2x y =,3 x y = ,3x y =,x y =的图象. 4. 画出3 2 3 2)1()1()(x x x f + +-=的图象,并根据图象特点指出函数)(x f 的奇偶性. 5. 画出)2ln(1++=x y 及其反函数的图象. 6. 画出3 21+=x y 及其反函数的图象.

练习2 函数极限 1.计算下列函数的极限. (1) x x x 4 cos 1 2 sin 1 lim 4 - + π → . 程序: sym x; f=(1+sin(2*x))/(1-cos(4*x)); limit(f,x,pi/4) 运行结果: lx21 ans = 1 (2). 程序: sym x; f=(1+cos(x))^(3*sec(x)); limit(f,x,pi/2) 运行结果: lx22 ans = exp(3) (3) 2 2 ) 2 ( sin ln lim x x x - π π → . 程序: sym x; f=log(sin(x))/(pi-2*x)^2; limit(f,x,pi/2) 运行结果: lx23 ans = -1/8 (4) 2 1 2 lim x x e x →. 程序: x x x sec 3 2 ) cos 1( lim+ π →

数学建模中常见的十大模型讲课稿

数学建模中常见的十 大模型

精品文档 数学建模常用的十大算法==转 (2011-07-24 16:13:14) 转载▼ 1. 蒙特卡罗算法。该算法又称随机性模拟算法,是通过计算机仿真来解决问题的算法,同时可以通过模拟来检验自己模型的正确性,几乎是比赛时必用的方法。 2. 数据拟合、参数估计、插值等数据处理算法。比赛中通常会遇到大量的数据需要处理,而处理数据的关键就在于这些算法,通常使用MA TLAB 作为工具。 3. 线性规划、整数规划、多元规划、二次规划等规划类算法。建模竞赛大多数问题属于最优化问题,很多时候这些问题可以用数学规划算法来描述,通常使用Lindo、Lingo 软件求解。 4. 图论算法。这类算法可以分为很多种,包括最短路、网络流、二分图等算法,涉及到图论的问题可以用这些方法解决,需要认真准备。 5. 动态规划、回溯搜索、分治算法、分支定界等计算机算法。这些算法是算法设计中比较常用的方法,竞赛中很多场合会用到。 6. 最优化理论的三大非经典算法:模拟退火算法、神经网络算法、遗传算法。这些问题是用来解决一些较困难的最优化问题的,对于有些问题非常有帮助,但是算法的实现比较困难,需慎重使用。 7. 网格算法和穷举法。两者都是暴力搜索最优点的算法,在很多竞赛题中有应用,当重点讨论模型本身而轻视算法的时候,可以使用这种暴力方案,最好使用一些高级语言作为编程工具。 8. 一些连续数据离散化方法。很多问题都是实际来的,数据可以是连续的,而计算机只能处理离散的数据,因此将其离散化后进行差分代替微分、求和代替积分等思想是非常重要的。 9. 数值分析算法。如果在比赛中采用高级语言进行编程的话,那些数值分析中常用的算法比如方程组求解、矩阵运算、函数积分等算法就需要额外编写库函数进行调用。 10. 图象处理算法。赛题中有一类问题与图形有关,即使问题与图形无关,论文中也会需要图片来说明问题,这些图形如何展示以及如何处理就是需要解决的问题,通常使用MATLAB 进行处理。 以下将结合历年的竞赛题,对这十类算法进行详细地说明。 以下将结合历年的竞赛题,对这十类算法进行详细地说明。 2 十类算法的详细说明 2.1 蒙特卡罗算法 大多数建模赛题中都离不开计算机仿真,随机性模拟是非常常见的算法之一。 举个例子就是97 年的A 题,每个零件都有自己的标定值,也都有自己的容差等级,而求解最优的组合方案将要面对着的是一个极其复杂的公式和108 种容差选取方案,根本不可能去求解析解,那如何去找到最优的方案呢?随机性模拟搜索最优方案就是其中的一种方法,在每个零件可行的区间中按照正态分布随机的选取一个标定值和选取一个容差值作为一种方案,然后通过蒙特卡罗算法仿真出大量的方案,从中选取一个最佳的。另一个例子就是去年的彩票第二问,要求设计一种更好的方案,首先方案的优劣取决于很多复杂的因素,同样不可能刻画出一个模型进行求解,只能靠随机仿真模拟。 2.2 数据拟合、参数估计、插值等算法 数据拟合在很多赛题中有应用,与图形处理有关的问题很多与拟合有关系,一个例子就是98 年美国赛A 题,生物组织切片的三维插值处理,94 年A 题逢山开路,山体海拔高度的 收集于网络,如有侵权请联系管理员删除

数学建模方法详解种最常用算法

数学建模方法详解--三种最常用算法 一、层次分析法 层次分析法[1] (analytic hierarchy process,AHP)是美国著名的运筹学家T.L.Saaty教授于20世纪70年代初首先提出的一种定性与定量分析相结合的多准则决策方法[2,3,4].该方法是社会、经济系统决策的有效工具,目前在工程计划、资源分配、方案 排序、政策制定、冲突问题、性能评价等方面都有广泛的应用. (一) 层次分析法的基本原理 层次分析法的核心问题是排序,包括递阶层次结构原理、测度原理和排序原理[5].下面分别予以介绍. 1.递阶层次结构原理 一个复杂的结构问题可以分解为它的组成部分或因素,即目标、准则、方案等.每一个因素称为元素.按照属性的不同把这 些元素分组形成互不相交的层次,上一层的元素对相邻的下一层的全部或部分元素起支配作用,形成按层次自上而下的逐层支配 关系.具有这种性质的层次称为递阶层次. 2.测度原理 决策就是要从一组已知的方案中选择理想方案,而理想方案一般是在一定的准则下通过使效用函数极大化而产生的.然而对 于社会、经济系统的决策模型来说,常常难以定量测度.因此,层次分析法的核心是决策模型中各因素的测度化.3.排序原理

层次分析法的排序问题,实质上是一组元素两两比较其重要性,计算元素相对重要性的测度问题.(二) 层次分析法的基本步骤 层次分析法的基本思路与人对一个复杂的决策问题的思维、判断过程大体上是一致的[1] . 1.成对比较矩阵和权向量 为了能够尽可能地减少性质不同的诸因素相互比较的困难,提高结果的准确度.T .L .Saaty 等人的作法,一是不把所有因 素放在一起比较,而是两两相互对比,二是对比时采用相对尺度. 假设要比较某一层n 个因素n C C ,,1对上层一个因素O 的影响,每次取两个因素i C 和j C ,用ij a 表示i C 和j C 对O 的影响之比, 全部比较 结 果 可 用 成 对 比 较 阵 1 ,0,ij ij ji n n ij A a a a a 表示,A 称为正互反矩阵.一般地,如果一个正互反阵 A 满足: , ij jk ik a a a ,,1,2,,i j k n (1) 则A 称为一致性矩阵,简称一致阵.容易证明n 阶一致阵A 有下列性质: ①A 的秩为1,A 的唯一非零特征根为n ;②A 的任一列向量都是对应于特征根 n 的特征向量. 如果得到的成对比较阵是一致阵,自然应取对应于特征根n 的、归一化的特征向量(即分量之和为1)表示诸因素n C C ,, 1对 上层因素O 的权重,这个向量称为权向量.如果成对比较阵A 不是一致阵,但在不一致的容许范围内,用对应于A 最大特征根(记

matlab在数学建模中的应用

Matlab在数学建模中的应用 数学建模是通过对实际问题的抽象和简化,引入一些数学符号、变量和参数,用数学语言和方法建立变量参数间的内在关系,得出一个可以近似刻画实际问题的数学模型,进而对其进行求解、模拟、分析检验的过程。它大致分为模型准备、模型假设、模型构成、模型求解、模型分析、模型检验及应用等步骤。这一过程往往需要对大量的数据进行分析、处理、加工,建立和求解复杂的数学模型,这些都是手工计算难以完成的,往往在计算机上实现。在目前用于数学建模的软件中,matlab 强大的数值计算、绘图以及多样化的工具箱功能,能够快捷、高效地解决数学建模所涉及的众多领域的问题,倍受数学建模者的青睐。 1 Matlab在数学建模中的应用 下面将联系数学建模的几个环节,结合部分实例,介绍matlab 在数学建模中的应用。 1.1 模型准备阶段 模型准备阶段往往需要对问题中的给出的大量数据或图表等进行分析,此时matlab的数据处理功能以及绘图功能都能得到很好的应用。 1.1.1 确定变量间关系 例1 已知某地连续20年的实际投资额、国民生产总值、物价指数的统计数据(见表),由这些数据建立一个投资额模型,根据对未来国民生产总值及物价指数的估计,预测未来的投资额。

表1 实际投资额、国民生产总值、物价指数的统计表 记该地区第t年的投资为z(t),国民生产总值为x(t),物价指数为y(t)。 赋值: z=[90.9 97.4 113.5 125.7 122.8 133.3 149.3 144.2 166.4 195 229.8 228.7 206.1 257.9 324.1 386.6 423 401.9 474.9 424.5]' x=[596.7 637.7 691.1 756 799 873.4 944 992.7 1077.6 1185.9 1326.4 1434.2 1549.2 1718 1918.3 2163.9 2417.8 2631.6 2954.7 3073]' y=[0.7167 0.7277 0.7436 0.7676 0.7906 0.8254 0.8679 0.9145 0.9601 1 1.0575 1.1508 1.2579 1.3234 1.4005 1.5042 1.6342 1.7842 1.9514 2.0688]' 先观察x与z之间,y与z之间的散点图 plot(x,z,'*') plot(y,z,'*') 由散点图可以看出,投资额和国民生产总值与物价指数都近似呈

数学建模常用算法模型

数学模型的分类 按模型的数学方法分: 几何模型、图论模型、微分方程模型、概率模型、最优控制模型、规划论模型、马氏链模型等 按模型的特征分: 静态模型和动态模型,确定性模型和随机模型,离散模型和连续性模型,线性模型和非线性模型等 按模型的应用领域分: 人口模型、交通模型、经济模型、生态模型、资源模型、环境模型等。 按建模的目的分: 预测模型、优化模型、决策模型、控制模型等 一般研究数学建模论文的时候,是按照建模的目的去分类的,并且是算法往往也和建模的目的对应 按对模型结构的了解程度分: 有白箱模型、灰箱模型、黑箱模型等 比赛尽量避免使用,黑箱模型、灰箱模型,以及一些主观性模型。 按比赛命题方向分: 国赛一般是离散模型和连续模型各一个,2016美赛六个题目(离散、连续、运筹学/复杂网络、大数据、环境科学、政策) 数学建模十大算法 1、蒙特卡罗算法 (该算法又称随机性模拟算法,是通过计算机仿真来解决问题的算法,同时可以通过模拟可以来检验自己模型的正确性,比较好用的算法) 2、数据拟合、参数估计、插值等数据处理算法 (比赛中通常会遇到大量的数据需要处理,而处理数据的关键就在于这些算法,通常使用Matlab作为工具) 3、线性规划、整数规划、多元规划、二次规划等规划类问题 (建模竞赛大多数问题属于最优化问题,很多时候这些问题可以用数学规划算法来描述,通常使用Lindo、Lingo软件实现) 4、图论算法 (这类算法可以分为很多种,包括最短路、网络流、二分图等算法,涉及到图论的问题可以用这些方法解决,需要认真准备)

5、动态规划、回溯搜索、分治算法、分支定界等计算机算法 (这些算法是算法设计中比较常用的方法,很多场合可以用到竞赛中) 6、最优化理论的三大非经典算法:模拟退火法、神经网络、遗传算法 (这些问题是用来解决一些较困难的最优化问题的算法,对于有些问题非常有帮助,但是算法的实现比较困难,需慎重使用) 7、网格算法和穷举法 (当重点讨论模型本身而轻视算法的时候,可以使用这种暴力方案,最好使用一些高级语言作为编程工具) 8、一些连续离散化方法 (很多问题都是从实际来的,数据可以是连续的,而计算机只认的是离散的数据,因此将其离散化后进行差分代替微分、求和代替积分等思想是非常重要的) 9、数值分析算法 (如果在比赛中采用高级语言进行编程的话,那一些数值分析中常用的算法比如方程组求解、矩阵运算、函数积分等算法就需要额外编写库函数进行调用) 10、图象处理算法 (赛题中有一类问题与图形有关,即使与图形无关,论文中也应该要不乏图片的这些图形如何展示,以及如何处理就是需要解决的问题,通常使用Matlab进行处理) 算法简介 1、灰色预测模型(必掌握) 解决预测类型题目。由于属于灰箱模型,一般比赛期间不优先使用。 满足两个条件可用: ①数据样本点个数少,6-15个 ②数据呈现指数或曲线的形式 2、微分方程预测(高大上、备用) 微分方程预测是方程类模型中最常见的一种算法。近几年比赛都有体现,但其中的要求,不言而喻。学习过程中 无法直接找到原始数据之间的关系,但可以找到原始数据变化速度之间的关系,通过公式推导转化为原始数据的关系。 3、回归分析预测(必掌握) 求一个因变量与若干自变量之间的关系,若自变量变化后,求因变量如何变化; 样本点的个数有要求: ①自变量之间协方差比较小,最好趋近于0,自变量间的相关性小; ②样本点的个数n>3k+1,k为自变量的个数;

matlab数学建模实例

第四周 3. 中的三个根。 ,在求8] [0,041.76938.7911.1-)(2 3=-+=x x x x f function y=mj() for x0=0:0.01:8 x1=x0^3-11.1*x0^2+38.79*x0-41.769; if (abs(x1)<1.0e-8) x0 end end 4.分别用简单迭代法、埃特金法、牛顿法求解方程,并比较收敛性与收敛速度(ε分别取10-3、10-5、10-8)。 简单迭代法: function y=jddd(x0) x1=(20+10*x0-2*x0^2-x0^3)/20; k=1; while (abs(x1-x0)>=1.0e-3) x0=x1; x1=(20+10*x0-2*x0^2-x0^3)/20;k=k+1; end x1 k 埃特金法: function y=etj(x0) x1=(20-2*x0^2-x0^3)/10; x2=(20-2*x1^2-x1^3)/10; x3=x2-(x2-x1)^2/(x2-2*x1+x0); k=1; while (abs(x3-x0)>=1.0e-3) x0=x3; x1=(20-2*x0^2-x0^3)/10; x2=(20-2*x1^2-x1^3)/10; x3=x2-(x2-x1)^2/(x2-2*x1+x0);k=k+1; end 2 ,020102)(023==-++=x x x x x f

x3 k 牛顿法: function y=newton(x0) x1=x0-fc(x0)/df(x0); k=1; while (abs(x1-x0)>=1.0e-3) x0=x1; x1=x0-fc(x0)/df(x0);k=k+1; end x1 k function y=fc(x) y=x^3+2*x^2+10*x-20; function y=df(x) y=3*x^2+4*x+10; 第六周 1.解例6-4(p77)的方程组,分别采用消去法(矩阵分解)、Jacobi迭代法、Seidel迭代法、松弛法求解,并比较收敛速度。 消去法: x=a\d 或 [L,U]=lu(a); x=inv(U)inv(L)d Jacobi迭代法: function s=jacobi(a,d,x0) D=diag(diag(a)); U=-triu(a,1); L=-tril(a,-1); C=inv(D); B=C*(L+U); G=C*d; s=B*x0+G; n=1; while norm(s-x0)>=1.0e-8 x0=s; s=B*x0+G;

相关文档
最新文档