当前位置:文档之家› 数学建模代码汇总

数学建模代码汇总

数学建模代码汇总
数学建模代码汇总

插值

% 产生原始数据

x=0:0.1:1;

y=(x.^2-3*x+7).*exp (-4*x).*sin (2*x);

% 线性插值

xx=0:0.01:1;

y1=interp1 (x,y,xx,'linear');

subplot (2,2,1)

plot (x,y,'o',xx,y1);

title ('线性插值');

% 最邻近点插值

y2=interp1 (x,y,xx,'nearest');

subplot (2,2,2)

plot (x,y,'o',xx,y2);

title ('最邻近点插值');

% 三次插值

y3=interp1 (x,y,xx,'cubic');

subplot (2,2,3)

plot (x,y,'o',xx,y3);

title ('三次插值');

% 三次样条插值

y4=interp1 (x,y,xx,'spline');

subplot (2,2,4)

plot (x,y,'o',xx,y4);

title ('三次样条插值');

% 插值基点为网格节点

clear all

y=20:-1:0;

x=0:20;

z=[0.2 0.2 0.2 0.2 0.2 0.2 0.4 0.4 0.3 0.2 0.3 0.2 0.1 0.2 0.2 0.4 0.3 0.2 0.2

0.2 0.2;

0.3 0.2 0.2 0.2 0.2 0.4 0.3 0.3 0.3 0.3 0.4 0.2 0.2 0.2 0.2 0.4 0.4 0.4 0.3 0.2

0.2;

0.2 0.3 0.3 0.2 0.3 1 0.4 0.5 0.3 0.3 0.3 0.3 0.2 0.2 0.2 0.6 0.5 0.4 0.4 0.2

0.2;

0.2 0.2 0.4 0.2 1 1.1 0.9 0.4 0.3 0.3 0.5 0.3 0.2 0.2 0.2 0.7 0.3 0.6 0.6 0.3

0.4;

0.2 0.2 0.9 0.7 1 1 1 0.7 0.5 0.3 0.2 0.2 0.2 0.6 0.2 0.8 0.7 0.9 0.5 0.5

0.4;

0.2 0.3 1 1 1 1.2 1 1.1 0.8 0.3 0.2 0.2 0.2 0.5 0.3 0.6 0.6 0.8 0.7 0.6

0.5;

0.2 0.4 1 1 1.1 1.1 1.1 1.1 0.6 0.3 0.4 0.4 0.2 0.7 0.5 0.9 0.7 0.4 0.9 0.8

0.3;

0.2 0.2 0.9 1.1 1.2 1.2 1.1 1.1 0.6 0.3 0.5 0.3 0.2 0.4 0.3 0.7 1 0.7 1.2 0.8

0.4;

0.2 0.3 0.4 0.9 1.1 1 1.1 1.1 0.7 0.4 0.4 0.4 0.3 0.5 0.5 0.8 1.1 0.8 1.1 0.9

0.3;

0.3 0.3 0.5 1.2 1.2 1.1 1 1.2 0.9 0.5 0.6 0.4 0.6 0.6 0.3 0.6 1.2 0.8 1 0.8

0.5;

0.3 0.5 0.9 1.1 1.1 1 1.2 1 0.8 0.7 0.5 0.6 0.4 0.5 0.4 1 1.3 0.9 0.9 1

0.8;

0.3 0.5 0.6 1.1 1.2 1 1 1.1 0.9 0.4 0.4 0.5 0.5 0.8 0.6 0.9 1 0.5 0.8 0.8

0.9;

0.4 0.5 0.4 1 1.1 1.2 1 0.9 0.7 0.5 0.6 0.3 0.6 0.4 0.6 1 1 0.6 0.9 1

0.7;

0.3 0.5 0.8 1.1 1.1 1 0.8 0.7 0.7 0.4 0.5 0.4 0.4 0.5 0.4 1.1 1.3 0.7 1 0.7

0.6;

0.3 0.5 0.9 1.1 1 0.7 0.7 0.4 0.6 0.4 0.4 0.3 0.5 0.5 0.3 0.9 1.2 0.8 1 0.8

0.4;

0.2 0.3 0.6 0.9 0.8 0.8 0.6 0.3 0.4 0.5 0.4 0.5 0.4 0.2 0.5 0.5 1.3 0.6 1 0.9

0.3;

0.2 0.3 0.3 0.7 0.6 0.6 0.4 0.2 0.3 0.5 0.8 0.8 0.3 0.2 0.2 0.8 1.3 0.9 0.8 0.8

0.4;

0.2 0.3 0.3 0.6 0.3 0.4 0.3 0.2 0.2 0.3 0.6 0.4 0.3 0.2 0.4 0.3 0.8 0.6 0.7 0.4

0.4;

0.2 0.3 0.4 0.4 0.2 0.2 0.2 0.3 0.2 0.2 0.2 0.2 0.2 0.2 0.2 0.5 0.7 0.4 0.4 0.3

0.3;

0.2 0.2 0.3 0.2 0.2 0.3 0.2 0.2 0.2 0.2 0.2 0.1 0.2 0.4 0.3 0.6 0.5 0.3 0.3 0.3

0.2;

0.2 0.2 0.2 0.2 0.2 0.2 0.2 0.2 0.2 0.2 0.2 0.2 0.2 0.2 0.4 0.7 0.4 0.2 0.4 0.5

0.5];

% 未插值直接画图

figure (1) % 创建图形窗口1,并激活

surf (x,y,z);

shading flat % 用shading flat命令,使曲面变的光滑

title ('未插值地形图')

xlabel ('横坐标')

ylabel ('纵坐标')

zlabel ('高度')

% 三次插值后画图

% 画地形图

figure (2)

xi=0:0.05:20;

yi=20:-0.05:0;

