精华内容
下载资源
问答
  • 摘要:本文指出《Matlab教程及实训》中关于分段函数画法的不妥,给...我们在处理实际问题中经常遇到需要画函数图像,尤其分段函数,有时候会感到茫然,如何利用Matlab画分段函数的图像?我们都知道,画图也就是描点...

    摘要:本文指出《Matlab教程及实训》中关于分段函数画法的不妥,给出Matlab分段函数的最常用的几种画法。

    关键词: Matlab   分段函数

    Matalb是三大数学软件之一,有强大的计算功能,图形处理功能,仿真功能,因此学好Matlab可以使我们事半功倍。我们在处理实际问题中经常遇到需要画函数图像,尤其分段函数,有时候会感到茫然,如何利用Matlab画分段函数的图像?

    我们都知道,画图也就是描点,描的点越多,画出的图像越光滑。二维空间画图是描平面上的点,三维空间画图是描空间中的点。

    《Matlab教程及实训》这本书中,关于分段函数画图的程序本人认为有点不妥。现分析如下:

    例5-1根据函数绘制一条曲线,使用if结构将曲线分成三段,绘制的曲线如图5-1所示,函数为

    程序如下:  x=-5:0.1:5;

    >> if x>=1

    y=x.^2-1

    elseif -1

    y=0*x

    else

    y=-x.^2-1

    end

    plot(x,y)

    很明显,程序本身不仅存在输入错误,还存在逻辑错误,我们从分段函数的表达式看,可以推测出该函数的图像不应该是一条抛物线,而是由两条抛物线和一段线段组成。我们来分析一下深层次的原因:①第一个if语句的条件判断x>=1,也就是x行向量里面的所有的元素全部大于或者等于1,条件的逻辑判断才会真,否则为假。②elseif的条件-1

    我们简单归纳一下,分段函数的几种常见的画法这里以例5-1为例:

    利用逻辑变量来画图

    clear

    x=-5:0.1:5;

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

    plot(x,y)

    利用find函数找非零元素

    clear

    x=-5:0.1:5;

    y=zeros(size(x));%预处理可加快运算速度

    k1=find(x>=1);%k1返回符合x>=1的数组编址(单下标)

    y(k1)=x(k1).^2-1;

    k2=find(-1

    y(k2)=0;

    k3=find(x<=-1);%k3返回符合x=

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

    plot(x,y)

    各个函数拼接在一起

    clear

    x1=-5:0.1:-1;y1=-x1.^2+1;plot(x1,y1);hold on

    x2=-1:0.1: 1;y2=0.*x2;plot(x2,y2);hold on

    x3=1:0.1:5;y3=x3.^2-1; plot(x3,y3)

    我们还可以使用for循环+if语句或者利用while循环+if语句,我就不再一一列举了,利用上述五种方法,都能得到上述正确的函数图像。

    Matlab中分段函数画法也多种多样没有必要全部掌握,掌握常见的几种方法就可以顺利的画分段函数图像。

    参考文献

    [1] 曹弋.Matlab 教程及实训[M].北京:机械工业出版社,2005.

    展开全文
  • 如何利用MATLAB画出不被导师嫌弃的图像 什么样子的图不会被导师嫌弃?当然是能够简洁、清晰的将信息表达出来,让人一目了然的的图了。导师们都很忙的,没有时间把时间浪费在研究你的图上,一般看着不顺眼的图直接...

    如何利用MATLAB画出不被导师嫌弃的图像

    什么样子的图不会被导师嫌弃?当然是能够简洁、清晰的将信息表达出来,让人一目了然的的图了。导师们都很忙的,没有时间把时间浪费在研究你的图上,一般看着不顺眼的图直接告诉你重新画,心情好会给你指点一二,心情不好就说图画的不好,你自己看着办。所以我们要知道,写报告也好,画图也罢,都是为了让人家看的,你得首先让对方看懂你的图,而不是自己看着顺眼就行,结合我被导师怼的经历,介绍一下什么样的会被导师喜欢吧。

    第一步 数据准备

    画图当然得有数据啦,没有数据,白板一张,还不如直接告诉导师,我没做出来更直接一些。这里我偷下懒,用一个三角函数对付一下。

    x=0:0.1:10;
    y1=sin(x);
    y2=cos(x);

    x是横坐标,y1和y2是纵坐标。

    第二步 画图

    MATLAB中最最常用得画图命令就说plot了,当然大多数情况下plot就够了。

    figure(1)
    plot(x,y1,x,y2)

    40ca5f0910c4f92f315aeacc31755389.png

    你要是敢直接把这样得图给导师,那我估计你的鸡腿是没有了。你的图是干嘛的,标题呢?横纵坐标轴得标题呢?你说这是啥,正弦和余弦?我读书少,不认得这俩曲线,你给我标注一下吧。然后就成了这样:

    figure(1)
    plot(x,y1,x,y2)
    title("正弦/余弦函数图像")
    xlabel("相位")
    ylabel("幅值")
    grid on

    6809dbd2548e0e8f2dfed0fff50773bc.png

    现在看起来差不多了,可是老师喜欢某些颜色怎么办,那就是第三步了。

    第三步 设置线条颜色

    先给出常用得颜色设置吧:

    6409636b25e4627c9ff98cbb9f3febd3.png

    然后有了如下得代码:

    figure(1)
    plot(x,y1,"g",x,y2,"b")
    title("正弦/余弦函数图像")
    xlabel("相位")
    ylabel("幅值")
    grid on

    3746eccc86cbb3e15d3ed1340726d218.png

    第四步 设置线型和标记。

    如果你足够优秀,可以发论文的话,你的导师会告诉你,有的期刊只能发表黑白得文章,所以用颜色区分不太合适,所以区分一下线型吧。所以,先给出常用得线性和标记。

    1ab50e875b173713e7665eae48a6d441.png

    cb7c95c1b39fef2ded37a539ee2c6e87.png

    用线型区分开来:

    plot(x,y1,"g--",x,y2,"b-.")

    fe131c275f61e17d6945e307a6ef29d7.png

    还可以在每个数据点处做个标记:

    plot(x,y1,"g--*",x,y2,"b-.x")

    eafdc18f75a808f6d0761004bcefa782.png

    以为这样就完事了吧,你的要求我都满足了,可是,你得导师还会问,你这两条线,分别是啥啊,那个是正弦,那个是余弦?这时候你咋办,怼回去,你不认识正弦和余弦?我觉得你还是算了,乖乖得画上图例吧。

    第五步 图例

    马上就是最后一步了,直接上代码:

    plot(x,y1,"g--*",x,y2,"b-.x")
    legend("正弦函数","余弦函数")

    5660aafb36cda6f90da84371c724fb93.png

    好了,这样的图,能看懂了吧。

    第六步 设置坐标轴范围

    如果你觉得这样得还不够完美,还可以设置一下坐标轴范围:

    用的是axis([xmin xmax ymin ymax])函数。

    完整代码:

    x=0:0.1:10;
    y1=sin(x);
    y2=cos(x);
    figure(1)
    plot(x,y1,"g--*",x,y2,"b-.x")
    legend("正弦函数","余弦函数")
    axis([0 10 -1.2 1.2])
    title("正弦/余弦函数曲线")
    xlabel("相位")
    ylabel("幅值")
    grid on

    b15ad1bdaa9c38671a363361bab569b9.png

    总结起来就一下几点:

    1. 完整得数据
    2. 标题、横纵坐标标题
    3. 设置颜色
    4. 线型和标记
    5. 添加图例
    6. 设置横纵坐标轴范围
    展开全文
  • 目录0 前言1 空间曲面的MATLAB命令及其用法1 surf函数语法及其说明 [^1]2 mesh函数及其用法[^2]2 surf...看到老师的图,如图1,非常直观,于是就想用MATLAB画出来。 1 空间曲面的MATLAB命令及其用法 首先查询一下M...

    0 前言

    疫情期间,在家无事,因为之前学的MATLAB和线性代数不是很扎实,决定在MOOC上找网课,温故一下。看到老师的图,如图1,非常直观,于是就想用MATLAB画出来。
    示例1

    1 空间曲面的MATLAB命令及其用法

    首先查询一下MATLABlink中能够画三维图的函数。
    通过观察,选出surf函数和mesh函数,查看其用法。

    1 surf函数语法及其说明 1

    surf(X,Y,Z)
    surf(X,Y,Z) 创建一个三维曲面图,它是一个具有实色边和实色面的三维曲面。该函数将矩阵 Z 中的值绘制为由 X 和 Y 定义的 x-y 平面中的网格上方的高度。曲面的颜色根据 Z 指定的高度而变化。
    surf(X,Y,Z,C)
    surf(X,Y,Z,C) 指定曲面的颜色。
    surf(Z)
    surf(Z) 创建一个曲面图,并将 Z 中元素的列索引和行索引用作 x 坐标和 y 坐标。
    surf(Z,C)
    surf(Z,C) 指定曲面的颜色。
    surf(ax,___)
    surf(ax,___) 将图形绘制到 ax 指定的坐标区中,而不是当前坐标区中。指定坐标区作为第一个输入参数。
    surf(___,Name,Value)
    surf(___,Name,Value) 使用一个或多个名称-值对组参数指定曲面属性。例如,‘FaceAlpha’,0.5 创建半透明曲面。
    s = surf(___)
    s = surf(___) 将返回一个图曲面对象。在创建曲面之后可使用 s 对其进行修改。有关属性列表,请参阅 Surface 属性link

    2 mesh函数及其说明2

    mesh(X,Y,Z)
    mesh(X,Y,Z) 创建一个网格图,该网格图为三维曲面,有实色边颜色,无面颜色。该函数将矩阵 Z 中的值绘制为由 X 和 Y 定义的 x-y 平面中的网格上方的高度。边颜色因 Z 指定的高度而异。
    mesh(Z)
    mesh(Z) 创建一个网格图,并将 Z 中元素的列索引和行索引用作 x 坐标和 y 坐标。
    mesh(Z,C)
    mesh(Z,C) 进一步指定边的颜色。
    mesh(___,C)
    mesh(___,C) 进一步指定边的颜色。
    mesh(ax,___)
    mesh(ax,___) 将图形绘制到 ax 指定的坐标区中,而不是当前坐标区中。指定坐标区作为第一个输入参数。
    mesh(___,Name,Value)
    mesh(___,Name,Value) 使用一个或多个名称-值对组参数指定曲面属性。例如,‘FaceAlpha’,0.5 创建半透明网格图。
    s = mesh(___)
    s = mesh(___) 将返回一个图曲面对象。在创建网格图后,使用 s 修改网格图。有关属性列表,请参阅 Surface 属性link

    2 surf函数的实现过程

    选择surf函数和mesh函数作图。

    x=[0:6];
    y=[0:6];
    [X,Y] = meshgrid(x,y);
    Z1=5+Y-X;
    surf(X,Y,Z1)
    

    surf1

    x=[0:6];
    y=[0:6];
    [X,Y] = meshgrid(x,y);
    Z1=5+Y-X;
    mesh(X,Y,Z1)
    

    mesh1
    观察两张图片,能够看出明显的不同。通过surf函数画出的图像是曲面,而通过mesh函数画出的图像是网格。

    3 图像的优化

    接下来对用surf函数画出的图像进行去除网格线,统一曲面颜色,得到我们想要的图像。

    y=[0:6];
    [X,Y] = meshgrid(x,y);
    Z1=5+Y-X;
    surf(X,Y,Z1,'facecolor','b','LineStyle' ,'none')
    %曲面颜色为蓝色,无线型。
    

    surf2
    好像有点意思了,再将坐标间隔统一,添上标签。

    x=[0:6];
    y=[0:6];
    [X,Y] = meshgrid(x,y);
    Z1=5+Y-X;
    surf(X,Y,Z1,'facecolor','b','LineStyle' ,'none')
    xticks(0:1:6)
    yticks(0:1:6)
    zticks(-5:1:15)
    xlabel('x轴')
    ylabel('y轴')
    zlabel('z轴')
    

    surf3
    最后尝试多画几个图,放在一起比较一下。

    x=[0:10];
    y=[0:10];
    [X,Y] = meshgrid(x,y);
    subplot(2,3,1)
    Z1=5+Y-X;
    surf(X,Y,Z1,'facecolor','r','LineStyle' ,'none')
    subplot(2,3,2)
    Z2=4+2*X-3*Y;
    surf(X,Y,Z2,'facecolor','g','LineStyle' ,'none')
    xlabel('x轴')
    ylabel('y轴')
    zlabel('z轴')
    subplot(2,3,3)
    Z3=-4+2*X+Y;
    surf(X,Y,Z3,'facecolor','b','LineStyle' ,'none')
    xlabel('x轴')
    ylabel('y轴')
    zlabel('z轴')
    subplot(2,3,[4 5])
    Z1=5+Y-X;
    surf(X,Y,Z1,'facecolor','r','LineStyle' ,'none')
    xlabel('x轴')
    ylabel('y轴')
    zlabel('z轴')
    hold on
    %这里需要用到hold on命令,否则第四幅子图不能同时显示三个函数的图像。
    Z2=4+2*X-3*Y;
    surf(X,Y,Z2,'facecolor','g','LineStyle' ,'none')
    xlabel('x轴')
    ylabel('y轴')
    zlabel('z轴')
    Z3=-4+2*X+Y;
    surf(X,Y,Z3,'facecolor','b','LineStyle' ,'none')
    legend('Z1=5+Y-X','Z2=4+2*X-3*Y','Z3=-4+2*X+Y')
    

    surf4
    最后的最后,回顾一下刚刚的那张图片。
    示例
    好像差不多呀。

    4 结论

    通过这个例子,我们发现MATLAB还是很强大的,尝试命令,简单绘出图形,再在其基础上进行修改,就可以得到我们想要的图形了。当然了也有很多优秀的绘图工具,如画流程图的Visio、数据处理的Origin、LaTex中的Tikz等。


    1. https://ww2.mathworks.cn/help/matlab/ref/surf.html ↩︎

    2. https://ww2.mathworks.cn/help/matlab/ref/mesh.html ↩︎

    展开全文
  • 二元函数,即两个变量可以得到三维图像,下面通过一个例子进行讲解。 首先利用meshgrid函数产生平面区域内的网格坐标矩阵。 x = [1,2,3,4,5] y = [2,4,6]; [X,Y]=meshgrid(x,y); 执行完以后X、Y均为矩阵,...

    画二元函数,即两个变量可以得到三维图像,下面通过一个例子进行讲解。

    首先利用meshgrid函数产生平面区域内的网格坐标矩阵。

    x = [1,2,3,4,5]  
    y = [2,4,6]; 
    [X,Y]=meshgrid(x,y);

    执行完以后X、Y均为矩阵,其中矩阵X的每一行都是向量x,行数等于向量y的元素的个数,矩阵Y的每一列都是向量y,列数等于向量x的元素的个数,具体则为:

    接下来利用mesh函数,产生图像。

    mesh(x,y,z,c)

    参数解释:x,y是网格坐标矩阵,z是网格点上的高度矩阵,c用于指定在不同高度下的颜色范围。



     

    展开全文
  • matlab图像处理中,为了标识出图像的目标区域来,需要利用plot函数或者rectangle函数,这样标识目标后,就保存图像。 一般saves保存的图像存在白边,可以采用imwrite对图像进行保存,保留原始图像大小。 代码...
  • matlab中,用xcorr()函数求两个向量x1与x2的互相关性,可出一个相关性图像,如下图所示。对于此图像应该如何分析,还望各路大神指教。小弟只知道有峰值的位置表示在此处有互相关性,可是峰值很多的情况呢,如何...
  • 本文主要介绍如何利用MATLAB编程或者Simulink工具绘制伯德图和奈奎斯特图一、用程序绘制伯德图和奈奎斯特图1、conv()函数的介绍conv()函数可用于计算两个向量卷积,简单理解其实就是可以用来计算多项式乘法。...
  • 利用matlab生成图像,并对其进行旋转30度,60度和90度,观察原图的 与旋转后的傅立叶频谱的对应关系。用到的matlab函数为fft2,abs,fftshift,imrotate。 代码 close all; clear all; clc; x=zeros(200,200); x...
  • Matlab-图像直方图函数imhist详解

    万次阅读 多人点赞 2015-09-23 10:25:03
    利用matlab计算图像直方图函数为imhist() 具体用法: imhist( i );直接显示图像i的灰度直方图; imhist(i,n)n为指定灰度级显示直方图; [count, x] = imhist( i ) 获取直方图信息,count为每一级灰度像素个...
  • 3.2 图像 3.3 平滑滤波 3.4 傅里叶滤波 4 结果对比 附录A MATLAB读取与处理的代码 附录B Python读取光谱数据的代码 写在最后1 概述2019年3月27日,LAMOST DR6数据集正式对国内天文学家和国际合作者发布。DR...
  • matlab 冲激函数表示

    万次阅读 2017-01-09 14:37:52
    出冲激函数图像,可以利用如下代码:clc; clear all; x=0:200; %x轴范围 y=dirac(x-50); %x=50处有δ函数,即δ(x-50) y=1.5*sign(y); %改变幅度 plot(x,y); axis ([0 200 -2 2]) 同理,想在通信系统中添加冲激...
  • 目录1 概述2 数据集网站3 读取与处理流程 3.1 fitsread函数读取文件 3.2 图像 3.3 平滑滤波 3.4 傅里叶滤波4 结果对比附录A MATLAB读取与处理的代码附录B Python读取光谱数据的代码写在最后1概述2019年3月27日,...
  • 以前高中的时候想过有没有什么工具能立刻函数图像,受于当时的知识限制,不知道matlab。前段时间看了点GUI,就想做一个工具,方便使用。工具界面如下图。 制作的视频链接如下图: ...
  • 目录1 概述2 数据集网站3 读取与处理流程 3.1 fitsread函数读取文件 3.2 图像 3.3 平滑滤波 3.4 傅里叶滤波4 结果对比附录A MATLAB读取与处理的代码附录B Python读取光谱数据的代码写在最后1概述2019年3月27日,...
  • filename = 'C:\Users\Administrator\Desktop\(透视变换)包含裂缝的整个图片\123.jpg'; imgData = imread(filename); imshow(imgData); %该函数可以用来显示已经读入的数据 A = imgData(:,1);... %图像数据
  • 基于Matlab软件编程实现MC算法对人体脑部MRI图像进行面绘制三维重建;利用三维旋转变换和动画函数对脑部图形进行动画显示。实验结果表明,该算法能准确地对脑部进行全方位显示,运行速度快且占的内存空间较少。
  • 求f(x)=sin(x)/exp(x),x∈[3,6]的最小值clcclear allclose all%%函数图像figure(1);hold on;%保存函数图像lb=3;ub=6;%函数自变量取值范围为[3,6]ezplot('sin(x)/exp(x)',[lb,ub]);%出函数曲线xlabel('自变量x...
  • matlab图像处理中,为了标识出图像的目标区域来,需要利用plot函数或者rectangle函数,这样标识目标后,就保存图像。 一般saves保存的图像存在白边,可以采用imwrite对图像进行保存,保留原始图像大小。 代码...
  • 利用matlab计算图像直方图函数为imhist()  具体用法:  imhist( i );直接显示图像i的灰度直方图;  imhist(i,n)n为指定灰度级显示直方图;  [count, x] = imhist( i ) 获取直方图信息,count为每一级灰度...
  • Matlab7.x图像处理 ch2_1_1:查看直方图(§2.1.3) ch2_2_1:显示图像(§2.2.2) ch2_3_1:添加颜色条(§2.3.1) ch2_3_2:图像的单帧显示(§2.3.2) ch2_3_3:图像的多帧显示(§2.3.2) ch2_3_4:图像的动画...
  • 进而在其原图上通过所得圆心位置、圆半径对每个分离的物体利用画线函数画出最小外接圆。该代码中并给出了测试代码,下载后可直接运行测试代码查看测试效果;详情可见个人博客:...
  • 1.利用matlab显示每一张图片 2.利用ginput函数获取坐标位置 3.根据坐标位置绘制图像 涉及知识点: 1.图片文件路径读取 2.图片显示 3.获取指定位置坐标 4.根据坐标在已知图像上绘制轨迹 SamplePath1 = 'F:\shiyan\...
  • 用VC读取txt文件里两列数据并存放于两个数组中,然后通过引擎调用MATLAB的绘图函数出曲线。然,我的程序编译通过但无法显示曲线图像如果不读取txt文件直接给两个数组赋值就可以正常运行显示。如果这一思路不对的...
  • MATLAB中自带的cftool拟合工具箱不能将多条曲线同时在同一副图中,而常规的plot()函数又不能拟合平滑直线,接下来总结一种可以利用cftool导出的代码,在一张图中拟合多条平滑曲线。 首先输入所要拟合的数据,如x,...
  • 基于matlab扫雷

    2018-04-15 19:57:41
    用matlab编写的扫雷小游戏,最初以训练鼠标操作为目的而设计的扫雷游戏是一款经久不衰的Windows平台休闲益智游戏。...本文将经典的扫雷游戏和Matlab相结合,研究利用Matlab的GUI工具开发类似Windows扫雷游戏的方法。
  • function midpointline(x0,x1,y0,y1) % MIDPOINTLINE函数利用中点线法进行直线段的扫描。% MIDPOINTLINE函数根据给定的两个整数点坐标(X0,Y0)和% (X1,Y1),确定在这两点之间应选取的整数坐标点。% 输出的是一个...
  • 一、 求解单个变量的代数方程:利用 solve函数 19 二、 单个常微分方程求解:利用 dsovle函数 20 第三章 函数绘图 22 第 1 节 二维图形 23 一、 基本平面图形绘制命令:plot 23 二、 一元函数y=f(x)的...
  • 更多内容尽在个人专栏:matlab学习上一节我们说了说怎么利用matlab自带的系统工具栏画图,这一节我们再来说说怎么直方图。直方图应该是我们最早接触的图标类型了,小学应该就学过,直到初中学了函数之后,我们才...

空空如也

空空如也

1 2 3
收藏数 53
精华内容 21
关键字:

利用matlab画函数图像

matlab 订阅