描述
开 本: 16开纸 张: 胶版纸包 装: 平装-胶订是否套装: 否国际标准书号ISBN: 9787302503149
本书适合四类读者阅读或参考: 一是学习MATLAB课程的理工科大、中专及高等职业学校、中等职业学校的在校学生; 二是广大工程技术、科研人员; 三是数学爱好者; 四是从事文秘工作的人员。
本书通俗易懂,图文并茂,资料丰富,实用性强,既适合初学者,也适合有一定MATLAB基础的爱好者及专业技术人员。
目录
第1章MATLAB基础知识
1.1MATLAB的发展历程
1.2MATLAB的特点
1.3MATLAB的桌面操作环境
1.4MATLAB的常量和变量
1.5MATLAB命令窗口应用例子
1.6小结
第2章多项式处理
2.1多项式的创建
2.2多项式的因式分解
2.3乘积展开成多项式
2.4合并同类项——对多项式合并同类项
2.5多项式加法(或减法)
2.6多项式乘法
2.7多项式除法
2.8求多项式的根
2.9多项式的替换
2.10符号简化
2.11分式通分
2.12求符号函数的反函数
2.13求符号表达式的复合运算
2.14将符号表达式转化为数值表达式
2.15将数值表达式转化为符号表达式
2.16小结
第3章MATLAB绘图
3.1二维绘图
3.1.1画函数图
3.1.2画饼状图
3.1.3画条形图
3.1.4手工绘图
3.1.5在极坐标下绘图
3.2三维绘图
3.2.1画球形图
3.2.2画圆柱体图
3.2.3画三维曲线图
3.2.4画直方图
3.2.5画饼状图
3.2.6画低通滤波器的三维网格图
3.2.7画三维平面图
3.2.8画瀑布图
3.2.9画伞状图
3.2.10画花蕊图
3.2.11画正立方体
3.3小结
第4章复数运算
4.1复数简介
4.1.1复数
4.1.2复数的四种表示形式
4.1.3复数的四则运算
4.1.4复数的其他运算
4.2复数运算程序1
4.2.1复数代数形式和极坐标形式间的相互转换程序
4.2.2求代数形式复数的倒数程序
4.2.3求任一复数平方根的程序
4.2.4求两个代数形式复数之积的程序
4.2.5求两个代数形式复数之商的程序
4.3复数运算程序2
4.3.1求复数的乘幂程序
4.3.2求复数的N次方根程序
4.3.3求复数的指数程序
4.3.4求复数的自然对数程序
4.3.5求复数的常用对数程序
4.3.6求复数的正弦程序
4.3.7求复数的余弦程序
4.3.8求复数的正切程序
4.4小结
第5章矩阵计算
5.1矩阵简介
5.1.1行列式
5.1.2矩阵的加法、乘法和矩阵的转置
5.1.3矩阵的除法——矩阵求逆
5.1.4矩阵的特征值和特征向量
5.2求行列式值
5.2.1求3阶行列式值
5.2.2求4阶行列式值
5.2.3求5阶行列式值
5.2.4求6阶行列式值
5.3矩阵转置
5.3.1将3阶矩阵转置
5.3.2将4阶矩阵转置
5.3.3将5阶矩阵转置
5.3.4将6阶矩阵转置
5.4矩阵相乘
5.4.1两个3阶实矩阵相乘
5.4.2两个4阶实矩阵相乘
5.4.3两个5阶实矩阵相乘
5.4.4一个4×5矩阵与一个5×3矩阵相乘
5.5矩阵求逆
5.5.1求2阶矩阵的逆阵
5.5.2求3阶矩阵的逆阵
5.5.3求4阶矩阵的逆阵
5.5.4求5阶矩阵的逆阵
5.5.5求6阶矩阵的逆阵
5.6求矩阵的特征值和特征向量
5.6.1求2阶矩阵的特征值和特征向量
5.6.2求3阶矩阵的特征值和特征向量
5.6.3求4阶矩阵的特征值和特征向量
5.7小结
第6章解多元一次线性方程组
6.1多元一次方程组简介
6.2解实系数多元一次方程组
6.2.1解实系数二元一次方程组
6.2.2解实系数三元一次方程组
6.2.3解实系数四元一次方程组
6.2.4解实系数五元一次方程组
6.2.5解实系数六元一次方程组
6.3解复系数多元一次方程组
6.3.1解复系数二元一次方程组
6.3.2解复系数三元一次方程组
6.3.3解复系数四元一次方程组
6.3.4解复系数五元一次方程组
6.3.5解复系数六元一次方程组
6.4小结
第7章解一元N次方程(上)
7.1实系数一元一次方程
7.2实系数一元二次方程
7.2.1实系数一元二次方程的求根公式介绍
7.2.2程序实例
7.3实系数一元三次方程
7.3.1卡尔丹公式
7.3.2盛金公式
7.3.3解题实例——解缺少二次项的实系数一元三次方程
7.3.4解题实例——解一般形式的实系数一元三次方程
7.4实系数一元四次方程
7.4.1一元四次方程解法介绍
7.4.2MATLAB解一元四次方程实例
7.5复系数一元一次方程
7.6复系数一元二次方程
7.6.1复系数一元二次方程解法介绍
7.6.2说明
7.6.3实例
7.7复系数一元三次方程
7.8复系数一元四次方程
7.9小结
第8章解一元N次方程(下)
8.1实系数一元代数方程
8.1.1求解实系数一元五次方程的根
8.1.2求解实系数一元六次方程的根
8.1.3求解实系数一元七次方程的根
8.1.4求解实系数一元八次方程的根
8.2复系数一元代数方程
8.2.1求解复系数一元五次方程的根
8.2.2求解复系数一元六次方程的根
8.2.3求解复系数一元七次方程的根
8.2.4求解复系数一元八次方程的根
8.3小结
第9章超越方程及非线性方程
9.1超越方程说明
9.2解超越方程
9.2.1解指数方程
9.2.2解对数方程
9.2.3解三角方程
9.2.4解无理方程
9.2.5解反三角函数方程
9.2.6解一般超越方程
9.3解非线性方程
9.3.1解一元非线性方程
9.3.2解二元非线性方程组
9.3.3解三元非线性方程组
9.4小结
第10章用图像法解实系数一元N次方程
10.1实系数一元一次方程
10.2实系数一元二次方程
10.3实系数一元三次方程
10.4实系数一元四次方程
10.5实系数一元五次方程
10.6实系数一元六次方程
10.7实系数一元七次方程
10.8实系数一元八次方程
10.9小结
第11章用图像法解实系数N元一次方程组
11.1实系数二元一次方程组
11.2实系数三元一次方程组
11.3实系数N元一次方程组
11.4小结
参考文献
前言
我们在日常生活中,经常会遇到一些计算题,简单的计算题用口算就解决了,稍微难一点的可以用电子计算器、手机或计算机中的计算器。计算机中的计算器如图1所示。
图1计算机中的计算器
计算机中的计算器只能计算四则运算、倒数及开/平方。再复杂一些的计算题,可以用科学计算器,如图2所示。
图2科学计算器
这个计算器又增加了指数、对数及三角函数等的计算功能。如果这个计算器还不够用,那就可以用MATLAB软件。MATLAB是在计算机中使用的计算软件。它是一种集计算、可视化和编程等功能于一身的高效的工程计算软件。只有你想不到的,几乎没有它不能算的。这种软件入门极易,深造也不难,会用计算器就会用这种软件。介绍一种高级语言的常用方法是举例,本书由大量的MATLAB计算实例组成。本书共分11章,第1章介绍MATLAB基础知识,第2章介绍多项式处理,第3章介绍MATLAB绘图,第4章介绍复数运算,第5章介绍矩阵计算,第6章介绍解多元一次线性方程组,第7章介绍解一元N次方程(上),第8章介绍解一元N次方程(下),第9章介绍超越方程及非线性方程,第10章介绍用图像法解实系数一元N次方程,第11章介绍用图像法解实系数N元一次方程组。电子资料包的内容,仍以书中章节为单位。在几乎每一章(有几章没有)下,都有1个章文件夹,每章下面有(例N.1)、(例N.2)……例文件夹,例文件夹内是这个例子的名称,打开名称文件夹,就是扩展名为“m”的M文件。在MATLAB软件已安装在计算机中的前提下,把M文件复制到MATLAB命令窗口,可直接执行。使用M文件的另一种方法是通过“x: 存放M文件的文件夹”命令,把存放M文件的文件夹置于MATLAB的可搜索路径中。这样,在命令窗口就可以重新编辑或直接执行这些M文件了。本书所用MATLAB版本是R2015a,这不是版本。其实每个新版本与旧版本相比,大多数只有细节处的一些改进。如果只作一般的计算,用近几年的任何一个版本都可以。MATLAB是全世界科技人员都在使用的计算或绘图工具。科技人员和办公室的文秘人员都需要掌握它,因为它可以很方便地提供诸如画饼状图、直方图等的方法。在编写本书过程中,参考了国内许多优秀图书(这些已列在书末的参考文献中),也得到了清华大学出版社的帮助。在此,向以上单位和个人表示衷心感谢。由于编著者水平有限且时间仓促,书中难免存在缺点,恳请读者批评指正。联系邮箱为[email protected]。
编著者
2018年6月
plot命令格式如下。(1) plot(y): 此命令中参数y可以是向量或矩阵。(2) plot(x,y): 此命令中参数x和y均可以为向量或矩阵。(3) plot(x,y,s): 此格式用于绘制不同的线型、点标和颜色的图形。其中s为字符,可以代表不同的线型、点标和颜色。常见的可用字符及其意义如表3.1所列。
表3.1二维绘图的图形常用设置选项
选项说明选项说明
-实线.点: 点线o圆.点画线 加号虚线*星号y黄色xx符号m紫红色s方形续表
选项说明选项说明
c蓝绿色d菱形r红色β下三角g绿色^上三角b蓝色右三角k黑色p正五边形
【例3.1】用函数plot(y)绘制正弦曲线图。解: 在M文件编辑器中输入
t=1:0.1:10;
y=sin(t);
plot(y)
执行后,将显示如图31所示的图形。
图31用函数plot(y)绘制正弦曲线
【例3.2】用函数plot(y)绘制矩阵图。解: 在M文件编辑器中输入
y=[0 1 2;2 3 4;7 8 9];
plot(y)
执行后,将显示如图32所示的图形。
图32用函数plot(y)绘制矩阵
【例3.3】用函数plot(x,y)绘制向量和矩阵。解: 在M文件编辑器中输入
x=0:0.1:10;
y=[sin(x) 2;cos(x) 1];
plot(x,y)
执行后,将显示如图33所示的图形。
图33用函数plot(x,y)绘制向量和矩阵
【例3.4】用函数plot(x,y,s)绘制正弦曲线。解: 在M文件编辑器中输入
>> x=0:0.5:20;
y=sin(x);
plot(x,y,’-.rd’)
执行后,将显示如图34所示的图形。由图可见,正弦曲线是由点画线和小菱形组成的曲线。
图34用函数plot(x,y,s)绘制正弦曲线
2. 用ezplot命令绘制函数图ezplot命令也是用于绘制函数在某一自变量区域内的图形。其格式如下。(1) ezplot(f): 绘制表达式f=f(x)在默认区域-2*pi>> ezplot(‘x^2 y^2-4’,[-3,3,-3,3]);
执行后,将显示如图35所示的图形。由图可见,图形是半径为2的圆形,但是不太标准。
图35用函数ezplot作图
【例3.6】用函数ezplot(x,y)绘制参数方程x=2sint,y=2cost在区域[0,2π]内的图形。解: 在命令窗口中输入
syms x t
x=2*sin(t);
y=2*cos(t);
ezplot(x,y)
执行后,将显示如图36所示的图形。由图可见,图形也是半径为2的圆形。但此圆比例3.5的圆更为标准。
图36用函数ezplot(x,y)作图
【例3.7】用函数ezplot(x,y)绘制参数方程x=cost(1 cost),y=sint(1 cost)在区域[0,2π]内的图形。解: 在命令窗口中输入
syms x t
x=cos(t)*(1 cos(t));
y=sin(t)*(1 cos(t));
ezplot(x,y)
执行后,将显示如图37所示的图形。由图可见,是一个心形线图。
图37用函数ezplot(x,y)作图
【例3.8】用函数ezplot(x,y)绘制参数方程x=cost tcost,y=sint-tcost在区域[0,2π]内的图形。解: 在命令窗口中输入
syms x t
x=cos(t) t*sin(t);
y=sin(t)-t*cos(t);
ezplot(x,y)
grid on
执行后,将显示如图38所示的图形。由图可见,图形是半径为1的圆的渐开线。
图38用函数ezplot(x,y)作图
3. 将多图绘于同一窗口有时需要在一张图纸上绘制多幅图形,以便观看它们之间的关系。MATLAB提供一种子图绘制的方法来达到这一目的。子图绘制函数subplot将当前窗口分割成几个区域,然后在各个区域中分别绘图。subplot常用的语法格式为subplot(m,n,i)
表示在当前绘图区中建立m行n列个绘图子区,在编号为i的位置上建立坐标系,并设置该位置为当前绘图区。绘图子区的编号优先从顶行开始,例如subplot(3,5,9)表示在当前绘图区中建立了3行5列个绘图子区,并在第2行、第4列的位置建立坐标系准备绘图。【例3.9】子图函数使用实例。利用函数subplot分别绘制y=x,y=x2,y=x3,y=x4的子图,并分别为每个子图添加标题。解: 在M文件编辑器中输入
%ginput9
x=-6:0.1:6;y1=x;y2=x.^2;y3=x.^3;y4=x.^4;
subplot(2,2,1);plot(x,y1);title(‘y1=x’);
subplot(2,2,2);plot(x,y2);title(‘y2=x^2’);
subplot(2,2,3);plot(x,y3);title(‘y3=x^3’);
subplot(2,2,4);plot(x,y4);title(‘y4=x^4’);
执行后,将显示如图39所示的图形。
图39子图绘制模式
4. 用fplot命令在一幅图上绘制多个函数图fplot命令也是用于绘制函数在某一自变量区域内的图形。其格式如下。(1) fplot(fun,limits): 在指定的范围limits内绘制函数fun的曲线图,fun可以为可执行字符串、M文件、inline函数,limits可以为二维向量[xmin,xmax]或四维向量[xmin,xmax,ymin,ymax]。(2) fplot(fun,limits,LineSpec]): 利用指定的线型、颜色和标记符号等在指定的范围limits内绘制函数fun的曲线图。(3) [X,Y]=fplot(fun,limits,…): 计算函数fun在范围limits上的x坐标X和y坐标Y,注意: 这种用法不绘制图形。【例3.10】fplot命令使用实例。利用函数fplot在一幅图上绘制y=200sinx/x,y=x2的函数图。解: 在命令窗口中输入
>>f=’[200*sin(x)/x,x^2]’;
>> fplot(f,[-15,15]);hold on;
>> plot([-15,15],[0.0,0.0]);grid on
执行后,将显示如图310所示的图形。由图可见,两边都有波纹的是y=200sinx/x的函数图,抛物线是y=x2的函数图,水平线是x轴。
图310在一幅图上绘制多个函数图
5. 在直角坐标下一幅图上绘制两个函数图【例3.11】在同一图形窗口中绘制当x∈[0,2π]时,y1=sin(x),y2=sinx π2,并对y1用点线,y2用加号线标志出来。解: 在M文件编辑器中输入
%ginput11
x=0:pi/20:2*pi;
y1=sin(x);
y2=sin(x pi/2);
plot(x,y1,’r:’,x,y2,’ ‘)
line([0,7],[0.0,0.0])
legend(‘y1′,’y2’)
执行后,将显示如图311所示的图形。
图311在一幅图上绘制不同线型、颜色和标志点的图形
6. 在直角坐标轴下用蓝色填充指数函数图形MATLAB中填充二维图形的命令为fill,其格式如下。fill(x,y,ColorSpec): 使用参量ColorSpec指定的颜色填充由向量X和Y定义的图形。ColorSpec的取值参见表31。【例3.12】在直角坐标轴下用蓝色填充指数函数图形。解: 在命令窗口中输入
x=0:0.01:2*pi;
y=exp(i*x);
fill(x,y,’b’);
grid on;
执行后,将显示如图312所示的图形。
7. 单对数坐标轴图前面所介绍的函数图都是在直角坐标轴下绘制的,用MATLAB软件绘图不仅能在直角坐标轴下,还能在单对数坐标轴和双对数坐标轴下。单对数坐标轴图是指对x轴使用对数刻度(以10为底的对数),对y轴使用线性刻度,用plot函数绘图。MATLAB中设置x/y轴单对数坐标轴的命令为semilogx/semilogy,其格式如下。
图312用fill命令填充二维图形
semilogx (x,y): 使用x轴为单对数坐标轴。semilogy (x,y): 使用y轴为单对数坐标轴。【例3.13】以x轴为对数坐标轴,y轴使用线性刻度,绘制y=sin(2x)的函数图形。解: 在命令窗口中输入
x=[0:0.1:10];
y=sin(2*x);
semilogx(x,y);
执行后,将显示如图313所示的图形。
图313x轴为单对数坐标轴图
8. 双对数坐标轴图对x轴和y轴都使用对数刻度(以10为底的对数),进行plot函数绘图。MATLAB中设置双对数坐标轴的命令为loglog,其格式如下。loglog (x,y,LineSpec): 参数LineSpec是线型。【例3.14】x轴和y轴均为对数坐标轴,绘制y=ex的函数图形。解: 在命令窗口中输入
x=logspace(-1,2);
loglog(x,exp(x),’-v’);
grid on
执行后,将显示如图314所示的图形。单对数坐标轴图和双对数坐标轴图在数字信号处理和频谱分析等方面广泛使用。
图314x轴和y轴均为对数坐标轴图
3.1.2画饼状图MATLAB提供了许多特殊图形函数,如饼状图就是一种特殊图形,常见的特殊二维图形函数如表3.2所列。
表3.2特殊二维图形函数
函数名说明函数名说明
area填充绘图fplot函数绘制bar条形图hist柱状图barh水平条形图paretoPareto图comet彗星图pie饼状图errorbar误差带图plotmatrix分散矩阵绘制续表
函数名说明函数名说明
ezplot简单绘制函数图ribbon三维图的二维条状显示ezpolar简单绘制极坐标图scatter散射图feather矢量图stem离散序列火柴杆状图fill多边形填充stairs阶梯图gplot拓扑图rose极坐标系下的柱状图compass与feather功能类似的矢量图quiver向量场
饼状图在日常生活中用得很多,尤其在分析统计中,饼状图可让我们对部分占总体的比例有基本的直观了解。画饼状图的命令是pie,其格式如下。pie(X): 绘制矩阵X中非负元素的饼状图。若X中非负元素和小于1,则函数仅画出部分的饼状图,且非零元素X(i,j)的值直接限定饼状图中的扇形大小; 若X中非负元素和大于或等于1,则非负元素X(i,j)代表饼状图中的扇形大小通过X(i,j)/Y的大小来决定,其中,Y为矩阵X中非负元素之和。pie(X,explode): explode是与X同维的矩阵,若其中有非零元素,则X矩阵中相应位置的元素在饼图中对应的扇形将向外移出一些。以下是画饼形图的例子。【例3.15】用画饼状图的命令pie画一饼状图,图由5块组成,其中第2块移出。解: 在命令窗口中输入
x=[1,3,0.5,2.5,2];
explode=[0 1 0 0 0];
pie(x,explode)
colormap jet
执行后,将显示如图315所示的图形。可见,饼状图由依次占11%、33%、6%、28%、22%的蓝、灰、绿、橙、红5块组成,其中,第2块(33%)被移出。
图315例3.15的饼状图
【例3.16】用画饼状图的命令pie画一饼状图,图由5块组成。解: 在命令窗口中输入
x=[1,3,0.5,2.5,2];
explode=[0 0 0 0 0];
pie(x,explode)
colormap jet
执行后,将显示如图316所示的图形。可见,饼状图由依次占11%、33%、6%、28%、22%的蓝、灰、绿、橙、红5块组成,并且哪一块也没有移出。
图316例3.16的饼状图
【例3.17】用画饼状图的命令pie画一饼状图,图由5块组成,每块大小依次占总图面积的10%、20%、5%、50%、15%,其中第2块移出。解: 在命令窗口中输入
x=[10,20,5,50,15];
explode=[0 1 0 0 0];
pie(x,explode)
colormap jet
执行后,将显示如图317所示的图形。可见,饼状图由依次占10%、20%、5%、50%、15%的蓝、灰、绿、橙、红5块组成,其中,第2块(20%)被移出。从以上饼状图例子看出: 要想把饼切成几块,数组中就要有几个元素; 想让哪一块大一些,相应数字就要大一些; 想把哪一块移出,就把explode中的对应元素设为1; 要想图的各块比例和希望值一致,就直接把比例告诉它,方法是各块数字之和恰好等于100。
3.1.3画条形图条形图又称直方图,画条形图的命令是bar。bar命令格式如下。bar(y): 为每一个y中的元素画一个条状。bar(x,y): 在指定的横坐标x上,画出y,其中x是严格的单增向量。
图317例3.17的饼状图
bar(x,y,’bar_color’): bar_color是条形的颜色。【例3.18】用函数bar绘制红色条形图。解: 在M文件编辑器中输入
x=-2.9:0.2:2.9;
bar(x,exp(-x.*x),’r’)
执行后,将显示如图318所示的图形。
图318红色条形图
【例3.19】用函数bar绘制10条蓝色条形图。解: 在M文件编辑器中输入
x=1:1:10;
y=rand(size(x));
bar(x,y)
执行后,将显示如图319所示的图形。
图31910条蓝色条形图
【例3.20】用函数bar绘制12条蓝色条形图。解: 在M文件编辑器中输入
x=1:1:12;
y=[1,2,3,4,5,6,7,8,9,0,1,2];
bar(x,y)
执行后,将显示如图320所示的图形。
图32012条蓝色条形图
由以上几个例题可以看到,画条形图时,竖条的个数是由x设定的。例如,“x=1:1:10;”就是10根竖条; “x=1:1:12; ”就是12根竖条; 每一竖条的高度由y的对应值决定。竖条的颜色由bar命令中后一个参数决定,默认值是蓝色。3.1.4手工绘图1. 手工绘图——画折线
手工绘图的关键在于如何选取绘图时的一些关键数据点,即如何将这些数据点的坐标值读入变量,然后再加以利用。MATLAB提供了用鼠标选取数据点的命令ginput,当在图形窗口中的某一位置按下某个鼠标键详见后文。(或键盘上除Enter键之外的任何键)时,ginput将返回该位置的坐标值。ginput的使用方法如下。(1) [x,y]=ginput: 当在图形窗口中按下某个鼠标键或某个键盘键时,读取此时鼠标所在位置的一系列坐标值,并将这些坐标值存储到向量x和y中,直到按Enter键后才中止该存储过程。(2) [x,y]=ginput(n): 当在图形窗口中按下某个鼠标键或某个键盘键时,读取此时鼠标所在位置的一系列坐标值,并将这些坐标值存储到向量x和y中,总共读取n个数据点。(3) [x,y,button]=ginput(n): 利用鼠标从图形窗口中读取n个数据点,并将这些数据点的坐标值存储到向量x和y中,同时还将读取过程中鼠标的按键情况或键盘的按键情况记录到向量变量button中。这里有两个问题要说明: ① 在读取i个数据点时,若按的是鼠标左键,则button(i)=1; 若按的是鼠标中键,则button(i)=2; 若按的是鼠标右键,则button(i)=3; 若按的是键盘键,则button(i)存储相应键的ASCII码。② 该命令仅读取了一些数据点,并没有绘制图形。在读取了一些数据点后,就可以利用某种方法或按某种绘图要求把这些数据点连在一起,从而完成手工绘图。【例3.21】利用函数ginput,用户用鼠标选取一些数据点绘制折线图或闭合图形。解: 在M文件编辑器中输入
%ginput21
axis([0 10 0 10]);
hold on;
x=[];y=[];
n=0;
while (1)
[xtemp,ytemp,button]=ginput(1);
plot(xtemp,ytemp,’.’)
x=[x,xtemp];
y=[y,ytemp];
n=n 1;
text(xtemp 0.1,ytemp,int2str(n));
if (button==3)
break
end
end
line(x,y)
hold off
保存M文件,执行该程序后,在不同点单击鼠标就可以得到如图321所示的折线图形。图322~图327依次是正方形、长方形、等腰三角形、直角三角形、平行四边形和梯形的闭合图形。
图321手工逐点连线绘图例
图322正方形
图323长方形
图324等腰三角形
图325直角三角形
图326平行四边形
图327梯形
注意: 画以上折线图时,画每个点都用鼠标左键,在后一个点上右击鼠标; 画以上闭合图时,画完各点后,在个点上右击鼠标。2. 手工绘图——画曲线【例3.22】利用函数ginput,用户用鼠标选取一些数据点绘制曲线图,然后更改其中某一个选定的数据点(用鼠标右键确定更改哪个数据点,并确定新的数据点的位置),后依据新的数据点绘制一条新的样条曲线。解: 在M文件编辑器中输入
%ginput32
clf;
axis([0 10 0 10]);
hold on;
x=[ ];y=[ ];
n=0;
while (1)
[xtemp,ytemp,button]=ginput(1);
plot(xtemp,ytemp,’.’)
x=[x,xtemp];
y=[y,ytemp];
n=n 1;
text(xtemp 0.1,ytemp,int2str(n));
if (button==3)
break
end
end
t=1:n;
tt=1:0.1:n;
xx=spline(t,x,tt);
yy=spline(t,y,tt);
plot(xx,yy,’b:’);
[xtemp,ytemp,button]=ginput(1);
for i=1:n
if ((abs(x(i)-xtemp)<0.1)&(abs(y(i)-ytemp)<0.1))
k=i;
line([x(k)-0.1,x(k) 0.1],[y(k)-0.3,y(k) 0.3])
line([x(k) 0.1,x(k)-0.1],[y(k)-0.3,y(k) 0.3])
break;
end
end
[xtemp,ytemp,button]=ginput(1);
plot(xtemp,ytemp,’r:’)
k=i;
x(k)=xtemp;
y(k)=ytemp;
text(xtemp 0.1,ytemp,int2str(k));
xx=spline(t,x,tt);
yy=spline(t,y,tt);
plot(xx,yy,’r-‘);
hold off
保存M文件,执行该程序后,在不同点单击鼠标就可以得到如图328所示的曲线图形。而图329中,蓝线的1、2、3点是次所画曲线,红线的1、2、3点是修改了其中一点后二次所画曲线。
图328手工逐点绘制曲线图例1
图329手工逐点绘制曲线图例2
3.1.5在极坐标下绘图前面已介绍了在直角坐标轴下画图以及在单对数坐标轴和双对数坐标轴下画图,现在介绍MATLAB在极坐标下画图。MATLAB提供了基本的极坐标绘图函数polar,其常用格式有两种: (1) polar(theta,rho)。(2) polar(theta,rho,LineSpec)。
其中,theta表示各个数据点的角度向量; rho表示各个数据点的幅值向量,需要注意的是,theta和rho的长度必须一致; LineSpec是一个选项参数,其含义和plot选项参数含义相同。极坐标绘制函数功能类似于plot。【例3.23】在极坐标下,绘制八叶玫瑰图。解: 在M文件编辑器中输入
t=0:0.01*pi:2*pi;
r=2*sin(2*(t-pi/8)).*cos(2*(t-pi/8));
polar(t,r)
执行后,将显示如图330所示的图形。
图330八叶玫瑰图
【例3.24】在极坐标下,绘制四叶玫瑰图(四叶玫瑰图的极坐标方程为ρ=acos2θ)。解: 在M文件编辑器中输入
t=0:0.01*pi:2*pi;
r=cos(2*t);
polar(t,r)
执行后,将显示如图331所示的图形。
图331四叶玫瑰图
【例3.25】在极坐标下,绘制三叶玫瑰图(三叶玫瑰图的极坐标方程为ρ=asin3θ)。解: 在M文件编辑器中输入
>> t=0:0.01*pi:2*pi;
r=sin(3*t);
polar(t,r)
执行后,将显示如图332所示的图形。
图332三叶玫瑰图
【例3.26】在极坐标下,绘制双纽线图(双纽线图的极坐标方程为ρ=2cos2θ)。解: 在M文件编辑器中输入
t=0:0.01*pi:2*pi;
r=sqrt(2)*sqrt(cos(2*t));
polar(t,r)
执行后,将显示如图333所示的图形。
图333双纽线图
【例3.27】在极坐标下,绘制阿基米德螺线图(阿基米德螺线的极坐标方程为ρ=aθ)。解: 在M文件编辑器中输入
t=0:0.01*pi:2*pi;
r=t;
polar(t,r)
执行后,将显示如图334所示的图形。
图334阿基米德螺线图
【例3.28】在极坐标下,绘制等角螺线(对数螺线)图(等角螺线(对数螺线)的极坐标方程为ρ=eaθ)。解: 在M文件编辑器中输入
t=0:0.01*pi:2*pi;
r=exp(t/3);
polar(t,r)
执行后,将显示如图335所示的图形。
图335等角螺线(对数螺线)图
3.2三维绘图现实中所遇到的一些问题,特别是科学计算及工程应用中的一些问题,往往都可以抽象为三维空间的问题。因此,在实际工作中有时需要绘出三维图形,而且三维图形看起来更直观,也更美观。特殊的三维图形函数如表3.3所列。
表3.3三维特殊图形函数
函数名说明函数名说明
bar3三维条形图surfc着色图与等高线图结合comet3三维彗星轨迹图trisurf三角形表面图ezgraph3函数控制绘制三维图trimesh三角形网格图pie3三维饼状图waterfall瀑布图scatter3三维散射图cylinder柱面图stem3三维离散数据图sphere球面图quiver3向量场contour3三维等高线
3.2.1画球形图画球形图的函数是sphere。sphere的常用调用格式如下。(1) sphere(n): 产生单位球面上的数据点,并直接由surf命令绘制出这个单位球面。(2) [X,Y,Z]=sphere(n): 产生3个维数为(n 1)×(n 1)的矩阵X、Y、Z,分别表示球面表面上一系列数据点的坐标值,利用这些矩阵数据,再用mesh命令或surf命令来绘制出指定大小和位置的球面图形。需要说明的是,参数n确定了球面绘制的精度。n值越大,则数据点越多,绘制出的球面就越精确。反之,n值越小,精度越低。n的默认值是20。【例3.29】生成一个球体。解: 在M文件编辑器中输入
%生成一个球体
[x,y,z]=sphere(50);
surf(x,y,z);
执行后,将显示如图336所示的图形。可见,此球形比较扁,有点像灯笼。【例3.30】画一个单位球面图。解: 在M文件编辑器中输入
sphere;
axis equal
执行后,将显示如图337所示的图形。可见,此球形比较规范,输入命令中axis equal是为了各坐标轴刻度一样,不加这句,球面就会有点扁。
图336例3.29的球体
图337例3.30的球体
3.2.2画圆柱体图画圆柱体图的函数是cylinder。cylinder的常用调用格式如下。(1) [X,Y,Z]=cylinder (r,n): 产生3个维数为(n 1)×(n 1)的矩阵X、Y、Z,它们分别表示圆柱体表面上一系列数据点的坐标值。利用这些矩阵数据,再用mesh命令或surf命令来绘制出指定大小和位置的圆柱体图形。参数r是一个向量,它表示等距离分布的沿圆柱体基线在其单位高度的半径。r的默认情况是r=[1 1]。参数n确定了圆柱体绘制的精度。n值越大,数据点越多,绘制出的球面就越精确。反之,n值越小,精度越低。n的默认值是20。(2) cylinder (r,n): 产生圆柱体表面的数据点,并直接由surf命令绘制出这个圆柱体。(3) cylinder (r): 以默认的参数n=20绘制基线为r的圆柱体。(4) cylinder: 以默认的参数r=[1 1],n=20绘制单位圆柱体。【例3.31】利用函数cylinder画一个单位圆柱体。解: 在命令窗口中输入
cylinder
执行后,将显示如图338所示的单位圆柱体图形。
图338例3.31的单位圆柱体图
【例3.32】利用函数cylinder画一个圆柱体。解: 在命令窗口中输入
[X,Y,Z]=cylinder(50);
mesh(X,Y,Z)
title(‘圆柱体图’)
执行后,将显示如图339所示的圆柱体图形。
图339例3.32的圆柱体图
3.2.3画三维曲线图plot3绘制三维图,plot3的常用调用格式如下。(1) plot3(x,y,z): 绘制一条通过坐标为(x(i), y(i), z(i))的点的线,其中,参量x、y、z为3个具有相同长度的向量。(2) plot3 [X,Y,Z]: 绘制多条由矩阵参量X、Y、Z各列所指定的线,其中X、Y、Z维数相同。(3) plot3 [X,Y,Z,LineSpec]: 参量LineSpec指定线条线型、标记符号和颜色的三维曲线,参量LineSpec的取值见表3.1。【例3.33】用画三维曲线图的命令plot3画一条三维圆锥螺线图。根据高等数学的知识,圆锥螺线的三维参数方程为
x=vtsinαcos(ωt)
y=vtsinαsin(ωt)
z=vtcosα其中,圆锥角为2α,旋转角速度为ω,直线速度为v。解: 在M文件中输入
%ginput33
v=20;
alpha=pi/6;
omega=pi/6;
t=0:pi/100:50*pi;
x=v*sin(alpha)*t.*cos(omega*t);
y=v*sin(alpha)*t.*sin(omega*t);
z=v*cos(alpha)*t;
plot3(x,y,z,’r’,’linewidth’,2)
grid on
执行后,将显示如图340所示的三维圆锥螺线图。
图340例3.33的三维圆锥螺线图
3.2.4画直方图与二维情形相类似,MATLAB提供了两类画三维直方图的命令: 一类用于画垂直放置的三维直方图; 另一类用于画水平放置的三维直方图。1. 垂直放置的三维直方图的命令格式(1) bar3(Z): 以x=1,2,3,…,m为各个数据点的x坐标,以y=1,2,3,…,n为各个数据点的y坐标,以Z矩阵的各个对应元素为z坐标(Z矩阵的维数为m×n),画出一个垂直放置的三维直方图。(2) bar3(Y,Z): 以x=1,2,3,…,m为各个数据点的x坐标,以Y向量的各个元素为各个数据点的y坐标,以Z矩阵的各个对应元素为z坐标(Z矩阵的维数为m×n),画出一个垂直放置的三维直方图。2. 水平放置的三维直方图的命令格式(1) bar3h(Z)。(2) bar3h(Y,Z)。这两个命令的功能及使用方法与前述的两个命令相同,它们的区别在于所画出的直方图是水平的,而不是垂直的。【例3.34】用二维直方图函数bar、三维直方图函数bar3及bar3h绘制12根黑色条。解: 在命令窗口中分别输入
x=1:1:12;
y=[1,2,3,4,5,6,7,8,9,0,1,2];
bar(x,y)
执行后,将显示如图341所示的二维直方图。
x=1:1:12;
y=[1,2,3,4,5,6,7,8,9,0,1,2];
bar3(x,y)
执行后,将显示如图342所示的垂直放置的三维直方图。
x=1:1:12;
y=[1,2,3,4,5,6,7,8,9,0,1,2];
bar3h(x,y)
执行后,将显示如图343所示的水平放置的三维直方图。
图341二维直方图
图342垂直放置的三维直方图
图343水平放置的三维直方图
【例3.35】用二维直方图函数bar、三维直方图函数bar3及bar3h绘制10根黑色条。解: 在命令窗口中分别输入
x = rand(100,1);
[n,y] = hist(x);
bar (y,n);
for i = 1:length(y)
text(y(i),n(i) 0.5,num2str(n(i)));
end
执行后,将显示如图344所示的二维直方图。
x = rand(100,1);
[n,y] = hist(x);
bar3(y,n);
for i = 1:length(y)
text(y(i),n(i) 0.5,num2str(n(i)));
end
图344二维直方图
执行后,将显示如图345所示的垂直放置的三维直方图。
x = rand(100,1);
[n,y] = hist(x);
bar3h(y,n);
for i = 1:length(y)
text(y(i),n(i) 0.5,num2str(n(i)));
end
执行后,将显示如图346所示的水平放置的三维直方图。
3.2.5画饼状图在MATLAB中,三维饼状图的绘制函数是pie3,用法与前面介绍过的pie类似。【例3.36】用画三维饼状图的命令pie3画一饼状图,图由4块组成,其中第2块移出。这4块依次标记为“少年,青年,中年,老年”。
图345垂直放置的三维直方图
图346水平放置的三维直方图
解: 在命令窗口中输入
x=[2,4,8,3];explode=[0 1 0 0];
lables={‘少年’,’青年’,’中年’,’老年’};
pie3(x,explode,lables)
执行后,将显示如图347所示的图形。可见,饼状图由依次标记为“少年,青年,中年,老年”的4块组成,其中,第2块(青年)被移出。
图347例3.36的饼状图
【例3.37】用画三维饼状图的命令pie3画一饼状图,图由5块组成,其中第2块移出。解: 在命令窗口中输入
x=[1,3,0.5,2.5 2];
explode=[0 1 0 0 0];
pie3(x,explode)
colormap hsv
执行后,将显示如图348所示的图形。可见,饼状图由依次标记占有百分比为11%、33%、6%、28%、22%的5块组成,其中,第2块(33%)被移出。
图348例3.37的饼状图
【例3.38】用画三维饼状图的命令pie3画一饼状图,图由5块组成,其中第2块移出。各块所占总体的比例依次为10%、20%、5%、50%、15%。解: 在命令窗口中输入
x=[10,20,5,50,15];
explode=[0 1 0 0 0];
pie3(x,explode)
colormap jet
执行后,将显示如图349所示的图形。可见,饼状图由依次标记占有百分比为10%、20%、5%、50%、15%的5块组成,其中,第2块(20%)被移出。
图349例3.38的饼状图
关于三维饼状图,我们的结论和二维饼状图相同: 想把饼切成几块,矩阵中就要有几个元素; 想让哪一块大一些,相应数字就要大一些; 想把哪一块移出,就把explode中对应的元素设为1; 要想图的各块比例和希望值一致,就直接把比例告诉它,方法是各块比例数字之和恰好等于100。
3.2.6画低通滤波器的三维网格图mesh绘制参数网状表面图,或称网格图。mesh命令格式如下: (1) mesh (X,Y,Z): 绘制三维网状表面图,参量X、Y、Z表示曲面坐标,为同型矩阵,或X、Y为向量,Z为矩阵。X、Y、Z为同型矩阵时,曲面坐标为(X(i,j)、Y(i,j)、Z(i,j)); X、Y为向量,Z为矩阵时,向量X的长度为Z的列数,向量Y的长度为Z的行数,曲面坐标为(X(j)、Y(i)、Z(i,j))。(2) mesh (X,Y,Z,C): 绘制指定的带颜色参数的三维网状表面图。参量C为矩阵,与Z维数相同,表示彩色矩阵。(3) mesh (Z): 参数Z是维数为m×n矩阵,网格曲面的颜色分布与Z方向上的高度值成正比。与mesh函数类似的,还有两个函数,一个是meshc,一个是meshz。meshc同时画出网格和等高线图,meshz是给曲面加上“围裙”。这三个大同小异的函数,统称网格函数。【例3.39】数字图像处理中使用的巴特沃斯(Butterworth)低通滤波器的数学模型为
H(u,v)=11 D2n(u,v)/D0其中,D(u,v)=(u-u0)2 (v-v0)2; D0为给定的区域半径; n为阶次; u0和v0为区域的中心。设D0=200,n=2,试绘制该滤波器模型的三维网格图。解: 在命令窗口中输入
%巴特沃斯(Butterworth)低通滤波器的三维网格图
[u,v]=meshgrid(0:0.5:31);
D0=200;n=2;[u0,v0]=deal(16);
D=sqrt((u-u0).^2 (v-v0).^2);
H=1./(1 D.^(2*n)/D0);
mesh(u,v,H)
axis tight
执行后,将显示如图350所示的图形。
图350例3.39的巴特沃斯低通滤波器的三维网格图
3.2.7画三维平面图【例3.40】用mesh命令画一个三维平面图。解: 在命令窗口中输入
x=[0:0.1:5;2:0.1:7];
mesh(x)
执行后,将显示如图351所示的图形。
图351三维平面图
3.2.8画瀑布图waterfall函数生成的图与meshz函数生成的图有点类似,都穿了“围裙”。不一样的地方是meshz函数是有网格的,而waterfall函数只有一个方向,所以,就有了瀑布的效果。【例3.41】用waterfall命令画一幅瀑布图。解: 在命令窗口中输入
[x,y]=meshgrid(-2:0.1:2);
z=x.*exp(-x.^2-y.^2);
waterfall(z)
执行后,将显示如图352所示的图形。
图352瀑布图
3.2.9画伞状图ezsurf绘制符号函数的三维彩色曲面图形。ezsurf命令格式如下: (1) ezsurf(f): 绘制符号函数f(x,y))在默认平面区域[-2πsyms x y
ezsurf(‘sqrt(x^2 y^2)’)
执行后,将显示如图353所示的图形。
图353伞状图
3.2.10画花蕊图surf绘制三维阴影曲面图。surf命令格式如下。(1) surf(X,Y,Z): 绘制三维阴影曲面图,参量X、Y、Z表示曲面坐标,为同型矩阵或X、Y为向量,Z为矩阵。X、Y、Z为同型矩阵时,曲面坐标为(X(i,j),Y(i,j),Z(i,j)); X、Y为向量,Z为矩阵时,向量X的长度为Z的列数,向量Y的长度为Z的行数,曲面坐标为(X(j),Y(i),Z(i,j))。(2) surf(X,Y,Z,C): 绘制指定的带颜色参数的三维阴影曲面图。参量C为矩阵,与Z维数相同,表示彩色矩阵。(3) surf(Z): 参数Z是维数为m×n矩阵,阴影曲面的颜色分布与z方向上的高度值成正比。使用此种函数时,需注意以下几点: (1) surf函数和前面介绍过的mesh函数使用方法及参数含义相同。(2) surf函数和mesh函数的区别是前者绘制的是三维阴影曲面,而后者绘制的是三维网格曲面。(3) 在surf函数中,组成整个图形的各个小四边形表面的颜色分布可由shading命令来实现。① shading faceted: 表示截面式颜色分布方式。② shading interp: 表示插补式颜色分布方式。③ shading flat: 表示平面式颜色分布方式。
【例3.43】画花蕊图。阴影曲面绘制函数使用实例,利用surf函数绘制三维f(x,y)=2sin(x2 y2)x2 y2的三维阴影曲面,分别采用shading faceted、shading interp和shading flat设置其阴影效果。解: 在M文件中输入
%ginput43
x=-8:0.5:8;
y=x;[X,Y]=meshgrid(x,y);
R=sqrt(X.^2 Y.^2) eps;Z=2*sin(R)./R;
surf(X,Y,Z);
grid on;
axis([-10 10 -10 10 -0.5 1.5]);
shading faceted;
xlabel(‘x’);ylabel(‘y’);zlabel(‘z’);
执行后,将显示如图354所示的花蕊图1。
图354花蕊图1
将程序中倒数第二句改为“shading interp; ”,再次运行程序,显示结果如图355所示。将程序中倒数第二句改为“shading flat; ”,再次运行程序,显示结果如图356所示。
3.2.11画正立方体这里要引入一个面片的概念,一个面片图形对象是由一个或多个多边形组成的。面片对于真实物体建模(如飞机、汽车)以及绘制任意形状的二维或三维多面体是非常有用的。MATLAB提供了几个函数来创建面片对象,patch就是其中一个函数。patch函数有两种形式: 高级语法形式和低级语法形式。
图355花蕊图2
图356花蕊图3
(1) 高级语法形式: MATLAB将根据用户指定的颜色数据自动确定每一个表面颜色。只有用户在指定的x、y和z坐标以及颜色数据时按照以下的正确顺序,高级语法形式允许用户忽略各属性的名称,直接定义属性的取值:
patch(x,y,z,colordata)
用户必须定义颜色数据,使MATLAB知道将使用哪种颜色。因此,MATLAB总是将(当存在z坐标时为第4)后一个参数视为颜色数据。如果用户希望使用x、y、z坐标来定义面片而不定义颜色,那么MATLAB将会把z坐标当成颜色数据,然后绘制二维面片。(2) 低级语法形式: patch函数的低级语法形式必须以属性名和属性值作为输入参数,同时,除非用户改变了FaceColor属性值,否则MATLAB将调用默认的FaceColor属性值(白色)对表面进行着色,此时用户是看不出任何着色效果的。【例3.44】用patch命令画一个正立方体图。解: 在M文件中输入
%ginput44
v_mat=[0 0 0;1 0 0;1 1 0;0 1 0;0 0 1;1 0 1;1 1 1;0 1 1];%顶点矩阵
f_mat=[1 2 6 5;2 3 7 6;3 4 8 7;4 1 5 8;1 2 3 4;5 6 7 8]; %连接矩阵
patch(‘Vertice’,v_mat,’Faces’,f_mat,’FaceVertexCData’,hsv(8),’FaceColor’,’interp’);
view(3); %设立视角
axis square;
xlabel(‘X’); ylabel(‘Y’); zlabel(‘Z’);
执行后,将显示如图357所示的图形。
图357正立方体图
3.3小结本章讨论了MATLAB绘图,包括二维绘图和三维绘图。因为我们的眼睛在大多数情况下看到的世界都是三维图形,所以比起二维图形来,更愿意看三维图形。三维图形更直观,更让人一目了然。
评论
还没有评论。