Sie können einen numerischen Solver verwenden, um die Kontur zu finden wie folgt:
% plot the distribution
figure;
x = (-5:0.5:5)';
y = (-5:0.5:5)';
[X1,X2] = meshgrid(x',y');
X = [X1(:) X2(:)];
p = mvncdf(X,mu,Sigma);
X3 = reshape(p,length(x),length(y));
surf(X1,X2,X3);
x = (-5:0.1:5)'; % define the x samples at which the contour should be calculated
y0 = zeros(size(x)); % initial guess
y = fsolve(@(y) mvncdf([x y], mu, Sigma) - 0.95, y0); % solve your problem
z = mvncdf([x y],mu,Sigma); % calculate the correspond cdf values
hold on
plot3(x(z>0.94), y(z>0.94), z(z>0.94), 'LineWidth', 5); % plot only the valid solutions, i.e. a solution does not exist for all sample points of x.
Um eine bessere numerische Darstellung der gewünschten Kontur zu erhalten, können Sie den obigen Ansatz für ausgewählte y-Werte wiederholen. Ihre Linie wird also besser den gesamten Graphen ausfüllen.
Als Alternative kann man contour
verwenden, um die Punkte auf der Kontur wie folgt zu berechnen:
figure
[c, h] = contour(X1, X2, X3, [0.95 0.95]);
c(3, :) = mvncdf(c',mu,Sigma);
figure(1)
plot3(c(1, :)', c(2, :)', c(3, :)', 'LineWidth', 5);
xlim([-5 5])
ylim([-5 5])
Ein Nachteil dieses Ansatzes ist, dass Sie nicht die Kontrolle über das haben Sie Grobheit der abgetasteten Kontur. Zweitens verwendet diese Methode (Interpolation von) die 3D-CAD-Datei, die weniger genau ist als die mit fsolve
berechneten Werte.
Bitte konsultieren Sie das Duplikat. Schauen Sie sich Amro's Antwort an - besonders den EDIT-Abschnitt, der darüber spricht, wie man die Punkte entlang der 95% igen Fehlerellipse erzeugt. – rayryeng
Ich konnte der Antwort nicht folgen. Das Ziel des Problems scheint anders zu sein. – user1612986
Der Post erzeugt die Punkte einer Ellipse um die Daten. Es findet diese Punkte und zeichnet sie dann auf. Die Bearbeitung zeigt Ihnen auch, wie Sie dies für eine Fehlerellipse von 95% tun. Was Sie suchen, sind nur die Punkte, nicht das Plotten. Also alles bis auf die Handlung. Das Duplikat zeichnet dies für zwei Objekte auf, aber Sie haben nur eines. Die Linie, in der die Punkte erzeugt werden, lautet: 'e = bsxfun (@plus, VV * e, Mu ');'. "e" wird somit eine zweispaltige Matrix sein, wobei jede Spalte eine Koordinate ("x" oder "y") der Punkte entlang der Ellipse ist. – rayryeng