绘制离散点和一些将它们包含在matlab中的圆圈

时间:2014-10-22 19:53:54

标签: matlab plot

我试图在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) ;

这会产生一个情节,我可以在其中看到圆圈,但不能看到点:

Gershgorin plot attempt

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

2 个答案:

答案 0 :(得分:4)

好吧它没有出现因为要求策划积分(可怕的句子对不起!)。如果你使用分散,那就没问题了。

我修改了一下你的代码,这就是为什么这不是评论哈哈。

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

给出以下内容:

enter image description here

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

答案 1 :(得分:0)

试试这个:

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

plot文档中的更多信息。