Girko使用matlab的循环法

时间:2016-12-09 06:39:33

标签: matlab function math

我已使用特定功能解决了我的问题,但我必须使用Girko's Circular Lawparfor函数计算spmd。我没有这样做。有我的功能。

令λ_i是一组随机实矩阵的(可能是复数的)特征值,其具有独立的条目并取自标准正态分布。然后,λ_i均匀分布在复平面中的单位盘上。对于小的,分布显示沿着实线的浓度,伴随着上下的轻微缺乏(具有有趣的嵌入结构)。然而,因为,线周围的浓度消失,分布变得真正均匀。

测试循环定律,该定律指出一组随机N×N实矩阵的特征值具有独立的条目并取自标准正态分布(提示:您可以使用内置MATLAB函数)在渐近约束内复平面中半径的单位圆。

编写一个计算特征值的程序(提示:你可以使用MATLAB的eig函数),许多(即1000,2500,5000和10000,取决于你的机器)正常分布的大小为nxn的随机矩阵(即100x100) 。在平面上绘制所有这些特征值的实部和虚部(即,将实部用作x值,将虚部用作y值),并在其周围画一个半径为√(即)的圆来验证循环法。列出不在圆圈内的总点数。

使用并行编程范例(即parfor和/或spmd)编写相同的程序。报告获得的结果(类似于幻灯片460​​和461中的结果)。使用不同大小的矩阵(50x50,100x100,250x250,500x500等,根据您的机器)测试您的代码,并使用不同数量的工作人员报告运行时间结果。

function [  ] = Girko(N,n )
%UNTİTLED4 Summary of this function goes here
%   Detailed explanation goes here
%N-> Matrix number
%n-> dimension of a matrix
hold on
for i=0:N
plot(eig(randn(i)) / sqrt(n),'.');
end
ang=0:0.01:2*pi; 
xp=1*cos(ang);
yp=1*sin(ang);
x=0;y=0;
plot(x+xp,y+yp);
hold off
end

1 个答案:

答案 0 :(得分:0)

这可能不是最有效的,但使用parfor可以做类似

的事情
N = 1000; % number of matrices to try
n = 3;    % size of matrix
E = [];  % sets up an array to store the results
parfor i=1:N
    E = [E, eig(randn(n))/sqrt(n)];
end
plot(E,'.')

使用concatination操作将结果存储在数组中。 E = [E,数据]。循环结束后,您可以绘制数据。

请参阅https://uk.mathworks.com/help/distcomp/reductions-cumulative-values-updated-by-each-iteration.html