⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 waxtop.m

📁 用matalab开发的随机数生成程序包
💻 M
字号:
function [adj_matr, nd_coord]=waxtop(lambda, alpha, beta, domain) 
% WAXTOP Simulate and plot a random network topology by the method
%   suggested by Waxman (1988):
%   - nodes are a Poisson process in the plane with scaled
%    Lebesgue mean measure 
%   - nodes u and v are connected with probability
%    P(u,v)=alpha*exp(-d(u, v)/(beta*L)),
%    where alpha>0, beta<=1, d(u,v) is Euclidean distance, 
%    L is the maximum distance between any two nodes
%
% [adj_matr, nd_coord] = waxtop(lambda,alpha, beta, domain) 
%
% Inputs: 
%   lambda - intensity of the Poisson process
%   alpha - maximal link probability
%   beta - parameter to control length of the edges. Increased <beta>
%     yields a larger ratio of long edges to short edges
%   domain - bounds for the region. A 4-dimensional vector in
%     the form [x_min x_max y_min y_max]. 
%
% Outputs:
%   adj_matr - adjacency matrix of the graph of the topology
%   nd_coord - coordinates of the nodes

% Authors: R.Gaigalas, I.Kaj
% Detailed documentation at
% http://www.math.uu.se/research/telecom/software
% v1.5 Created 07-Nov-01
%      Modified 23-Nov-05 changed variable names
% 

 if (nargin<4) % default parameter values
   lambda = 0.6; % intensity of the Poisson process
   alpha = 0.4; % parameter for the link probability
   beta = 0.1; % parameter for the link probability
   domain = [0 10 0 10]; % bounds for the "geografical" domain
 end

 xmin = domain(1); 
 xmax = domain(2);
 ymin = domain(3);
 ymax = domain(4);
 clear domain;
   
 % number of points is Poisson distributed 
 % with intensity proportional to the area
 area = (xmax-xmin)*(ymax-ymin); 
 npoints = poissrnd(lambda*area)
% npoints = 20;
 
 %爂iven the number of points, nodes are uniformly distributed
 nd_coord = rand(npoints, 2);
 nd_coord(:, 1) = nd_coord(:, 1)*(xmax-xmin)+xmin;
 nd_coord(:, 2) = nd_coord(:, 2)*(ymax-ymin)+ymin;
 
 % create a matrix with all possible distances
 x_rep = repmat(nd_coord(:, 1), 1, npoints);
 y_rep = repmat(nd_coord(:, 2), 1, npoints);
 dist_matr = sparse(triu(((x_rep-x_rep').^2 + ...
                          (y_rep-y_rep').^2).^0.5, 1));
 
 % create the matrix of probabilities
 prob_matr = alpha*spfun('exp', ...
                   -dist_matr./(beta*max(max(dist_matr))));

 % generate the adjacency matrix
 runi = sprand(dist_matr);
 adj_matr = (runi>0) & (runi < prob_matr);

 % test for connectivity
% s_matr = speye(size(adj_matr));
% for i=1:npoints-1
%   s_matr = s_matr+adj_matr^i;
% end
% length(find(s_matr==0))
 
 % plot the network
 figure(1);
 clf;
 hold on;
 plot(nd_coord(:, 1), nd_coord(:, 2), '.');
 gplot(adj_matr, nd_coord);
 hold off;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -