繁体   English   中英

在Matlab中绘制离散点和一些将其包围的圆

[英]Plot discrete points and some circles that enclose them in matlab

我正在尝试在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命令,则确实会使圆图显示得比我期望的更粗。

好吧,由于调用绘图以绘图点而没有显示(糟糕的句子,对不起!)。 如果您使用散点图,那很好。

我修改了一点您的代码,这就是为什么这不是注释哈哈。

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

它给出了以下内容:

在此处输入图片说明

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

尝试这个:

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

plot文档中的更多信息。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM