2015数学建模国赛b题代码分析

所用代码出自2015年b285优秀论文,建模时可做参考

出租车数量 、 请求单数 、用户等待时间空间分布图 3D

distribute=xlsread('20150906distribute.csv'); 
Dis=[]; m1=17; 
for i=1:length(distribute) % 矩阵行和列的最大值    
    if (distribute(i,1)==m1)         
        [Dis]=[Dis; distribute(i,:)];     
    end
end
figure 
[x1]=Dis(:,2); % x坐标
[y1]=Dis(:,3); % y坐标
[z1]=Dis(:,4); % z坐标
nxDis=linspace(min(x1),max(x1),100); %最小值->最大值间的100个数据点
nyDis=linspace(min(y1),max(y1),100); 
[xx1,yy1]=meshgrid(nxDis,nyDis); %创建nxDis和nyDis的网格
[X1,Y1,Z1]=griddata(x1,y1,z1,xx1,yy1,'v4'); % 插值
surf(X1,Y1,Z1); % 三维曲面
%colormap gray; % 颜色
%axis equal; % 设置屏幕高宽比
xlabel('经度/°'); 
ylabel('纬度/°'); 
title('2015年9月6日高峰(17时)上海市出租车数量分布'); 
  • linspace(x1,x2,N)
    功 能:用于产生x1,x2之间的N点行矢量,相邻数据跨度相同。其中x1、x2、N分别为起始值、终止值、元素个数。若缺省N,默认点数为100。
    举例如下:
    X=linspace(5,100,20) % 产生从5到100范围内的20个数据,相邻数据跨度相同
    X =5 10 15 20 25 30 35 40 45 50 55 60 65 70 75 80 85 90 95 100
  • [A,B]=meshgrid(a,b)
    生成size(b)Xsize(a)大小的矩阵A和B。它相当于a从一行重复增加到size(b)行,把b转置成一列再重复增加到size(a)列。
  • griddata是matlab中的插值函数,’v4’是MATLAB自定义的 4 格点样条函数内插选项。
  • colormap gray:
    surf函数绘制表面图时自带的颜色就是由colormap决定的,使用默认parula来上色.MATLAB中默认自带了18中colormap,按照主题可分为:
    季节(summer,autumn,winter,spring)温度(hot,cool)材质(bone,copper)hues(pink,gray)颜色空间(hsv,colorcube-sort
    of)

:这段代码很有参考价值