zi=interp2 (x,y,z,xi',yi,'cubic'); %'cubic'三次插值

surfc (xi,yi,zi); % 底面带等高线

shading flat

title ('插值后地形图')

xlabel ('横坐标')

ylabel ('纵坐标')

zlabel ('高度')

% 画立体等高线图

figure (3)

contour3 (xi,yi,zi);

title ('立体等高线图')

xlabel ('横坐标')

ylabel ('纵坐标')

zlabel ('高度')

% 画等高线图

figure (4)

[c,h]=contour (xi,yi,zi);

clabel (c,h); % 用于为2维等高线添加标签colormap cool % 冷色调

title ('平面等高线图')

xlabel ('横坐标')

ylabel ('纵坐标')

ge

回归拟合

function yhat=Logisfun (beta,x)

yhat=beta (1)./(1+(beta (1)/beta(2)-1).*exp (-beta(3).*x));

clear all

y=[3.9 5.3 7.2 9.6 12.9 17.1 23.2 31.4 38.6 50.2 62.9...

76.0 92.0 106.5 123.2 131.7 150.7 179.3 204.0 226.5 251.4 281.4]';

x=(1:22)';

beta0=[400,3.0,0.20]';

% 非线性回归'Logisfun'为回归模型

[beta,r,j]=nlinfit (x,y,'Logisfun',beta0);

% beta0为回归系数初始迭代点

% beta为回归系数

% r为残差

% 输出拟合表达式:

fprintf ('回归方程为y=%5 .4f/(1+%5 .4f*exp (-%5.4f*x))\n',beta (1),beta (1)/beta(2)-1,beta (3)) % 求均方误差根:

rmse=sqrt (sum (r.^2)/22);

rmse

% 预测和误差估计:

[Y,DELTA]=nlpredci ('Logisfun',x,beta,r,j);

% DELTA为误差限

% Y为预测值(拟合后的表达式求值)

plot (x,Y,x,y,'o',x,Y+DELTA,':',x,Y-DELTA,':')

% lny=lna+bx

clear all

y=[3.9 5.3 7.2 9.6 12.9 17.1 23.2 31.4 38.6 50.2 62.9 76.0]; % Y为列向量

Y=log (y');

x=1:12;

% X为两列

X=[ones (12,1),x'];

[b,bint,r,rint,stats]=regress (Y,X);

% b为参数的点估计

disp ('b为参数的点估计')

b

% bint为参数的区间估计

disp ('bint为参数的区间估计')

bint

% stats (1)为相关系数越接近1回归方程越显著

disp ('stats (1)')

stats (1)

% stats (2)为F值越大回归越显著

disp ('stats (2)')

stats (2)

% stats (3)为与F对应的概率P P

disp ('stats (3)')

stats (3)

% 求均方误差根RMSE

a=exp (b (1));

yy=a.*exp (b (2).*x);

rmse=sqrt (sum ((yy-y).^2)/12);

disp ('rmse')

rmse

% 写出表达式

fprintf ('回归方程为y=%5 .4f*exp (%5 .4fx)',a,b (2))

% 做回归图像

figure (1)

plot (x,y,'o',x,yy)

% 做参差图

figure (2)

rcoplot (r,rint)

% 先把所有的红线点蓝,再点All steps键,变红的量就是要剔除的量

x1=[7 1 11 11 7 11 3 1 2 21 1 11 10]';

x2=[26 29 56 31 52 55 71 31 54 47 40 66 68]';

x3=[6 15 8 8 6 9 17 22 18 4 23 9 8]';

x4=[60 52 20 47 33 22 6 44 22 26 34 12 12]';

X=[x1 x2 x3 x4];

Y=[78.5 74.3 104.3 87.6 95.9 109.2 102.7 72.5 93.1 115.9 83.8 113.3 109.4]'; stepwise (X,Y)

神经网络

% 利用神经网络进行函数逼近

clear all

x=0:0.1*pi:4*pi;

y=sin (x);

% 设定迭代次数

net.trainparam.epochs=10000;

% 网络初始化

net=newff ([0,4*pi],[8,8,8,8,1],{'tansig','logsig','logsig','tansig','tansig'});

% 训练网络

[net,tr,y1,e]=train (net,x,y);

X=0:0.01*pi:4*pi;

% 网络泛化

y2=sim (net,X);

subplot (2,1,2);

plot (X,y2);

title ('网络产生')

grid on

subplot (2,1,1);

plot (x,y,'o');

title ('原始数据')

grid on

% 利用神经网络进行分类

clear all

x=[1.24 1.36 1.38 1.38 1.38 1.40 1.48 1.54 1.56 1.14 1.18 1.20 1.26 1.28 1.30;...

1.72 1.74 1.64 1.82 1.90 1.70 1.82 1.82

2.08 1.78 1.96 1.86 2.0 2.0 1.96]; y=[1 1 1 1 1 1 1 1 1 0 0 0 0 0 0;...

0 0 0 0 0 0 0 0 0 1 1 1 1 1 1];

xmin1=min (x (1,:));

xmax1=max (x (1,:));

xmin2=min (x (2,:));

xmax2=max (x (2,:));

% 设定迭代次数

net.trainparam.epochs=10000;

% 网络初始化

net=newff ([xmin1,xmax1;xmin2,xmax2],[8,8,8,8,2],{'tansig','logsig','logsig','tansig','tansig'}); % 训练网络

[net,tr,y1,e]=train (net,x,y);

X=[1.24 1.28 1.40;...

1.80 1.84

2.04];

% 网络泛化

y2=sim (net,X)

plot (x (1,1:9),x (2,1:9),'o',x (1,10:15),x (2,10:15),'*',X (1,:),X (2,:),'v')

grid on

数值积分与函数极值实验

% 一重积分

% 求利用符号函数求理论值

syms x;

y=exp (-x^2); % 被积函数

s=int (y,x,0,1); % 调用int函数

v=vpa (s); % 将符号表达式转化为数值

% 利用quad函数进行数值积分

f1=inline ('exp (-x.^2)','x'); % 被积函数

y1=quad (f1,0,1);

% 二重积分

f2=inline ('exp ((-x.^2)/2).*sin (x.^2+y)','x','y');

y2=dblquad (f2,-2,2,-1,1);

% 三重积分

f3=inline ('4*x.*z.*exp (-(x.^2).*y-z.^2)','x','y','z');

y3=triplequad (f3,0,2,0,pi,0,pi);

clear all

syms x;

y=(x^2-1)^3+1;

y1=diff (y,x); % y对x求一阶导

y2=diff (y,x,2); % y对x求二阶导

subplot (3,1,1); % 把图形窗口分成3*1部分,并激活第1部分ezplot (y,[-1.5,1.5]); % 对符号函数在[-1.5,1.5]上绘图

subplot (3,1,2);

ezplot (y1,[-1.5,1.5]);

subplot (3,1,3);

ezplot (y2,[-1.5,1.5]);

% 通过导数为0的点求最值

x0=solve ('6*(x^2-1)^2*x=0','x'); % 求解一阶导数(从workspace中得到)为0的点

y0=subs (y,x,x0); % 把x0带入y中的x

[ymin1,n]=min (eval (y0)); % 求y0的最小值

xmin1=x0 (n);

% 通过fminbnd求函数最值

f=inline ('(x^2-1)^3+1','x');

xmin2=fminbnd (f,-1.5,1.5); % 在[-1.5,1.5]上求f函数的最小值点

ymin2=f (xmin2);

无约束优化

clear all

% 无约束优化的经典算法与非经典算法比较

% 使用rosenbrock函数,理论极值为0

if exist ('rosenbrock.m')==0

disp ('没有为方程创建名为rosenbrock.m的函数文件,请建立它');

end

% 画图

[x,y]=meshgrid (-1:0.05:1,-1:0.05:1);

z=100*(y-x.^2).^2+(1-x).^2;

surf (x,y,z)

% 经典算法:

[x1,fval1,exitflag1,output1]=fminunc ('rosenbrock',[0,0]);% 初始点为(0,0)

% x为解

% fval为目标函数x处的值

% exitflag>0表示函数已收敛到x处

% output中:Iterations表示迭代次数

% Algorithm表示采用算法

% FuncCount表示函数评价次数

% 遗传算法

% 调整最大允许的代数1万代,种群规模为200

options=gaoptimset ('Generations',10000,'PopulationSize',200);

% 设置两个变量,限制0<=x1,x2<=2

[x2,fval2,exitflag2,output2]=ga (@rosenbrock,2,[1,0;0,1;-1,0;0,-1],[2;2;0;0],[],[],[],[],[],options); % exiflag>0表示求解成功

function y=rosenbrock (x)

y=100*(x (2)-x (1).^2).^2+(1-x (1)).^2;

通用

function [s,c]=circle (r) % 注意此文件名一定要为circle.m

% CIRCLE 计算半径为r的圆面积与周长

%[s,c]=circle (r)

% r圆半径,s圆面积,c圆周长

%2008 年9月19日编写

s=pi*r*r;

c=2*pi*r;

function [s,c]=circle (r) % 注意此文件名一定要为circle.m

% CIRCLE 计算半径为r的圆面积与周长

%[s,c]=circle (r)

% r圆半径,s圆面积,c圆周长

%2008 年9月19日编写

s=pi*r*r;

c=2*pi*r;

追击仿真

function y=f (x)

if x==1

y=2;

end

if x==2

y=3;

end

if x==3

y=4;

end

if x==4

y=1;

end

% 四人追逐问题实验

% f.m文件用于调节追击次序即第一人追第二人,第二人追第三人,第三人追第四人,第四人追第五人

D=2; % 最小距离

v=10; % 速度

dt=0.1; % 时间间隔

x=zeros (4,103); % 四个人的横坐标y=zeros (4,103); % 四个人的纵坐标x (1,1)=100;y (1,1)=0; % 第一个人的初始坐标(100,0)

x (2,1)=0;y (2,1)=0; % 第二个人的初始坐标(0,0)

x (3,1)=0;y (3,1)=100; % 第三个人的初始坐标(0,100)

x (4,1)=100;y (4,1)=100; % 第四个人的初始坐标(100,100)

k=1;

t=0;

% 追击模拟

while (sqrt ((x (1,k)-x (2,k))^2+(y (1,k)-y (2,k))^2)>D)

k=k+1;

t=t+dt;

for i=1:4

d=sqrt ((x (f (i),k-1)-x (i,k-1))^2+(y (f (i),k-1)-y (i,k-1))^2); % 两人距离

cosx=(x (f (i),k-1)-x (i,k-1))/d;

sinx=(y (f (i),k-1)-y (i,k-1))/d;

x (i,k)=x (i,k-1)+v*cosx*dt; % 求新的x坐标

y (i,k)=y (i,k-1)+v*sinx*dt; % 求新的y坐标

end

end

% 描绘追击图像

for i=1:k

plot (x (1,i),y (1,i),'o',x (2,i),y (2,i),'*',x (3,i),y (3,i),'o',x (4,i),y (4,i),'*')

pause (0.01);

hold on

end

动态规划

clear all

clc

% max z=g1 (x1)+g2 (x2)+g3 (x3)

% x1+x2+x3=n;0<=xi<=n

% 算法:突出阶段的动态规划

% f1 (x)=g1 (x) 0<=x<=n

% fi (x)=max {gi (y)+fi-1(x-y)} 0<=x<=n,0<=y<=n

% 数据结构

n=7;% 总金额

m=3;% 阶段数

income=[0,0.11,0.13,0.15,0.21,0.24,0.30,0.35;

0,0.12,0.16,0.21,0.23,0.25,0.24,0.34;

0,0.08,0.12,0.2,0.24,0.26,0.30,0.35];% 三个项目的收益income (k,i) k阶段投资i-1的收益

f=zeros (3,8);% f (k,i) 当前投资i-1最大收益

a=zeros (3,8);% a (i,j) 前i个工程投资j-1所获得最大利润时,给i项目的投资

f (1,:)=income (1,:);

a (1,:)=[0,1,2,3,4,5,6,7];

% 动态规划

for k=2:m % 阶段

for j=0:n % 到本阶段为止总投资量

for i=0:j % 前一阶段投资量

if f (k-1,i+1)+income (k,j-i+1)>=f (k,j+1)

f (k,j+1)=f (k-1,i+1)+income (k,j-i+1);

a (k,j+1)=j-i;% 本阶段投资量

end % if

end % for

end % for

end % for

% 出结果

f (m,n+1)

out=n+1;

for i=m:-1:1

a (i,out)

out=out-a (i,out);

end % for

残缺棋盘

function [board,amount]=cover (i,j,k,l,board,size,amount)% (i,j)为左上角(k,l)残缺size为规模amount为片数

if size==1

return

end

amount=amount+1;

size=size/2;

if (k

board (size+i-1,size+j)=amount;board (size+i,size+j)=amount;board (size+i,size+j-1)=amount;% 放置

[board,amount]=cover (i,j,k,l,board,size,amount);[board,amount]=cover (i,j+size,size+i-1,j+size,board,size,amount);

[board,amount]=cover (size+i,size+j,size+i,size+j,board,size,amount);[board,amount]=cover (i+size,j,i+size,j+size-1,board,size,amount);

elseif (k>=size+i)&(l

board (size+i-1,size+j)=amount;board (size+i,size+j)=amount;board (size+i-1,size+j-1)=amount;% 放置

[board,amount]=cover (i+size,j,k,l,board,size,amount);[board,amount]=cover (i,j+size,size+i-1,j+size,board,size,amount);

[board,amount]=cover (size+i,size+j,size+i,size+j,board,size,amount);[board,amount]=cover (i,j,i+size-1,j+size-1,board,size,amount);

elseif (k=size+j)% 残缺位于右上棋盘

board (size+i,size+j-1)=amount;board (size+i,size+j)=amount;board (size+i-1,size+j-1)=amount;% 放置

[board,amount]=cover (i,j+size,k,l,board,size,amount);[board,amount]=cover (i,j,i+size-1,j+size-1,board,size,amount);

[board,amount]=cover (size+i,size+j,size+i,size+j,board,size,amount);[board,amount]=cover (i+size,j,i+size,j+size-1,board,size,amount);

elseif (k>=size+i)&(l>=size+j)% 残缺位于右下棋盘

board (size+i,size+j-1)=amount;board (size+i-1,size+j)=amount;board (size+i-1,size+j-1)=amount;% 放置

[board,amount]=cover (size+i,size+j,k,l,board,size,amount);[board,amount]=cover (i,j+size,size+i-1,j+size,board,size,amount);

[board,amount]=cover (i,j,i+size-1,j+size-1,board,size,amount);[board,amount]=cover (i+size,j,i+size,j+size-1,board,size,amount);

end

end

% 残缺棋盘

board=zeros (100,100);

n=4;

size=2^n;

amount=0;

[board,amount]=cover (1,1,2,5,board,size,amount);

board (1:size,1:size)

广度优先搜索

function y=check (i,j,maze)

if (i<=8)&(j<=8)&(i>=1)&(j>=1)

y=1;

else

y=0;

return

end

if maze (i,j)==1|maze (i,j)==-1

y=0;

return

end

clear all

clc

maze=[0,0,0,0,0,0,0,0;

0,1,1,1,1,0,1,0;

0,0,0,0,1,0,1,0;

0,1,0,0,0,0,1,0;

0,1,0,1,1,0,1,0;

0,1,0,0,0,0,1,1;

0,1,0,0,1,0,0,0;

0,1,1,1,1,1,1,0];% 迷宫:0为路,1为墙,-1为遍历过

fx (1:4)=[1,-1,0,0];

fy (1:4)=[0,0,-1,1];

sq.pre=zeros (1,100);sq.x=zeros (1,100);sq.y=zeros (1,100);

qh=0;% 队头指针

qe=1;% 队尾指针

maze (1,1)=-1;

% 第一个元素入队

sq.pre(1)=0;sq.x(1)=1;sq.y(1)=1;

while qh-qe~=0

qh=qh+1;

bb=0;

for k=1:4

i=sq.x(qh)+fx (k);

j=sq.y(qh)+fy (k);

if check (i,j,maze)==1

qe=qe+1;% 入队

sq.x(qe)=i;sq.y(qe)=j;sq.pre(qe)=qh;

maze (i,j)=-1;

if i==8&j==8% 如果为图最后一个点

while qe~=0

sq.x(qe)

sq.y(qe)

qe=sq.pre(qe);

end

bb=1;

break;

end % if

end % if

end

if bb==1

break

end

end % while

回溯n皇后

function [chess,row,main,deputy,number]=justtry (i,n,chess,row,main,deputy,number); for k=1:8

if row (k)==0&main (i-k+n)==0&deputy (i+k-1)==0% 此棋盘可继续放子chess (i,k)=1;

row (k)=1;

main (i-k+n)=1;

deputy (i+k-1)=1;

if i==8% 如果棋盘搜索结束

number=number+1

chess

else % 没有结束继续深搜

[chess,row,main,deputy,number]=justtry (i+1,n,chess,row,main,deputy,number);% 递归end

chess (i,k)=0;% 回溯

row (k)=0;

main (i-k+n)=0;

deputy (i+k-1)=0;

end

end

clear all

clc

% n皇后问题

n=8;

chess=zeros (n,n);

row=zeros (1,n);% 记录n列被占用的情况

main=zeros (1,2*n-1);% 记录主对角线的使用情况

deputy=zeros (1,2*n-1);% 记录从对角线的使用情况

number=0;

[chess,row,main,deputy,number]=justtry (1,n,chess,row,main,deputy,number);

密宫所有路

clear all

clc

maze=[0,0,0,0,0,0,0,0;

0,1,1,1,1,0,1,0;

0,0,0,0,1,0,1,0;

0,1,0,0,0,0,1,0;

0,1,0,1,1,0,1,0;

0,1,0,0,0,0,1,1;

0,1,0,0,1,0,0,0;

0,1,1,1,1,1,1,0];% 迷宫:0为路,1为墙,2为遍历过

total=0;

maze (1,1)=2;

[total,maze]=search (1,1,maze,total);

function [total,maze]=search (i,j,maze,total);

fx (1:4)=[1,0,-1,0];

fy (1:4)=[0,1,0,-1];

for k=1:4

newi=i+fx (k);

newj=j+fy (k);

if (newi<=8)&(newj<=8)&(newi>=1)&(newj>=1)&maze (newi,newj)==0

maze (newi,newj)=2;% 此点已走

if newi==8&newj==8

maze

else

[total,maze]=search (newi,newj,maze,total);

end % if i+fx (k)==8&j+fy (y)==8

maze (newi,newj)=0;% 回溯

end % if (newi<=8)&(newj<=8)&(newi>=1)&(newj>=1)&maze (newi,newj)==0

end % for k=1:4

end

排列树的回溯搜索

function [chess,main,deputy,number]=justtry (i,n,chess,main,deputy,number);

if i==9

number=number+1

chess

else

for k=i:8

if main (i-chess (k)+n)==0&deputy (i+chess (k)-1)==0% 此棋盘可继续放子(主,副对角线可放子)

t=chess (k);% 交换

chess (k)=chess (i);

chess (i)=t;

main (i-chess (k)+n)=1;

deputy (i+chess (k)-1)=1;

[chess,main,deputy,number]=justtry (i+1,n,chess,main,deputy,number);% 递归

t=chess (k);% 回溯

chess (k)=chess (i);

chess (i)=t;

main (i-chess (k)+n)=0;

deputy (i+chess (k)-1)=0;

end

end

end

end % function

clear all

clc

% n皇后问题

n=8;

chess=zeros (1,n);

for i=1:n % 排列树

chess (i)=i;

end

main=zeros (1,2*n-1);% 记录主对角线的使用情况

deputy=zeros (1,2*n-1);% 记录从对角线的使用情况

[chess,main,deputy,number]=justtry (1,n,chess,main,deputy,number);

数学建模代码汇总

插值 % 产生原始数据 x=0:0.1:1; y=(x.^2-3*x+7).*exp (-4*x).*sin (2*x); % 线性插值 xx=0:0.01:1; y1=interp1 (x,y,xx,'linear'); subplot (2,2,1) plot (x,y,'o',xx,y1); title ('线性插值'); % 最邻近点插值 y2=interp1 (x,y,xx,'nearest'); subplot (2,2,2) plot (x,y,'o',xx,y2); title ('最邻近点插值'); % 三次插值 y3=interp1 (x,y,xx,'cubic'); subplot (2,2,3) plot (x,y,'o',xx,y3); title ('三次插值'); % 三次样条插值 y4=interp1 (x,y,xx,'spline'); subplot (2,2,4) plot (x,y,'o',xx,y4); title ('三次样条插值'); % 插值基点为网格节点 clear all y=20:-1:0; x=0:20; z=[0.2 0.2 0.2 0.2 0.2 0.2 0.4 0.4 0.3 0.2 0.3 0.2 0.1 0.2 0.2 0.4 0.3 0.2 0.2 0.2 0.2; 0.3 0.2 0.2 0.2 0.2 0.4 0.3 0.3 0.3 0.3 0.4 0.2 0.2 0.2 0.2 0.4 0.4 0.4 0.3 0.2 0.2; 0.2 0.3 0.3 0.2 0.3 1 0.4 0.5 0.3 0.3 0.3 0.3 0.2 0.2 0.2 0.6 0.5 0.4 0.4 0.2 0.2; 0.2 0.2 0.4 0.2 1 1.1 0.9 0.4 0.3 0.3 0.5 0.3 0.2 0.2 0.2 0.7 0.3 0.6 0.6 0.3 0.4; 0.2 0.2 0.9 0.7 1 1 1 0.7 0.5 0.3 0.2 0.2 0.2 0.6 0.2 0.8 0.7 0.9 0.5 0.5 0.4; 0.2 0.3 1 1 1 1.2 1 1.1 0.8 0.3 0.2 0.2 0.2 0.5 0.3 0.6 0.6 0.8 0.7 0.6 0.5; 0.2 0.4 1 1 1.1 1.1 1.1 1.1 0.6 0.3 0.4 0.4 0.2 0.7 0.5 0.9 0.7 0.4 0.9 0.8 0.3;

数学建模源代码

灰色系统理论建模源代码 function GM1_1(X0) %format long ; [m,n]=size(X0); X1=cumsum(X0); %累加 X2=[]; for i=1:n-1 X2(i,:)=X1(i)+X1(i+1); end B=-0.5.*X2 ; t=ones(n-1,1); B=[B,t] ; % 求B矩阵 YN=X0(2:end) ; P_t=YN./X1(1:(length(X0)-1)) %对原始数据序列X0进行准光滑性检验, %序列x0的光滑比P(t)=X0(t)/X1(t-1) A=inv(B.'*B)*B.'*YN.' ; a=A(1) u=A(2) c=u/a ; b=X0(1)-c ; X=[num2str(b),'exp','(',num2str(-a),'k',')',num2str(c)]; strcat('X(k+1)=',X) %syms k; for t=1:length(X0) k(1,t)=t-1; end k Y_k_1=b*exp(-a*k)+c; for j=1:length(k)-1 Y(1,j)=Y_k_1(j+1)-Y_k_1(j); end XY=[Y_k_1(1),Y] %预测值 CA=abs(XY-X0) ; %残差数列 Theta=CA %残差检验绝对误差序列 XD_Theta= CA ./ X0 %残差检验相对误差序列 AV=mean(CA); % 残差数列平均值 R_k=(min(Theta)+0.5*max(Theta))./(Theta+0.5*max(Theta)) ;% P=0.5 R=sum(R_k)/length(R_k) %关联度 Temp0=(CA-AV).^2 ; Temp1=sum(Temp0)/length(CA);

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可以绘制各种图形,包括二维和三维图形。 ③简单易学的语言体系。 ④为数众多的应用工具箱。

数学建模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+ π →

数学建模代码汇总复习进程

数学建模代码汇总

插值 % 产生原始数据 x=0:0.1:1; y=(x.^2-3*x+7).*exp (-4*x).*sin (2*x); % 线性插值 xx=0:0.01:1; y1=interp1 (x,y,xx,'linear'); subplot (2,2,1) plot (x,y,'o',xx,y1); title ('线性插值'); % 最邻近点插值 y2=interp1 (x,y,xx,'nearest'); subplot (2,2,2) plot (x,y,'o',xx,y2); title ('最邻近点插值'); % 三次插值 y3=interp1 (x,y,xx,'cubic'); subplot (2,2,3) plot (x,y,'o',xx,y3); title ('三次插值'); % 三次样条插值 y4=interp1 (x,y,xx,'spline'); subplot (2,2,4) plot (x,y,'o',xx,y4); title ('三次样条插值'); % 插值基点为网格节点 clear all y=20:-1:0; x=0:20; z=[0.2 0.2 0.2 0.2 0.2 0.2 0.4 0.4 0.3 0.2 0.3 0.2 0.1 0.2 0.2 0.4 0.3 0.2 0.2 0.2 0.2; 0.3 0.2 0.2 0.2 0.2 0.4 0.3 0.3 0.3 0.3 0.4 0.2 0.2 0.2 0.2 0.4 0.4 0.4 0.3 0.2 0.2;

0.2 0.3 0.3 0.2 0.3 1 0.4 0.5 0.3 0.3 0.3 0.3 0.2 0.2 0.2 0.6 0.5 0.4 0.4 0.2 0.2; 0.2 0.2 0.4 0.2 1 1.1 0.9 0.4 0.3 0.3 0.5 0.3 0.2 0.2 0.2 0.7 0.3 0.6 0.6 0.3 0.4; 0.2 0.2 0.9 0.7 1 1 1 0.7 0.5 0.3 0.2 0.2 0.2 0.6 0.2 0.8 0.7 0.9 0.5 0.5 0.4; 0.2 0.3 1 1 1 1.2 1 1.1 0.8 0.3 0.2 0.2 0.2 0.5 0.3 0.6 0.6 0.8 0.7 0.6 0.5; 0.2 0.4 1 1 1.1 1.1 1.1 1.1 0.6 0.3 0.4 0.4 0.2 0.7 0.5 0.9 0.7 0.4 0.9 0.8 0.3; 0.2 0.2 0.9 1.1 1.2 1.2 1.1 1.1 0.6 0.3 0.5 0.3 0.2 0.4 0.3 0.7 1 0.7 1.2 0.8 0.4; 0.2 0.3 0.4 0.9 1.1 1 1.1 1.1 0.7 0.4 0.4 0.4 0.3 0.5 0.5 0.8 1.1 0.8 1.1 0.9 0.3; 0.3 0.3 0.5 1.2 1.2 1.1 1 1.2 0.9 0.5 0.6 0.4 0.6 0.6 0.3 0.6 1.2 0.8 1 0.8 0.5; 0.3 0.5 0.9 1.1 1.1 1 1.2 1 0.8 0.7 0.5 0.6 0.4 0.5 0.4 1 1.3 0.9 0.9 1 0.8; 0.3 0.5 0.6 1.1 1.2 1 1 1.1 0.9 0.4 0.4 0.5 0.5 0.8 0.6 0.9 1 0.5 0.8 0.8 0.9; 0.4 0.5 0.4 1 1.1 1.2 1 0.9 0.7 0.5 0.6 0.3 0.6 0.4 0.6 1 1 0.6 0.9 1 0.7; 0.3 0.5 0.8 1.1 1.1 1 0.8 0.7 0.7 0.4 0.5 0.4 0.4 0.5 0.4 1.1 1.3 0.7 1 0.7 0.6; 0.3 0.5 0.9 1.1 1 0.7 0.7 0.4 0.6 0.4 0.4 0.3 0.5 0.5 0.3 0.9 1.2 0.8 1 0.8 0.4; 0.2 0.3 0.6 0.9 0.8 0.8 0.6 0.3 0.4 0.5 0.4 0.5 0.4 0.2 0.5 0.5 1.3 0.6 1 0.9 0.3; 0.2 0.3 0.3 0.7 0.6 0.6 0.4 0.2 0.3 0.5 0.8 0.8 0.3 0.2 0.2 0.8 1.3 0.9 0.8 0.8 0.4; 0.2 0.3 0.3 0.6 0.3 0.4 0.3 0.2 0.2 0.3 0.6 0.4 0.3 0.2 0.4 0.3 0.8 0.6 0.7 0.4 0.4; 0.2 0.3 0.4 0.4 0.2 0.2 0.2 0.3 0.2 0.2 0.2 0.2 0.2 0.2 0.2 0.5 0.7 0.4 0.4 0.3 0.3; 0.2 0.2 0.3 0.2 0.2 0.3 0.2 0.2 0.2 0.2 0.2 0.1 0.2 0.4 0.3 0.6 0.5 0.3 0.3 0.3 0.2; 0.2 0.2 0.2 0.2 0.2 0.2 0.2 0.2 0.2 0.2 0.2 0.2 0.2 0.2 0.4 0.7 0.4 0.2 0.4 0.5 0.5]; % 未插值直接画图 figure (1) % 创建图形窗口1,并激活 surf (x,y,z);

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,'*') 由散点图可以看出,投资额和国民生产总值与物价指数都近似呈

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

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

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;

09年数学建模A题(含代码)

承诺书 我们仔细阅读了中国大学生数学建模竞赛的竞赛规则. 我们完全明白,在竞赛开始后参赛队员不能以任何方式(包括电话、电子邮件、网上咨询等)与队外的任何人(包括指导教师)研究、讨论与赛题有关的问题。 我们知道,抄袭别人的成果是违反竞赛规则的, 如果引用别人的成果或其他公开的资料(包括网上查到的资料),必须按照规定的参考文献的表述方式在正文引用处和参考文献中明确列出。 我们郑重承诺,严格遵守竞赛规则,以保证竞赛的公正、公平性。如有违反竞赛规则的行为,我们将受到严肃处理。 我们参赛选择的题号是(从A/B/C/D中选择一项填写): A 我们的参赛报名号为(如果赛区设置报名号的话): 所属学校(请填写完整的全名):华南师范大学增城学院 参赛队员(打印并签名) :1. 何高志 2. 曾庆东 3. 曾利 指导教师或指导教师组负责人(打印并签名): 日期: 2013 年 8 月 16 日赛区评阅编号(由赛区组委会评阅前进行编号):

编号专用页 赛区评阅编号(由赛区组委会评阅前进行编号): 全国统一编号(由赛区组委会送交全国前编号):全国评阅编号(由全国组委会评阅前进行编号):

制动器试验台的控制方法分析 摘要 本文在专门的汽车行车制动器试验台上对所设计的路试进行模拟试验,检测汽车的行车制动器的综合性能,检验设计的优劣。针对此问题,我们结合实际,对转动惯量、补偿惯量、驱动电流、控制方法等问题作了深入详细的分析,建立了相应的数学模型,较好地解决了制动器试验台的控制方法分析问题,并且对模型和结果进行了评价和分析。 对于问题1,根据转动惯量的表达式,结合力学知识,代入数据从而求得车辆单个前轮滚动的等效转动惯量约为522m kg ?。 对于问题2,首先需要理解机械惯量与飞轮单个惯量、基础惯量和电动机补偿惯量之间的关系。根据题意,进行推断,可知机械惯量是组合问题。即飞轮组与基础惯量可以组合8种数值的机械惯量。问题1中得到等效的转动惯量522m kg ?,且电动机能补偿的能量有限,所以符合题意,在范围内的有2种,分别为飞轮1加基础惯量;飞轮2加基础惯量。且可得需要电动机补偿的惯量分别为122m kg ?,-182m kg ?。 对于问题3,飞轮做圆周运动根据角速度与线速度、半径的关系,结合问题2中得出符合题意的补偿惯量,联立转动定律,可求得其扭矩。且电动机的驱动电流与其产生的扭矩成正比,比例系数取为1.5m N A ?,因此可求得驱动电流分别为。;A I A I 05.2629.17421-== 对于问题4,我们使用Matlab 软件画出扭矩随时间、转速随时间的变化曲线,由此可知转速与时间近似成一次函数的关系,且汽车在制动的时候载荷是一个恒定不变的力,即角加速度恒定不变,方向与其运动方向相反,所以做匀减速运动。通过Lingo 软件进行具体数值处理,根据能量守恒,转动动能,可知飞轮组产生的能量供给不足,需要电动机补偿供给。对该控制方法进行评价的标准是能量误差,我们计算的能量误差为5.53%,相对较小,接近实际情况。 对于问题5,根据问题3的数学模型,已知前一个时间段的瞬时转速与瞬时扭矩,结合转动定律,使用Matlab 进行拟合,得前一个时间段的转动惯量J 与时间的函数。把现阶段的时间段平均分为足够小,可视为瞬时时间,代入即可得现阶段转动惯量J ,再结合驱动电流与扭矩成正比,因此可求得驱动电流。评价: n 和拟合的次数都是可以在现阶段自行设置的,该方法的确信性是可以控制的,且可行的。 对于问题6,根据问题5的控制方法的不足之处进行改进,提高该计算机控制方法的精确性。我们可以使角加速度精确即对角加速度进行拟合,并可通过增加其驱动电流来完善该计算机的控制方法。评价:对角速度进行了细化,提高结果的准确性。 关键词:转动惯量 机械惯量 补偿惯量 曲线拟合 转动动能

MATLAB及其在数学建模中的应用

Modeling and Simulation 建模与仿真, 2015, 4(3), 61-71 Published Online August 2015 in Hans. https://www.doczj.com/doc/05407911.html,/journal/mos https://www.doczj.com/doc/05407911.html,/10.12677/mos.2015.43008 Study of MATLAB and Its Application in Mathematical Modeling Chuanqi Qin, Ting Wang, Yuanfeng Jin School of Science, Yanbian University, Yanji Jilin Email: yfkim@https://www.doczj.com/doc/05407911.html, Received: Jul. 22nd, 2015; accepted: Aug. 11th, 2015; published: Aug. 18th, 2015 Copyright ? 2015 by authors and Hans Publishers Inc. This work is licensed under the Creative Commons Attribution International License (CC BY). https://www.doczj.com/doc/05407911.html,/licenses/by/4.0/ Abstract This article firstly introduces the development and the features of MATLAB software. And then the concept and the process of mathematical modeling are explained. After, the article briefly intro-duces some MATLAB solution methods of mathematical modeling problems, giving several in-stances of some methods. At the last of this article, through a relatively complete example, it fo-cuses on the application of MATLAB in mathematical modeling. It has been found that the applica-tion of MATLAB in mathematical modeling can improve the efficiency and quality of mathematical modeling, enrich the means and methods of mathematical modeling, and play a very important role in the teaching of mathematical modeling course. Keywords MATLAB, Mathematical Modeling, Mathematic Model MATLAB及其在数学建模中的应用 秦川棋,王亭,金元峰 延边大学理学院,吉林延吉 Email: yfkim@https://www.doczj.com/doc/05407911.html, 收稿日期:2015年7月22日;录用日期:2015年8月11日;发布日期:2015年8月18日

数学建模B题 含代码

2013高教社杯全国大学生数学建模竞赛 承诺书 我们仔细阅读了中国大学生数学建模竞赛的竞赛规则. 我们完全明白,在竞赛开始后参赛队员不能以任何方式(包括电话、电子邮件、网上咨询等)与队外的任何人(包括指导教师)研究、讨论与赛题有关的问题。 我们知道,抄袭别人的成果是违反竞赛规则的, 如果引用别人的成果或其他公开的资料(包括网上查到的资料),必须按照规定的参考文献的表述方式在正文引用处和参考文献中明确列出。 我们郑重承诺,严格遵守竞赛规则,以保证竞赛的公正、公平性。如有违反竞赛规则的行为,我们将受到严肃处理。 我们参赛选择的题号是(从A/B/C/D中选择一项填写): B 我们的参赛报名号为(如果赛区设置报名号的话): 所属学校(请填写完整的全名):华南师范大学增城学院 参赛队员(打印并签名) :1. 2. 3. 指导教师或指导教师组负责人(打印并签名): 日期:年月日

赛区评阅编号(由赛区组委会评阅前进行编号):

2013高教社杯全国大学生数学建模竞赛 编号专用页 赛区评阅编号(由赛区组委会评阅前进行编号): 全国统一编号(由赛区组委会送交全国前编号):全国评阅编号(由全国组委会评阅前进行编号):

DVD在线租赁 摘要 问题(三):题目需要我们回答购买各种DVD的数量来使95%的会员能看到他DVD想看到的DVD,并且要怎么分配才能使满意度达到最大;每种建立以总的购买数最小、会员满意度最大为双目标的规划模型。通过确定在一个月内每张DVD的在每个会员中手中的使用率;然后通过c语言程序编程来确定每种DVD 的购买量;建立0-1规划模型;通过LINGO软件使满意度达到最大,来最终确定DVD的分配; 一级,二级目标,将多目标规划转化为单目标;同时将第j种DVD的购买量y的整数约束去掉,求解出最小购买数为张。将最小购买数作为约束条件,优j 化满意度后,得到最大满意度为95%;然后对此时DVD的购买量 y向上取整,得 j 到总购买数为186张。当购买数为186张时,会员满意度达到97%。 三、模型假设 1、租赁周期为一个月,每月租两次的会员可以在月中再租赁一次; 2、同一种DVD每人只能租赁一次; 3、DVD在租赁过程中无损坏; 4、会员每月至少交一次订单; 5、会员只有把前一次所借的DVD寄回,才可以继续下一次租赁 6、月底DVD全部收回,继续下个周期的租赁; 7、随着时间的推移,该网站的会员们的流动情况不会出现大变动。 四、符号说明

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 x1k 埃特金法: 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;

2015数学建模选修大作业

中华女子学院 成绩2014 — 2015学年第二学期期末考试 (论文类) 论文题目数学建模算法之蒙特卡罗算法 课程代码1077080001 课程名称数学建模 学号130801019

姓名陈可心 院系计算机系 专业计算机科学与技术 考试时间2015年5月27日 一、数学建模十大算法 1、蒙特卡罗算法 该算法又称随机性模拟算法,是通过计算机仿真来解决问题的算法,同时可以通过模拟可以来检验自己模型的正确性,是比赛时必用的方法。接下来本文将着重介绍这一算法。 2、数据拟合、参数估计、插值等数据处理算法 比赛中通常会遇到大量的数据需要处理,而处理数据的关键就在于这些算法,通常使用Matlab作为工具。 3、线性规划、整数规划、多元规划、二次规划等规划类问题 建模竞赛大多数问题属于最优化问题,很多时候这些问题可以用数学规划算法来描述,通常使用Lindo、Lingo软件实现。这个也是我们数学建模选修课时主要介绍的问题,所以对这方面比较熟悉,也了解了Lindo、Lingo软件的基本用法。 4、图论算法 这类算法可以分为很多种,包括最短路、网络流、二分图等算法,涉及到图论的问题可以用这些方法解决,上学期数据结构课程以及离散数学课程中都有介绍。它提供了对很多问题都很有效的一种简单而系统的建模方式。

5、动态规划、回溯搜索、分治算法、分支定界等计算机算法 这些算法是算法设计中比较常用的方法,很多场合可以用到竞赛中 6、最优化理论的三大非经典算法:模拟退火法、神经网络、遗传算法 这些问题是用来解决一些较困难的最优化问题的算法,对于有些问题非常有帮助,但是算法的实现比较困难,需慎重使用。 7、网格算法和穷举法 网格算法和穷举法都是暴力搜索最优点的算法,在很多竞赛题中有应用,当重点讨论模型本身而轻视算法的时候,可以使用这种暴力方案,最好使用一些高级语言作为编程工具。 8、一些连续离散化方法 很多问题都是实际来的,数据可以是连续的,而计算机只认的是离散的数据,因此将其离散化后进行差分代替微分、求和代替积分等思想是非常重要的。 9、数值分析算法 如果在比赛中采用高级语言进行编程的话,那一些数值分析中常用的算法比如方程组求解、矩阵运算、函数积分等算法就需要额外编写库函数进行调用。10、图象处理算法 赛题中有一类问题与图形有关,即使与图形无关,论文中也应该要不乏图片的,这些图形如何展示以及如何处理就是需要解决的问题,通常使用Matlab进行处理。 二、蒙特卡罗方法 2.1算法简介 蒙特·卡罗方法(Monte Carlo method),也称统计模拟方法,1946年,美国拉斯阿莫斯国家实验室的三位科学家John von Neumann,Stan Ulam 和 Nick

数学建模参赛真实经验总结

数学建模参赛真实经验 一、如何准备数学建模竞赛 一般,可以把参加数学建模竞赛的过程分成三个阶段:第一阶段,是个人的入门和积累阶段,这个阶段关键看个人的主观能动性;第二阶段,就是通常各学校都进行的集训阶段,通过模拟实战来提高参赛队员的水平;第三阶段是实际比赛阶段。这里讲的如何准备数学建模竞赛是针对第一阶段来讲的。 回顾作者自己的参赛过程,认为这个阶段是真正的学习阶段,就像是修炼内功一样,如果在这个阶段打下深厚的基础,对后面的两个阶段非常有利,也是个人是否能在建模竞赛中占优势的关键阶段。下面就分几个方面谈一下如何准备数学建模竞赛。 首先是要有一定的数学基础,尤其是良好的数学思维能力。并不是数学分数高就说明有很高的数学思维能力,但扎实的数学知识是数学思维的根基。对大学生来说,有高等数学、概率和线性代数就够了,当然其它数学知识知道的越多越好了,如图论、排队论、泛函等。我大一下学期开始接触数学建模,大学的数学课程只学习过高等数学。说这一点,主要想说明只要数学基础还可以,平时的数学考试都能在80分以上就可以参加数学建模竞赛了,数学方面的知识可以在以后的学习中逐渐去提高,不必刻意去补充单纯的数学理论。 真正准备数学建模竞赛应该从看数学建模书籍开始,要知道什么是数学建模,有哪些常见的数学模型和建模方法,知道一些常见的数学建模案例,这些方面都要通过看建模方面的书籍而获得。现在数学建模的书籍也比较多,图书馆和互联网上都有丰富的数学建模资料。作者认为姜启源、谢金星、叶齐孝、朱道元等老师的建模书籍都非常的棒,可以先看二三本。刚开始看数学建模书籍时,一定会有很多地方看不懂,但要知道基本思路,时间长了就知道什么问题用什么建模方法求解了。这里面需要提的一点是,运筹学与数学建模息息相关,最好再看一二本运筹学著作,仍然可以采取诸葛亮的看书策略,只观其大略就可以了,等知道需要具体用哪块知识后,再集中精力将其消化,然后应用之。 大家都知道,参加数学建模竞赛一定要有些编程功底,当然现在有Matlab这种强大的工程软件,对编程的的要求就降低了,至少入门容易多了,因为很容易用1条Matlab命令

10909-数学建模-应用MATLAB建模的一个例子

应用MATLAB 的一个例子 ——数学也是一门技术 王天顺 整理 本来想用 “数学也是一门技术”作题目,主要是基于两点,一是从数学的应用角度,它的确具备了作为一门技术的特征,这也就是今天我要通过一个例子要表达的;二是咱们在座的大多数都是从事职业教育的老师,不知道我理解得是不是正确,职业教育与普通教育的区别是较为侧重于教授技术,我主观上感觉这个题目和大家的关系更紧密一些。但是,这个题目有点太大了!和领导商量了一下还是换个题目吧。 首先可以证明:数学确是一门技术,比如说要从技术的定义入手,流行的做法是:查查《辞海》,查查相关的如《科学学辞典》和《科技辞典》等等,看看他们是怎样给技术定义的;其次,论述一下数学的确是符合这些定义的。 实际上,我也确实查阅过这些资料,可以说没有问题,一定可以找到证据证明这个论断! 注:“技术”一词的中文解释有两种,一种是以《辞海》为代表的解释,把技术定义为:(1 )泛指根据生产实践经验和自然科学原理而发展成的各种工艺操作方法与技能;(2)除操作技能外, 广义的还包括相应的生产工具和其他物质设备,以及生产的工艺过程或作业程序、方法。另一种是以《科学学辞典》和《科技辞典》为代表的解释,把技术定义为:是为社会生产和人类物质文化生活需要服务的,供人类利用和改造自然的物质手段、智能手段和信息手段的总和。 可见, “技术”一词所包含的内容除了有形的物化形态之外,还包括无形的智能形态方面。无形的智能形态的技术是客观存在的,在某种意义上说,这方面技术的作用并不亚于物化形态的技术,更不能为物化形态技术所取代(背景资料)。因此,有关“技术”的涵义,有人概括为:指的是有形的物化技术和无形的智能技术的总和。 当然,容易想到我们把数学看作一门技术,可能更多的是从技术的无形“智能形态”角度论述的。我想这只是他的一个方面,今天先给各位介绍的是一个例子,展现他的另一个方面,用数学(包括相关的软件)去解决一个实际问题,其过程就像“传统的”、物化形态的技术一样;其次,结合上述例子,探讨有关数学建模及相关培训指导工作的一般原则和步骤,谈一点个人对此项工作的认识;最后,介绍我校的这些年数学建模培训工作的一些具体做法。 一、足球比赛中的吊门问题 1. 问题:只考虑如下的因素:球与球门的距离为a ,守门员与球门的距离为b (假设在调 门过程中,守门员不能移动),球门高h ,守门员最大摸高H ,球出脚的初速度为0v ,与水平方向的夹角为α(称为初射角).针对下列数据求能吊门成功的α,h=2.44m ,H=3.20m ,s m v /300= ,重力加速度g=10m/s 2,针对下列几组数据分别给出具体能吊门成功的相应初射角范围,要求精度在小数点后第4位。 (1) a=6m ,b=1m ; (2) a=10m ,b=3m ; (3) a=20m ,b=5m ; 2. 问题分析 (1) 在不考虑空气阻力的情况下,抛射体的运动轨迹是抛物线:

matlab数学建模实例

第四周 3. 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 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; n=n+1; end n Seidel迭代法: function s=seidel(a,d,x0) D=diag(diag(a)); U=-triu(a,1); L=-tril(a,-1);

相关主题
文本预览
相关文档 最新文档