matlab怎么画二维向量图:A是个二维向量,B也是,C=A+B,怎么把这三个向量在同一个坐标上画出来。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了matlab怎么画二维向量图:A是个二维向量,B也是,C=A+B,怎么把这三个向量在同一个坐标上画出来。相关的知识,希望对你有一定的参考价值。

怎么样才能画出带箭头(方向)的向量图呢?在极坐标上画?命令是什么……求教

参考技术A clear;
clf;
A=[4,5];
B=[-10,0];
C=A+B;
M=[A;B;C];
X=[M(:,1);A(1)];
Y=[M(:,2);A(2)];
plot(X,Y,'r')
axis ([-12 6 -1 6])
grid on
text(A(1),A(2),'A')
text(B(1)-0.2,B(2)-0.2,'B')
text(C(1),C(2)+0.2,'C')
scale=1;
hold on
quiver(A(1),A(2),B(1)-A(1),B(2)-A(2),scale)
hold on
quiver(B(1),B(2),C(1)-B(1),C(2)-B(2),scale)
hold on
quiver(A(1),A(2),C(1)-A(1),C(2)-A(2),scale)本回答被提问者和网友采纳
参考技术B 写完一个画图指令之后用hold on;就可以让上一次的图不消失了,取消用hold off;追问

比如x=[0,1],那么x应该是一个在y轴上的向量,可是我用plot(x)画出来是一条很奇怪的斜线……求解?

二维向量和向量图有啥区别?

【中文标题】二维向量和向量图有啥区别?【英文标题】:What's the difference between 2d vector and map of vector?二维向量和向量图有什么区别? 【发布时间】:2017-10-10 08:53:40 【问题描述】:

假设我已经声明

map< int , vector<int> > g1;
vector< vector<int> > g2;

这两者有什么异同?

【问题讨论】:

map 是一个关联容器,而 vector 不是。 【参考方案1】:

相似之处在于你访问数据的方式,可以是相同的语法:

std::cout << g1[3][2] << std::endl;
std::cout << g2[3][2] << std::endl;

主要区别如下:向量的映射不必包含所有索引。然后,例如,您的地图中只能使用键 '17'、'1234' 和 13579 访问 3 个向量:

g2[17].resize(10);
g2[1234].resize(5);
g2[13579].resize(100);

如果您想要与向量向量相同的语法,您的主向量中至少需要有 13579 个向量(包括 13576 个空向量)。但这会占用内存中大量未使用的空间。

此外,在您的地图中,您还可以使用否定键访问您的向量(这在向量的向量中是不可能的):

g2[-10].resize(10);

经过这个明显的高差之后,数据的存储就不同了。向量分配连续的内存,而映射存储为树。向量中的访问复杂度为O(1),而地图中的访问复杂度为O(log(n))。我邀请您学习一些有关 C++ 容器的教程,以了解所有差异以及使用它们的常用方法。

【讨论】:

【参考方案2】:

它们本质上是不同的。虽然您可以同时执行g2[0]g1[0],但行为却大不相同。假设索引 0 处没有任何内容,则 std::map 将默认构造一个新的 value_type,在本例中为向量,并返回一个引用,而 std::vector 具有未定义的行为,但通常是段错误或返回垃圾。

它们在内存布局方面也完全不同。 std::map 由红黑树支持,std::vector 在内存中是连续的。因此,插入映射总是会导致内存中某处的动态分配,而向量将被调整大小以防超出其当前容量。但是请注意,向量的向量在内存中是不连续的。第一个向量,它本身在内存中是连续的,由数据组成的向量大致如下:

struct vector 

    T* data;
    size_t capacity;
    size_t size;
;

每个向量在data 处拥有其动态内存分配。

地图的优点是不必人口稠密,即您可以在索引 0 和 12902 处拥有一些东西,而无需介于两者之间的所有东西,而且它是排序的。如果您不需要 sorted 属性并且可以使用 c++11,请考虑 std::unordered_map。向量总是密集填充,即大小为 10000 时,存在 0-9999 的元素。

【讨论】:

请注意,标准没有指定 RB-tree。它依赖于实现,即使大多数情况下都是如此。 是的,但是您知道不使用 rb-tree 的实现吗? IIRC 标准通常只要求某些操作的渐近运行时,但在实践中,内存分配策略在大多数情况下比渐近运行时差异具有更大的影响。 不,但是有这么多奇怪的编译器,如果它们中的一些实现其他算法(例如卡西欧或德州仪器,已经使用 16 位字节),我不会感到惊讶。跨度> 是的,但这不是编译器会做的事情,这来自您使用的标准库(libstdc++(通常使用 gcc)、libc++(通常使用 clang)、SGI)。 16 位 afaik 的字节大小与此完全不同,因为这些东西通常是由机器架构(march)强加的。【参考方案3】:

通过示例,您可以了解其中的区别。假设vector&lt;int&gt; 存储人的唯一ID,map 存储各自的密码作为密钥。

map< int , vector<int> > listOfPeopleAtRespectivePinCode;
vector< vector<int> > bunchOfGroupsOfPeople;

显然,map 能够关联键和值(这里是值列表),而vector 可以有效地存储一堆数据。

【讨论】:

以上是关于matlab怎么画二维向量图:A是个二维向量,B也是,C=A+B,怎么把这三个向量在同一个坐标上画出来。的主要内容,如果未能解决你的问题,请参考以下文章

matlab怎么用三维矩阵画三维图

matlab 绘制条形图

MATLAB画二维联合正态分布函数

如何用matlab画直方图

几组数据转换为像素图

matlab 将二维矩阵存储成彩色图