A=[1.486,3.059,0.1;2.121,4.041,0.1;2.570,3.959,0.1;3.439,4.396,0.1;
4.505,3.012,0.1;3.402,1.604,0.1;2.570,2.065,0.1;2.150,1.970,0.1;
1.794,3.059,0.2;2.121,3.615,0.2;2.570,3.473,0.2;3.421,4.160,0.2;
4.271,3.036,0.2;3.411,1.876,0.2;2.561,2.562,0.2;2.179,2.420,0.2;
2.757,3.024,0.3;3.439,3.970,0.3;4.084,3.036,0.3;3.402,2.077,0.3;
2.879,3.036,0.4;3.421,3.793,0.4;3.953,3.036,0.4;3.402,2.219,0.4;
3.000,3.047,0.5;3.430,3.639,0.5;3.822,3.012,0.5;3.411,2.385,0.5;
3.103,3.012,0.6;3.430,3.462,0.6;3.710,3.036,0.6;3.402,2.562,0.6;
3.224,3.047,0.7;3.411,3.260,0.7;3.542,3.024,0.7;3.393,2.763,0.7];
x=A(:,1);y=A(:,2);z=A(:,3);
scatter(x,y,5,z)%散点图
figure
[X,Y,Z]=griddata(x,y,z,linspace(1.486,4.271)',linspace(1.604,4.276),'v4');%插值
pcolor(X,Y,Z);shading interp%伪彩色图
figure,contourf(X,Y,Z) %等高线图
figure,surf(X,Y,Z)%三维曲面

这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述

特定商圈 、 城郊地区全天空驶率变化折线图

(以 2015年 8月 30日全天东川路地铁站中心 10km范围为例)

data=xlsread('0830东川路.csv');   
[t0]=data(:,1); 
[K]=data(:,7); 
figure; 
plot(t0,K,'-rs','LineWidth',2,'MarkerEdgeColor','k','MarkerFaceColor','g','MarkerSize',10); 
% 's'表示正方形,线宽为2,MarkerEdgeColor标识符边缘颜色为黑色,MarkerFaceColor标识符填充颜色为绿色,MarkerSize标识符大小为10
axis([0 24 0 1]); % 坐标轴的显示范围
set(gca,'xtick',0:1:24); % X轴的记号点
xlabel('t/小时'); 
ylabel('K/空驶率'); 
title('2015年8月30日(工作日)东川路地铁站中心10km范围内空载率全天变化图'); 

这里写图片描述

边长7km方形区域内请求单数等高线和随机位置散点图

xmin=121.4; 
xmax=121.4824; 
ymin=31.2; 
ymax=31.263; %经纬度范围 
dx=(xmax-xmin)/9; 
dy=(ymax-ymin)/9; 
nx=linspace(xmin,xmax+dx,11); 
ny=linspace(ymin,ymax+dy,11); 
demand=xlsread('0910demand.csv'); 
De=[]; m=17; % 下午17时
for i=1:length(demand)     
    if (demand(i,1)==m)         
        [De]=[De; demand(i,:)]; 
    end
end
figure; 
[x1]=De(:,2);
[y1]=De(:,3);
[z1]=De(:,4); 
nxDis=linspace(min(x1),max(x1),80); 
nyDis=linspace(min(y1),max(y1),80); 
[xx1,yy1]=meshgrid(nxDis,nyDis); 
z2=griddata(x1,y1,z1,xx1,yy1,'v4'); % 插值
contour(xx1,yy1,z2,200,'s'); % 绘制矩阵的等高线,指定等高线的数量为200
axis([xmin xmax+dx ymin ymax+dy]); % 坐标范围
set(gca,'xtick',nx); 
set(gca,'ytick',ny); 
set(gca,'DataAspectRatio',[110.94 85.276 1]); % 将横纵坐标按照经纬度折 算公里数缩放 使得图中显示恰好为正方形 
grid on; % 加上网格线
rotateticklabel(gca,'x',-30); % X轴刻度标签比较拥挤时旋转30度
hold on;  
Dio=xlsread('meshin4.xls'); 
scatter(Dio(:,2),Dio(:,1),90,'+r'); % 散点图,点的大小为90
title('随机散点分布情况');

双坐标折线图

meanall=[]; 
for i=1:24 
    meanall=[meanall;[mean(dataall(i).taxi(:,3)),mean(dataall(i).passenger(:,3))]]; 
end 
h=1:24; 
set(gcf,'PaperType','A4', ... 
    'paperOrientation', 'portrait', ... 
    'paperunits','CENTIMETERS','PaperPosition',[.00, .00,16,10]); 
[hAx,hLine1,hLine2]=plotyy(h,meanall(:,1),h,meanall(:,2)); % 双坐标
ylabel(hAx(1),'出租车均值') 
ylabel(hAx(2),'乘客均值') 
set(hLine1,'LineStyle','--','Marker','*','MarkerSize',6,'LineWidth',1.5) 
set(hLine2,'LineStyle',':','Marker','o','MarkerSize',6,'LineWidth',1.5) 
xtlabel=num2cell(h);%cat(2,num2cell(h(1:4:end-2)),method); 
set(hAx,'XTick',h,'XTickLabel',xtlabel,'xlim',[1,24]) 
grid on 
xlabel('时间') 
leglabel={'出租车均值','乘客需求均值'}; 
legend(leglabel,'Location','Best') 
title('成都市 2015 年 9 月 9 日全天出租车分布和乘客需求均值图') 
figname=strcat('chengdu_mean','.jpg'); 
saveas(gcf, figname, 'jpg'); 

这里写图片描述

补充:
R=normrnd(μ,σ):生成服从正态分布(μ参数代表均值,σ参数代表标准差)的随机数。输入的向量或矩阵μ和σ必须形式相同,输出R也和它们形式相同。标量输入将被扩展成和其它输入具有相同维数的矩阵。

参考:
[1] https://www.cnblogs.com/aminxu/p/4643109.html (插值,这篇博客写得真的很不错!)
[2] https://blog.csdn.net/hhhhhyyyyy8/article/details/77862343 (介绍colormap)
[3] https://www.cnblogs.com/haore147/p/3633017.html (plot参数解析)
[4] https://blog.csdn.net/qq_35052417/article/details/76461643 (axis用法)

猜你喜欢

转载自blog.csdn.net/sunyueqinghit/article/details/81261145