【问题标题】:Plot discrete points and some circles that enclose them in matlab在matlab中绘制离散点和将它们包围的一些圆圈
【发布时间】:2014-10-22 19:53:54
【问题描述】:

我试图在 matlab 中绘制一些特征值及其 Gershgorin 圆,但似乎无法找到让离散点(特征值)显示出来的语法。这是我尝试过的:

clear all ;

m = [ 1  -1  0  0 ;
  -1  2 -1  0 ;
  0  -1  2  1 ;
  0   0  -1 1 ]

e = eig( m ) ;

n = 30 ;
z1 = zeros( n + 1, 1 ) ;
z2 = zeros( n + 1, 1 ) ;

for i = [ 1 : n + 1 ]
   z1(i) = 2 + 2 * exp(j * 2 * pi * (i - 1)/ 30) ;
   z2(i) = 1 + exp(j * 2 * pi * (i - 1)/ 30) ;
end

h = plot( real(e(1)), imag(e(1)), real(e(2)), imag(e(2)), real(e(3)), imag(e(3)), real(e(4)), imag(e(4)), real(z1), imag(z1), real(z2), imag(z2) )

set(h(1),'LineWidth',2) ;
set(h(2),'LineWidth',2) ;
set(h(3),'LineWidth',2) ;
set(h(4),'LineWidth',2) ;

这会产生一个我可以看到圆圈但看不到点的图:

如果我在 h(5) 或 h(6) 上使用相同的 set 命令,它确实会使圆形图像我预期的那样显示得更厚。

【问题讨论】:

    标签: matlab plot


    【解决方案1】:

    它没有显示,因为调用 plot to plot points (可怕的句子对不起!)。用scatter就好了。

    我修改了你的代码,所以这不是评论哈哈。

    1) 我对你的 for 循环进行了矢量化,这在我的计算机上速度相当快。顺便说一句,使用 i 作为索引是有风险的,尤其是在处理复数时。安全的方法是使用其他东西,或者

    2) 用 1j 或 1i 来表示虚数单位。这也更快。

    不管怎样,这里是点更大的代码:

    clear
    clc
    close all
    
    
    m = [ 1  -1  0  0 ;
      -1  2 -1  0 ;
      0  -1  2  1 ;
      0   0  -1 1 ]
    
    e = eig( m ) ;
    
    n = 30 ;
    
    %// see below for vectorized version
        % for k = [ 1 : n + 1 ]
        %    z1(k) = 2 + 2 * exp(1j * 2 * pi * (k - 1)/ 30) ;
        %    z2(k) = 1 + exp(1j * 2 * pi * (k - 1)/ 30) ;
        % end
    
    
    
    %// vectorized loop with 1j as imaginary unit.
    
    z1 = 2 + 2 * exp(1j * 2 * pi * ((1:n+1) - 1)/ 30) ;
    z2 = 1 + exp(1j * 2 * pi * ((1:n+1) - 1)/ 30) ;
    
    %// plot the circles and then use scatter for the points. 
    plot(real(z1), imag(z1), real(z2), imag(z2));
    hold on
    scatter(real(e),imag(e))
    hold off
    

    给出以下内容:

    您当然可以根据需要自定义散点图。希望对您有所帮助!

    【讨论】:

    • 我显然是 matlab 新手,也感谢所有其他提示。
    • 很好的答案,特别是因为 vectorized 部分。恭喜2K!那里获得了一些超能力! :)
    • 我很高兴@PeeterJoot!这个网站是学习 Matlab 的好地方,不要犹豫回来!
    【解决方案2】:

    试试这个:

    h = plot( real(e), imag(e), 'x', real(z1), imag(z1), real(z2), imag(z2) )
    

    plot 文档中的更多信息。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-05-07
      • 1970-01-01
      • 2013-06-19
      • 1970-01-01
      • 2022-08-14
      • 1970-01-01
      相关资源
      最近更新 更多