精华内容
下载资源
问答
  • MATLAB quiver函数使用:绘制矢量箭头介绍quiver()功能注意1:quiver()对(x,y,u,v)的要求注意2:quiver()绘制箭头时所在的坐标系举例总结代码及冰流速数据 介绍 在科研出图中,经常需要在底图上绘制流速图、受力图、...

    介绍

    在科研出图中,经常需要在底图上绘制流速图、受力图、磁场方向图等,而MATLAB正好拥有一个对应的quiver函数可以使用。本文以冰流速制图为例介绍quiver函数的使用和注意事项。

    quiver()功能

    语法1:quiver(x,y,u,v)
    这是quiver最常用的命令形式,表示在(x,y)位置上绘制向量(u,v)。(x,y)为箭头的起始坐标,(u,v)为箭头的方向矢量,sqrt(uu+vv)为物理量的大小,arctan(v/u)为物理量的方向。

    语法2:quiver(x,y,u,v,scale)
    数值scale是指箭头的放大缩小比例。在默认情况下,quiver命令会自动调整箭头的大小,以保证箭头之间不重叠。例如,scale为2时,表示箭头放大2倍,以此类推。

    语法3:quiver(x,y,u,v,scale,‘LineSpec’)
    'LineSpec’表示绘制箭头的颜色、线型、 标志样式。例如’LineSpec’为’y’时,表示箭头显示为黄色。

    注意1:quiver()对(x,y,u,v)的要求

    quiver()要求(x,y,u,v)为同型矩阵,即x,y,u,v的行列数要相等,假设均为m行n列。(x,y)可以使用meshgrid()生成,例如要生成3行4列的矩阵索引,可以如下代码举例

    // An highlighted block
    [x,y] = meshgrid(1:4,1:3);
    %x =
    %     1     2     3     4
    %     1     2     3     4
    %     1     2     3     4
    %y = 
    %     1     1     1     1
    %     2     2     2     2
    %     3     3     3     3
    

    可以看出,meshgird(1:n,1:m),第一个参数是列数,第二个参数是行数,结果中,x表示列数,y表示行数。这与MATLAB中的矩阵表示"先行后列"是相反的,因此在使用meshgrid()生成矩阵索引时需要注意调整行数和列数的位置

    注意2:quiver()绘制箭头时所在的坐标系

    quiver()绘制箭头所在的坐标系是常见的笛卡尔坐标系,如下图所示,x轴向右为正,y轴向上为正,因此这解释了【注意1】中为何x表示列数,y表示行数。
    x轴向右为正,y轴向上为正
    但是,考虑到矩阵格式的图像时,矩阵的左上角为(1,1),矩阵描述的坐标系是向右为正,向下为正。因此,(u,v)同样分别表示水平方向和垂直方向,注意v可能前面要加负号

    举例

    下图是用quiver(x,y,u,v)绘制的达尔克冰川流速图,这与冰流方向是不一致的。
    达尔克冰川冰流速图
    用quiver(x,y,u,-v)绘制箭头时,箭头沿水平轴镜像反转,显示是符合实际情况的。
    在这里插入图片描述

    总结

    quiver()函数原本是用于笛卡尔坐标系中的,当用quiver()函数显示矩阵形式的矢量场时,需要考虑到矩阵索引大小和笛卡尔坐标之间的区别,做好(x,y)与(u,v)在含义和正负符号上的一致性,才能画出准确的矢量场图形。

    代码及冰流速数据

    链接:https://pan.baidu.com/s/1MPgeLzTnde7st3yHS7VnFA
    提取码:4f5w
    链接

    展开全文
  • Matlab quiver函数用法 - 画矢量箭头图

    万次阅读 2020-01-11 17:25:36
    quiver函数的使用 用于画矢量函数的箭头图(quiver plot)、 举一个矢量函数的例子: F⃗=i⃗x+i⃗x\vec{F}=\vec{i}x+\vec{i}xF=ix+ix 如下图,你可以把这个函数看作位置矢量 r⃗\vec{r}r,图中每一个箭头的方向都是...

    提要:

    • quiver (x, y,u,v)在点(x,y)处画(u,v)所定义的向量箭头。x,y,u,v必须是维度和元素数都一样的矩阵。如果是一维数组的话,x,y,u,v的元素数必须一致。quiver函数会自动调整箭头的长度以适应显示
    • quiver(x,y,u,v,scale)scale 用于限定箭头的长度,如果scale = 1 则等值显示矢量的长度,而scale = 0.2 则显示0.2倍的矢量长度。
    • quiver(u,v)在x-y平面上均匀地画箭头图
    • quiver(x,y,u,v,LinSpec)用于限定箭头的属性,比如颜色,线型等。

    quiver就是“箭筒,箭套”的意思
    Quiver meaning

    quiver用于画矢量函数的箭头图(也叫速度图)(quiver plot, velocity vector plot)
    举一个矢量函数的例子:
    F=ix+jy\vec{F}=\vec{i}x+\vec{j}y
    如下图,你可以把这个函数看作位置矢量 r\vec{r},图中每一个箭头的方向都是向径(即从原点出发的一条直线),并且它的长度等于它到原点的距离。
    \vec{F}=\vec{i}x+\vec{j}y
    quiver (x, y,u,v)在点(x,y)处画(u,v)所定义的向量箭头。x,y,u,v必须是维度和元素数都一样的矩阵。如果是一维数组的话,x,y,u,v的元素数必须一致。quiver函数会自动调整箭头的长度以适应显示。

    %%  draw the velocity vector arrow of the vector function  i*x + j*y 
    % generate grids in a sub-definition area
    clc
    x = -1:0.5:1;
    y = -1:0.5:1;
    
    % generate the function values
    u = x;
    v = y;
    
    % draw vector arrow graph
    quiver(x, y, u, v)
    text(0.5, 0, '$\leftarrow \vec{F}=\vec{i}x + \vec{j}y $', 'HorizontalAlignment', 'left', 'Interpreter', 'latex', 'FontSize', 15);
    grid on
    axis equal
    

    \vec{F}=\vec{i}x+\vec{j}y_line
    quiver(x,y,u,v,scale)scale 用于限定箭头的长度,如果scale = 1 则等值显示矢量的长度,而scale = 0.2 则显示0.2倍的矢量长度。比如以上的代码,若加入scale参数,则输出图像如下:

    %%  draw the velocity vector arrow of the vector function  i*x + j*y 
    % generate grids in a sub-definition area
    clc
    x = -1:0.5:1;
    y = -1:0.5:1;
    
    % generate the function values
    u = x;
    v = y;
    
    % draw vector arrow graph
    scale = 0.2
    quiver(x, y, u, v,scale)
    text(0.5, 0, '$\leftarrow \vec{F}=\vec{i}x + \vec{j}y $', 'HorizontalAlignment', 'left', 'Interpreter', 'latex', 'FontSize', 15);
    grid on
    axis equal
    

    \vec{F}=\vec{i}x+\vec{j}y_line_scale=2

    quiver(u,v)在x-y平面上均匀地画箭头图
    比如函数F=iy+jxx2+y2\vec{F}=\frac{ -\vec{i}y+\vec{j}x}{\sqrt{x^{2}+y^{2}} } 使用quiver(x,y,u,v,scale)书写代码:

    %%  draw the velocity vector arrow of the vector function  (i*y + j*x)/sqrt(x^2 + y^2)
    % generate grids in a sub-definition area
    clc
    
    R = 2:2:6;
    theta = -pi:pi/4:pi;
    x = R'*cos(theta);
    y = R'*sin(theta);
    
    % generate the function values
    rr = sqrt(x.^2 + y.^2);
    fx = -y./rr;
    fy = x./rr;
    %[FX,FY] = meshgrid(fx,fy);
    
    % draw vector arrow graph
    scale = 0.2;
    quiver(x, y, fx, fy,scale)
    text(4, 2, '$\vec{F}=\frac{ -\vec{i}y+\vec{j}x}{\sqrt{x^{2}+y^{2}} } $', 'HorizontalAlignment', 'left', 'Interpreter', 'latex', 'FontSize', 15);
    grid on
    axis equal
    

    输出的图像为
    \vec{F}=\frac{ -\vec{i}y+\vec{j}x}{\sqrt{x{2}+y{2}} }
    而我们用quiver(u,v)替换掉quiver(x,y,u,v,scale),代码变为:

    %%  draw the velocity vector arrow of the vector function  (i*y + j*x)/sqrt(x^2 + y^2)
    % generate grids in a sub-definition area
    clc
    
    R = 2:2:6;
    theta = -pi:pi/4:pi;
    x = R'*cos(theta);
    y = R'*sin(theta);
    
    % generate the function values
    rr = sqrt(x.^2 + y.^2);
    fx = -y./rr;
    fy = x./rr;
    %[FX,FY] = meshgrid(fx,fy);
    
    % draw vector arrow graph
    scale = 0.2;
    quiver(fx, fy,scale)
    text(4, 2, '$\vec{F}=\frac{ -\vec{i}y+\vec{j}x}{\sqrt{x^{2}+y^{2}} } $', 'HorizontalAlignment', 'left', 'Interpreter', 'latex', 'FontSize', 15);
    grid on
    axis equal
    

    输出的箭头图不再是环形分布,而变成x-y平面上的均匀分布:
    \vec{F}=\frac{ -\vec{i}y+\vec{j}x}{\sqrt{x{2}+y{2}} }_uniform_distribution
    quiver(x,y,u,v,LinSpec)用于限定箭头的属性,比如颜色,线型等。
    示例代码:

    %%  draw the velocity vector arrow of the vector function  (i*y + j*x)/sqrt(x^2 + y^2)
    % generate grids in a sub-definition area
    clc
    
    R = 2:2:6;
    theta = -pi:pi/4:pi;
    x = R'*cos(theta);
    y = R'*sin(theta);
    
    % generate the function values
    rr = sqrt(x.^2 + y.^2);
    fx = -y./rr;
    fy = x./rr;
    %[FX,FY] = meshgrid(fx,fy);
    
    % draw vector arrow graph
    scale = 0.2;
    quiver(x, y, fx, fy,scale,'.r')
    text(4, 2, '$\vec{F}=\frac{ -\vec{i}y+\vec{j}x}{\sqrt{x^{2}+y^{2}} } $', 'HorizontalAlignment', 'left', 'Interpreter', 'latex', 'FontSize', 15);
    grid on
    axis equal
    

    LinSpec_Matlab_Quiver

    展开全文
  • matlabquiver函数的用法

    万次阅读 2019-05-05 17:34:27
    quiver(a,b,u,v):绘制矢量场,即箭头 a,b,u,v都是列向量,只有一列。 a,b表示绘制箭头的起始坐标 u,v表示所绘制箭头的方向坐标,u,v相当于x,y 箭头的长度,即模等于sqrt(u^2+v^2) 箭头的方向,即...

        quiver(a,b,u,v):绘制矢量场,即箭头

        a,b,u,v都是列向量,只有一列。

        a,b表示绘制箭头的起始坐标

        u,v表示所绘制箭头的方向坐标,u,v相当于x,y

        箭头的长度,即模等于sqrt(u^2+v^2)

        箭头的方向,即向量的倾角,等于arctan(v/u)

         比如,当u,v都是小于0,则箭头的方向则是倾向于左下角;

     

                     当u小于0,v大于0,则箭头的方向则是倾向于左上角;

     

                     当u大于0,v大于0,则箭头的方向则是倾向于右上角; 

     

                     当u大于0,v小于0,则箭头的方向则是倾向于右下角;

                      

        推荐博客:

     

    https://www.ilovematlab.cn/thread-475484-1-1.html

     

    展开全文
  • Matlab中使用quiver函数进行绘制矢量图时出现以下图像: quiver是生成矢量图的函数,quiver(x,y,u,v)是在(x,y)处显示(u,v)这个矢量。 经过查找,这种情况的原因一种是版本不对;另一种就是x轴,y轴的量级不对。...

    在Matlab中使用quiver函数进行绘制矢量图时出现以下图像:
    在这里插入图片描述
    quiver是生成矢量图的函数,quiver(x,y,u,v)是在(x,y)处显示(u,v)这个矢量。
    经过查找,这种情况的原因一种是版本不对;另一种就是x轴,y轴的量级不对。
    从这个图来看,x轴的间隔是10,而y轴是0.1,这个比例大小相差过大。
    再举一个栗子

    x=[0:75]';
    y=rand(76,1)*10000;
    u=rand(76,1);
    v=-0.5+rand(76,1);
    plot(x,y);
    hold on;
    a=max(v)./max(y);
    v=v./a;
    b=max(u)./max(x);
    u=u./b;
    quiver(x,y,u,v,'MaxHeadSize',0.1);
    

    生成的图像是类似上图
    在这里插入图片描述

    x=[0:75]'; 
    y=rand(76,1)*100;
    u=rand(76,1);
    v=-0.5+rand(76,1);
    plot(x,y);
    hold on;
    a=max(v)./max(y);
    v=v./a;
    b=max(u)./max(x);
    u=u./b;
    quiver(x,y,u,v,'MaxHeadSize',0.1);
    

    改动参数后生成图像如下
    在这里插入图片描述
    所以这类情况可以理解为x与y方向的数据量级差距过大
    那么解决办法为调整量级,类似上方代码:
    x轴方向数据是[0,75],而y轴方向是[0,10000],那么对y轴方向进行缩小,缩到[0,100]。满足量级要求。
    需要注意的就是:
    1.y轴对应的矢量v也需要进行相同的放缩。

    a=max(v)./max(y);
    v=v./a;
    

    此处代码进行的就是这样的操作。
    2.这里对y轴方向数据进行处理后,数据点的矢量方向实际上发生了一定的偏移。

    简单的示意图
    在这里插入图片描述

    展开全文
  • matlab quiver函数 使用…

    万次阅读 2017-03-14 10:55:41
    函数功能 使用箭头绘制矢量图。例如,该函数可用于绘制梯度图。 语法格式 quiver(x,y,u,v) 该函数使用箭头来直观的显示矢量场。...需要注意的是,如果x、y不是矩阵,MATLAB会调用meshgrid函数将其扩展。然后再调
  • 如果对曲线y=y(x)y=y(x)y=y(x)上每一个点(x0,y0)(x_{0},y_{0})(x0​,y0​),F⃗(x0,y0)\...那么对于曲线 y=y(x)y=y(x)y=y(x) ,它的切线场可以用一个矢量函数F⃗(x,y)=i⃗Fx(x,y)+Fy(x,y)\vec{F}(x,y)=\vec{i}F_{x}(...
  • quiver ( x ( 1 : 4 : end , 1 : 4 : end ) , y ( 1 : 4 : end , 1 : 4 : end ) , u ( 1 : 4 : end , 1 : 4 : end ) , v ( 1 : 4 : end , 1 : 4 : end ) , 'b' , 'MaxHeadSize' , 3 , 'autoScalefactor' , 1.7 , '...
  • 可以利用matlab提供的meshgrid函数,为我们自动生成。 [cpp] view plain copy >> A=[1 2 3;4 5 6];  >> [height,width]=size(A);  >> [y,x]=meshgrid(1:width,1:height)    y ...
  • 提要:quiver (x, y,u,v)在点(x,y)处画(u,...quiver函数会自动调整箭头的长度以适应显示quiver(x,y,u,v,scale)scale 用于限定箭头的长度,如果scale = 1 则等值显示矢量的长度,而scale = 0.2 则显示0.2倍的矢量长度...
  • %quiverC3D 创建一个 3D 箭袋图并添加颜色编码。 颜色编码是由分量矢量的大小给出。 大值导致颜色% 来自所用颜色图的上端。 % % 输入: %x-数组,初始点的x分量% y - ...:此函数可能不会创建与箭头相同长度的箭头%
  • matlab官方quiver介绍 速度场 在平面直角坐标系中,两个点(x1,y1)(x_1,y_1)(x1​,y1​)和(x2,y2)(x_2,y_2)(x2​,y2​)唯一地确定一个矢量或速度,现在将这个矢量平移到以(0,0)(0,0)(0,0)为起点得到得两个点坐标为(0,...
  • matlab开发-quiver3d

    2019-08-27 04:22:41
    matlab开发-quiver3d。该函数改进了Quiver3可视化三维矢量场的技术。
  • 这是如何在 MATLAB:registered: 中创建二维颤动图的示例。 阅读 MATLAB 文档中的“quiver函数。 有关更多示例,请转到 MATLAB 绘图库 - http://www.mathworks.com/discovery/gallery.html
  • 这是如何在 MATLAB:registered: 中创建 3D 颤动图的示例。 阅读 MATLAB 文档中的“quiver3”函数。 有关更多示例,请转到 MATLAB 绘图库 - http://www.mathworks.com/discovery/gallery.html
  • 这是函数 quiver3 的修改版本,用于将速度矢量绘制为箭头,在点 (X,Y,Z) 处具有分量 (U,V,W),颜色对应于 C 数据。 来自 Suever 的想法: ...
  • Matlab自带函数中不包含构造 quiver 函数注释过程,本文参照 matplotlib 中 quiverkey 函数,构造类似函数Matlabquiver 矢量场进行标注。 quiverkey函数 首先看 matplotlib 中 quiverkey 如何定义的 ...

空空如也

空空如也

1 2 3 4 5
收藏数 84
精华内容 33
关键字:

quiver函数matlab

matlab 订阅