Contour plots for random variables

4 次查看(过去 30 天)
Hi everybody,
I am trying to plot contours for variable "T". T itself is a function of X and Y. Below is my code, which is clearly wrong!
clc
clear all
X = gevrnd(-0.4176,0.6703,1.4837,100000,1); %X follows GEV distribution
Y = gprnd(-0.0960,0.2152,1.7001,100000,1); %Y follows GPD distribution
U = cdf('generalized extreme value',X,-0.4176,0.6703,1.4837);
V = cdf('Generalized Pareto',Y,-0.0960,0.2152,1.7001);
C = exp(1-((((1-log(U)).^0.9838-1).^1.0075+((1-log(V)).^0.9838-1).^1.0075).^0.9926+1).^1.0165); % Copula
% Return period: T = mu / (1+C-U-V)
mu = 0.08;
T = @(U,V) mu./(1+C-U-V);
fc = fcontour(T,U,V)
fc.LevelList = [1 5 10 25]; %Joint contours for T = 1; 5; 10 and 25 years
How shouhd I do this?

回答(1 个)

per isakson
per isakson 2020-1-3
编辑:per isakson 2020-1-3
The documentation on fcontour, Plot contours says:
Specify a function of the form z = f(x,y). The function must accept two matrix input arguments and return a matrix output argument of the same size.
The vector C is the problem
>> T = @(U,V) mu./(1-U-V);
>> fcontour( T, [2.5,3.5,1.8,3.2] )
produces a plot without throwing an error.
Try this script
%%
Z = T(U,V);
Finterp = scatteredInterpolant( X, Y, Z );
xmin = 2.5; % min(X);
xmax = 3.5; % max(X);
ymin = min(Y);
ymax = max(Y);
N = 1000;
xrange = linspace(xmin, xmax, N);
yrange = linspace(ymin, ymax, N);
[XGrid, YGrid] = meshgrid(xrange, yrange);
ZGrid = Finterp(XGrid, YGrid);
contourf(XGrid, YGrid, ZGrid);
xlabel('X');
ylabel('Y');
zlabel('T');
ZGrid and pieces thereof may also be displayed as an image
imagesc(ZGrid(1:100,:))
Replace
contourf(XGrid, YGrid, ZGrid);
by
contourf( XGrid, YGrid, ZGrid, 64 );
to get a higher resolution in ZGrid

类别

Help CenterFile Exchange 中查找有关 Visual Exploration 的更多信息

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by