matlab在气象上的应用.ppt

上传人:sh****n 文档编号:2905656 上传时间:2019-12-04 格式:PPT 页数:69 大小:4.54MB
返回 下载 相关 举报
matlab在气象上的应用.ppt_第1页
第1页 / 共69页
matlab在气象上的应用.ppt_第2页
第2页 / 共69页
matlab在气象上的应用.ppt_第3页
第3页 / 共69页
点击查看更多>>
资源描述
,在大气科学中的应用,李若楠,一、Matlab界面简介以及一些重要指令和注意事项 二、数据处理,plot相关命令绘图,contour(f)命令绘图,不同投影方式绘图,其他,txt 数据,Excel 数据(.xls),二进制数据,NetCDF、hdf和Grib格式数据,其他,主要内容,三、图形绘制,当MATLAB 程序启动时,一个叫做MATLAB 桌面的窗口出现了。默认的MATLAB桌面结构如图1.1 所示。在MATLAB 集成开发环境下,它集成了管理文件、变量和应用程序的许多编程工具。 在MATLAB 桌面上可以得到和访问的窗口主要有: 命令窗口(The Command Window) 命令历史窗口(The Command History Window) 启动平台(Launch Pad) 编辑调试窗口(The Edit/Debug Window) 工作台窗口和数组编辑器(Workspace Browser and Array Editor) 帮助空间窗口(Help Browser) 当前路径窗口(Current Directory Browser),一、Matlab界面简介,一些重要的命令,在任何时侯你都可以用clc 命令清空命令窗口(The Command Windows)中的内容; 可以用clf清空当前图象窗口中的内容。 在工作空间窗口(The workspace browser)中变量可用clear命令清除。 正如我们看到的,工作空间窗口(The workspace browser)中的变量在独立的命令和M 文件间执行时,可能会出现第一个问题中的变量存留在工作区而影响到第二个问题的解决。为了避免这种情况的发生,在新的计算开始之前,应当有clear 命令清空工作区。,变量名的命名,MATLAB 的变量名必须以字母开头,后面可以跟字母,数字和下划线(_).只有前31个字符是有效的; 如果超过了31 个字符,基余的字符将被忽略。如果声明两个变量,两变量名只有第32 个字符不同,那么MATLAB 将它们当作同一变量对待。 在MATLAB 语言中是区分字母大小的,也就是说,大写字母和小写字母代表的东西是不同的。,数组,表2.1 用于创始化变量的MATLAB 函数 函数 作用 zeros(n) 创建一个nn 零矩阵 zeros(n,m) 创建一个nm 零矩阵 zeros(size(arr) 创建一个与数组arr 的零矩阵 ones(n) 创建一个nn 元素全为1 矩阵 ones(n,m) 创建一个nm 元素全为1 矩阵 eye(n) 创建一个nn 的单位矩阵 eye(n,m) 创建一个nm 的单位矩阵 length(arr) 返回一个向量的长度或二维数组中 最长的那一维的长度 size(arr) 返回指定数组的行数和列数,数组的运算,MATLAB 数据导入与导出,可以读取的文件类型: 文本文件、word 文件、xml 文件、xls 文件、图像文件和音视频文件等,有三种方式读取数据,1、直接导入(importdata) 2、命令窗口 3、file操作,二、数据处理,数据处理,txt 数据,Excel 数据(.xls),二进制数据7. 基本的读写,NetCDF, Grib 和hdf格式数据,1. 矩阵型数据的读写,2. 带变量名的矩阵型数据的读写,3. 含有时间的矩阵型数据的读写,4. 混合数字与字符串数据的读写,5. 基本的读写,6. 含有时间格式变量的excel数据读写,其他,8. NetCDF格式数据,9. Grib格式数据,10. hdf格式数据,12. 矩阵操作,文件操作,命令窗口,导入函数,命令窗口,导出函数,命令窗口,文本文件(txt)的读写,命令窗口, csvread、csvwrite具体调用格式,M = csvread(filename, row, col, range), 将文件 filename 中的数据读入,并且保存为 M,filename 中只能包含数字,并且数字之间以逗号分隔。起始行为 row,起始列为 col,读取的数据由数组 range 指定,range 的格式为:R1 C1 R2 C2,其中 R1、C1 为读取区域左上角的行和列,R2、C2 为读取区域右下角的行和列。 csvwrite(filename,M,row,col), 将数组 M 中的数据保存为文件 filename,数据间以逗号分隔。将数组 M 中的指定数据保存在文件中,数据由参数 row 和 col 指定,保存 row 和 col 右下角的数据。 注:csvwrite 写入数据时每一行以换行符结束。另外,该函数不返回任何值。 csvwrite(H:shujueg101.txt,M);,csvread & csvwrite示例, I_MATLAB= imread(H:shuju850hpa.bmp); % read in the image I_MATLAB= rgb2gray(I_MATLAB); % convert the image to gray figure,imshow(I_MATLAB); csvwrite(H:shuju850hpa.txt,I_MATLAB); % write the data into a text sub_MATLAB= csvread(H:shuju850hpa.txt,1,500); %read in part of the data sub_MATLAB= uint8(sub_MATLAB); figure,imshow(sub_MATLAB);, dlmread、dlmwrite,dlmread 函数用于从文档中读入数据,其功能强于 csvread。dlmread 的调用格式如下: M = dlmread(filename, delimiter, R, C) M = dlmread(filename, delimiter, range) 其中参数 delimiter 用于指定文件中的分隔符,其他参数的意义与 csvread函数中参数的意义相同,这里不再赘述。dlmread 函数与 csvread 函数的差别在于,dlmread 函数在读入数据时可以指定分隔符,不指定时默认分隔符为逗号。 dlmwrite 函数用于向文档中写入数据,其功能强于 csvwrite 函数。 dlmwrite函数的调用格式为: dlmwrite(filename, M, D, R, C),指定写入数据的起始位置。 dlmwrite(filename, M, attribute1, value1, attribute2, value2, .),指定任意数目的参数,可以指定的参数见下表。 dlmwrite(filename, M, -append),如果 filename 指定的文件存在,在文件后面写入数据,不指定时则覆盖原文件。 dlmwrite(filename, M, -append, attribute-value list),叙写文件,并指定参数。 dlmwrite 函数的可用参数如下表 所示。,dlmwrite 函数的可用参数,textread,textscan,当文件的格式已知时,可以利用 textread 函数和 textscan 函数读入。这里只介绍这两个函数应用的实例。 按照原有格式读取。 names, types, x, y, answer = textread(J:shujueg301.txt,%s %s %f %d %s,3) fid1= fopen(J:shujueg3.txt); C = textscan(fid1,%s %s %f32 %d8 %u %f %f %s); fclose(fid1); C1 ans = Sally YesJoe Bill,eg3.txt内容: Sally Type1 12.34 45 1.23e10 inf NaN Yes Joe Type2 23.54 60 9e19 -inf 0.001 No Bill Type3 34.90 12 2e5 10 100 No,eg301.txt内容: Sally Level1 12.34 45 Yes Joe Level2 23.54 60 No Bill Level3 34.90 12 No,本节介绍一些基本的文件操作,这些操作如下表 所示。 MATLAB 的基本文件操作,文件操作,fscanf & fprintf,1)读文本文件 fscanf函数可以读取文本文件的内容,并按指定格式存入矩阵。其调用格式为: A,COUNT=fscanf(fid,format,size) 说明:其中A用来存放读取的数据,COUNT返回所读取的数据元素个数,fid为文件句柄,format用来控制读取的数据格式, size为可选项。 2)写文本文件 fprintf函数可以将数据按指定格式写入到文本文件中。其调用格式为: fprintf(fid,format,A) 说明:fid为文件句柄,指定要写入数据的文件,format是用来控制所写数据格式的格式符,与fscanf函数相同,A是用来存放数据的矩阵。,1. 矩阵型数据的读写,txt 数据,data1.txt,a.txt内容: 1 2 3 4 5 6 7 8, fid1=fopen(J:a.txt,r); data=fscanf(fid1,%d %d %d %d,4,2); data data = 1 5 2 6 3 7 4 8, data2=data; data2 data2 = 1 2 3 4 5 6 7 8,2. 带变量名的矩阵型数据的读写,data2.txt,3. 含有时间的矩阵型数据的读写,data3.txt,data4.txt,4. 混合数字与字符串数据的读写,文件test2.txt内容: 你好 1 11 111 1111 欢迎来到 2 22 222 2222 动力学与仿真控制论坛 3 33 333 3333 4 44 444 4444 5 55 555 5555 fidin=fopen(H:shujutest2.txt); % 打开test2.txt文件 fidout=fopen(H:shujumkmatlab.txt,w); % 创建MKMATLAB.txt文件 while feof(fidin) % 判断是否为文件末尾 tline=fgetl(fidin); % 从文件读行 if double(tline(1)=48 % 将生成的MKMATLAB.txt文件导入工作环境,5. 基本的读写 主要的读写命令是xlsread和xlswrite。,Excel 数据(.xls),result4.xls, d = Time,Temperature; 12,98; 13,99; 14,97; xlswrite(J:shujutestdata2.xls, d, 1, E1) a=xlsread(J:shujutestdata2.xls); a1=xlsread(J:shujutestdata2.xls,1,E2:F4); a3,h=xlsread(J:shujutestdata2.xls,1);,6. 含有时间格式变量的excel数据读写,data6.xls,a. 将单元格的格式从日期型改为数值型即可,b. 如果时间信息对处理数据比较重要怎么办? 首先删除excel文件中的全部字符型的变量名。然后利用下面的方法将时间读到第二个文本变量中去。,7. 基本的读写 首先要知道数据的结构 500hPa的位势高度数据,结构是144*73*25(data7.dat),二进制数据,8. NetCDF格式数据 采用的全球温度数据 data8.nc,NetCDF, Grib和hdf格式数据,9. Grib格式数据 首先是安装Grib工具箱read_grib1.4.0.tar,将其解压后添加路径(具体可看参考的网上教程)。 第一步:将Matlab最上面的当前路径“current directory”选择到read_grib文件夹下。 第二步:在命令框中输入“mex BDS_unpack_mex5.c”进行相关C语言程序的编译。直到屏幕上出现“Select a compiler:”时,再进行编译器的选择(我输入1进行选择)。编译成功后就会出现,实例:,10. hdf数据,data10.hdf,a. 直接用file里面importdata就可以读hdf数据,b. 通过命令控制读取hdf数据,program10.m,12. 矩阵操作,其 他,a3 = 12 98 13 99 14 97 aa=reshape(a3,2 3) aa = 12 14 99 13 98 97,三、图 形 绘 制,13. plot命令绘图,14. contour(f)命令绘图,15.不同投影方式绘图,16. 其他,图形绘制,13. plot命令绘图,绘制二维曲线的基本函数,线的颜色,线的形式,符号形式和图例,MATLAB 允许程序员选择轨迹的颜色,轨迹的形式,和符号的类型.在X,Y 向量参数后带有这些属性的字符串的plot 函数,可以选择这些细节. 这些属性字符串包括三个方面, 第一方面指定轨迹的颜色, 第二方面指定符号的类型, 第三方面指定线的类型.,附加属性设置,legend(string1,string2,.,pos),其中string1,string2 等等是与轨迹标签名,而pos 是一个整数,用来指定图例的位置。 这些整数所代表的意义在表2.10 中的列出。用legend off 命令将能去除多余的图例。一个完整的图象例子将会显示图2.7 中,产生这个图象的语句如下所示。图2.7 在同一坐标系内,显示了f(x)=sin2x 和它的微分函数的图象,用黑实线代表f(x),用红虚线代表它的微分函数。图中有标题,坐标轴标签和网格线。 x=0:pi/100:2*pi; y1=sin(2*x); y2=2*cos(2*x); plot(x,y1,k-,x,y2,b-); title( Plot of f(x)=sin(2x) and its derivative); xlabel(x); ylabel(y); legend(f(x),d/dx f(x) grid on; text(x,y,图形说明),1.plot 函数的x,y 均用线性尺度 2.semilogx 函数x 轴用对数尺度,y 轴将用线性尺度 3.semilogy 函数x 轴用线性尺度,y 轴用对数尺度 4.loglog 函数两坐标轴将会都用对数尺度。,打印数据既可以用对数尺度,也可以用线性尺度。在x,y 轴上使用这两种尺度的一种或两种 可以组合形成4 种不同的坐标系。每一种组合者有一个特定的函数。,axis以及hold on 、hold off、subplot(m,n,p),图形窗口分割:subplot(m,n,p) 该函数把当前窗口分成mn个绘图区,m行,每行n个绘图区,区号按行优先编号。其中第p个区为当前活动区。每一个绘图区允许以不同的坐标系单独绘制图形。,利用函数plot在一个坐标系中画以下几个函数图像,要求采用不同颜色、不同线形、不同的符号标记函数为: 程序如下: t=0:pi/20:2*pi; x=sin(t); y=cos(t); z=sin(2*t); plot(t, x, -k*, t, y, -rs, t, z, :bo) 图像如下:,双纵坐标函数plotyy,在Matlab中,如果需要绘制出具有不同纵坐标标度的两个图形,可以使用plotyy函数,它能把具有不同量纲,不同数量级的两个函数绘制在同一个坐标中,有利于图形数据的对比分析。使用格式为:plotyy(x1,y1,x2,y2) x1,y1对应一条曲线,x2,y2对应另一条曲线。横坐标的标度相同,纵坐标有两个,左边的对应x1,y1数据对,右边的对应x2,y2。,其他形式的线性直角坐标图,在线性直角坐标中,其他形式的图形有条形图、阶梯图、杆图和填充图等,所采用的函数分别为: bar(x,y,选项) 选项在单引号中 stairs(x,y,选项) stem(x,y,选项) fill(x1,y1,选项1,x2,y2,选项2,) 前三个函数和plot的用法相似,只是没有多输入变量形式。fill函数按向量元素下标渐增次序依次用直线段连接x,y对应元素定义的数据点。,分别以条形图、填充图、阶梯图和杆图形式绘制曲线,x=0:0.35:7; y=2*exp(-0.5*x); subplot(2,2,1);bar(x,y,g); title(bar(x,y,g);axis(0, 7, 0 ,2); subplot(2,2,2);fill(x,y,r); title(fill(x,y,r);axis(0, 7, 0 ,2); subplot(2,2,3);stairs(x,y,b); title(stairs(x,y,b);axis(0, 7, 0 ,2); subplot(2,2,4);stem(x,y,k); title(stem(x,y,k);axis(0, 7, 0 ,2);,极坐标图polar,polar函数用来绘制极坐标图,调用格式为: polar(theta,rho,选项) 其中,theta为极坐标极角,rho为极径,选项的内容和plot函数相似。,示例 theta=0:0.01:2*pi; rho=sin(3*theta).*cos(5*theta); polar(theta,rho,r);,plot3,plot3(x1,y1,z1,选项1,x2,y2,z2,选项2,) 其中每一组x,y,z组成一组曲线的坐标参数,选项的定义和plot的选项一样。当x,y,z是同维向量时,则x,y,z对应元素构成一条三维曲线。当x,y,z是同维矩阵时,则以x,y,z对应列元素绘制三维曲线,曲线条数等于矩阵的列数。 例如: x=0:pi/30:20*pi; y=sin(x);z=cos(x); plot3(x,y,z) 得到三维螺旋线:,三维曲线绘图,平面网格坐标矩阵的生成,原理: 当绘制z=f(x,y)所代表的三维曲面图时,先要在xy平面选定一矩形区域,假定矩形区域为Da,bc,d,然后将a,b在x方向分成m份,将c,d在y方向分成n份,由各划分点做平行轴的直线,把区域D分成mn个小矩形。生成代表每一个小矩形顶点坐标的平面网格坐标矩阵,最后利用有关函数绘图。,三维曲面,y,x,0,产生平面区域内的网格坐标矩阵有两种方法:,1、利用矩阵运算生成。 x=a:dx:b; y=(c:dy:d); X=ones(size(y)*x; Y=y*ones(size(x); 经过上述语句执行后,矩阵X的每一行都是向量x,行数等于向量y的元素个数,矩阵Y的每一列都是向量y,列数等于向量x的元素个数。 2、利用meshgrid函数生成; x=a:dx:b; y=c:dy:d; X,Y=meshgrid(x,y); 语句执行后,所得到的网格坐标矩阵和上法,相同,当x=y时,可以写成meshgrid(x),空间曲面作图函数,(1)mesh函数绘制彩色网格面图形调用格式: mesh(z),mesh(x,y,z)和mesh(x,y,z,c) 其中,mesh(x,y,z,c)画出颜色由c指定的三维网格图 (2)surf在矩形区域内显示三维带阴影曲面图调用格式与mesh类似 注意: 一般情况下,x,y,z是维数相同的矩阵,x,y是网格坐标矩阵,z是网格点上的高度矩阵,c用于指定在不同高度下的颜色范围。 c省略时,Matlab认为c=z,也即颜色的设定是正比于图形的高度的。这样就可以得到层次分明的三维图形。 当x,y省略时,把z矩阵的列下标当作x轴的坐标,把z矩阵的行下标当作y轴的坐标,然后绘制三维图形。 若x、y均为向量,则length(x)=n,length(y)=m,m,n=size(z),三维曲面,利用函数 ,绘制一个墨西哥帽子的图形 程序如下: a,b=meshgrid(-8:.5:8); %先生成一个网格 c=sqrt(a.2+b.2)+eps; z=sin(c)./c; mesh(a,b,z) axis square 图像如下:,利用surf绘制马鞍面图形(函数为:) 程序如下: x,y=meshgrid(-25:1:25,-25:1:25); z=x.2/9-y.2/4; surf(x,y,z) title(马鞍面) grid off 图像如下:,从图中可以发现,网格图(mesh)中线条有颜色,线条间补面无颜色。曲面图(surf)的线条都是黑色的,线条间补面有颜色。进一步观察,曲面图补面颜色和网格图线条颜色都是沿z轴变化的。,Matlab还提供了一个peaks函数,称为多峰函数,常用于三维曲面的演示。该函数可以用来生成绘图数据矩阵,矩阵元素由函数: 在矩形区域3 33 3的等分网格点上的函数值确定。如:z=peaks(30)将生成一个3030矩阵 eg: x,y,z=peaks(30); meshz(x,y,z);,多峰函数peaks,其他三维图形,在介绍二维图形时,曾经提到条形图、杆图、饼图和填充图等特殊图形,它们还可以以三维形式出现,其函数分别为bar3,stem3,pie3和fill3。 bar3绘制三维条形图,常用格式为: bar3(y);或者 bar3(x,y) 在第一种格式中,y的每个元素对应于一个条形。第二种格式在x指定的位置上绘制y中元素的条形图。 stem3函数绘制离散序列数据的三维杆图,常用格式为: stem3(z)或者stem3(x,y,z) 第一种格式将数据序列z表示为从xy平面向上延伸的杆图,x和y自动生成。第二种格式在x和y指定的位置上绘制数据序列z的杆图,x,y,z的维数要相同。 pie3函数绘制三维饼图,常用格式为: pie3(x) x为向量,用x中的数据绘制一个三维饼图。 fill3函数可在三维空间内绘制出填充过的多边形,常用格式为: fill3(x,y,z,c) 用x,y,z做多边形的顶点,而c指定了填充的颜色。,除了上面讨论的三维图形外,常用的图形还有瀑布图和三维曲面的等高线图。绘制瀑布图用waterfall函数,用法和meshz函数相似,只是它的网格线在x轴方向出现,具有瀑布效果。等高线图分二维和三维两种形式,分别使用函数contour和contour3绘制。 subplot(1,2,1); X,Y,Z=peaks(30); waterfall(X,Y,Z); xlabel(XX);ylabel(YY);zlabel(ZZ); subplot(1,2,2); contour3(X,Y,Z,12,r);%其中12代表高度的等级数 xlabel(XX);ylabel(YY);zlabel(ZZ);,视点处理,在日常生活中,从不同的角度观察物体,所看到的物体形状是不一样的。同样,从不同视点绘制的三维图形的形状也是不一样的。视点位置可由方位角和仰角表示。 Matlab提供了设置视点的函数view,其调用格式为: view(az,el) 其中az为方位角,el为仰角,它们均以度为单位。系统默认的视点定义为方位角为-37.5度,仰角30度。,从不同视点绘制多峰函数曲面, subplot(2,2,1);mesh(peaks); view(-37.5,30); title(1); subplot(2,2,2);mesh(peaks); view(0,90); title(2); subplot(2,2,3);mesh(peaks); view(90,0); title(3); subplot(2,2,4);mesh(peaks); view(-7,-10); title(4);,从不同视点绘制多峰函数曲面图,14. contour(f)绘图命令,绘制海岸线, set(gca,LineWidth,2,FontSize,12,Ylim,-90 90,Xlim,-180 180,clim,-35,45,Position,0.05 0.4 0.4 0.45,XTick,-180:60:180,XTicklabel,-180W,-120W,-60W,0,60E,120E,180E,YTick,-90:30:90,YTicklabel,-90S,-60S,-30S,0,30N,60N,90N);%添加坐标经纬度坐标轴 hold on load coast plot(long,lat,-k,LineWidth,1);,对图形对象的修改可以用下面函数,1)set函数:用于设置句柄所指的图形对象的属性.Set函数的格式为: set(句柄, 属性名1, 属性值1, 属性名2, 属性值2, )例:h=plot(x,y)set(h, Color, 1,0,0)-将句柄所指曲线的颜色设为红色. 2)get函数:获取指定句柄的图形对象指定属性的当前值.格 式为: get(句柄, 属性名) 如: get(gca, Xcolor)-获得X轴的当前颜色属性值.执行后可返 回X轴的当前颜色属性值0,0,0(黑色). 3)如果没有设置句柄,则可以使用下列函数获得: gcf:获得当前图形窗 口的句柄; gca:获得当前坐标轴对象的句柄; gco:获得当前对象的句柄.,一些常用的属性如下:,1)Box属性:决定图形坐标轴是否为方框形式,选项为on(有方框),off(无方框); 2)ColorOrder属性:设置多条曲 线的颜色顺序,默认值为:1 1 0;1 0 1;0 1 1;1 0 0;0 1 0;0 0 1黄色 粉色 天蓝 红色 绿色 兰色,颜色向量还有:1 1 1-白色;0 0 0-黑色. 3)坐标轴方向属性:Xdir,Ydir,Zdir,其选项为:normal-正常reverse-反向 4) 坐标轴颜色和线型属性: Xcolor,Ycolor,Zcolor- 轴颜色,值为颜色向量; LineWidth- 轴的线宽,值为数字; Xgrid,Ygrid,Zgrid-坐标轴上是否加网格,值为on和off. 5)坐标轴的标尺属性: Xtick,Ytick,Ztick- 标度的位置,值为向量Xticklabel,Yticklabel,Zticklabel- 轴上标度的符号,它的值为与标度位置向量同样大小(向量个数相同)的向量. 6)字体设置属 性:FontAngle- 设置字体角度,选项为: normal - 正常; italic -斜体; oblique - 倾斜; FontName- 字体名称;FontSize- 字号大小; FontWeight- 字体的轻重,选项为:light,normal,bold,15. 不同投影方式绘图(m_map),16. 其他 画双errorbar(x,y) 旋转的x轴刻度 画多坐标轴,ploterr.m,xticklabel_rotate.m,plots.m,d. 隐函数作图(ezplot、ezpolar,ezcontour,ezplot3,ezmesh,ezmeshc,ezsurf), subplot(1,2,1); ezplot(x2+y2-9);axis equal; subplot(1,2,2); ezplot(x3+y3-5*x*y+1/5),谢 谢 !,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!