为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

(最新)数学建模代码汇总

2017-10-29 25页 doc 53KB 140阅读

用户头像

is_654168

暂无简介

举报
(最新)数学建模代码汇总(最新)数学建模代码汇总 插值 % 产生原始数据 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,...
(最新)数学建模代码汇总
(最新)数学建模代码汇总 插值 % 产生原始数据 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 P0表示函数已收敛到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=size+i)&(l=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 total=total+1 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);% 记录从对角线的使用情况 number=0; [chess,main,deputy,number]=justtry (1,n,chess,main,deputy,number);
/
本文档为【(最新)数学建模代码汇总】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索