Gerade in drei Dimensionen


Regressionsgerade in einen Datensatz mit drei Dimensionen mittels der Methode der kleinsten Quadrate ermitteln.

1. Lösungsanssatz


Beschreibung der Geraden mit zwei getrennten Gleichungsystemen unter der Bedingung, dass die Gerade nicht parallel zur x-y-Ebene ist.
x = mx*z + cx
y = my*z + cy


2. Die passende Geradengleichung


Parameterdarstellung (p, r und p0 sind Vektoren)
g: p = lambda*r + p0

Ortsvektor eines Punktes auf der Geraden
p0 = [cx;cy;0]
Richtungsvektor
r = [mx;my;1]


3. Octave-Code


clear
clc

% ============================================
% Abschnitt 1: Datensatz erzeugen und anzeigen
% ============================================

% Eine Gerade sei gegeben durch
p0c = [4 10 2];
rc  = [6 -5 6];

u=-10:.1:10;

% Datensatz mit einer normal verteilten Streuung aufbauen
g = u.'*rc + ones(length(u),1)*p0c;
gn = randn(size(g))*3 + g;
x=gn(:,1);
y=gn(:,2);
z=gn(:,3);

% Punktwolke darstellen
hold off
h=plot3(x,y,z,'o');
set(h, 'markersize',.6);
xlabel('x');
ylabel('y');
zlabel('z');
hold on


% ========================================
% Abschnitt 2: Regressionsgerade ermitteln
% ========================================

% Hier nehmen wir an p0c und r0c wären unbekannt

% Lösung von zwei getrennten Gleichungsystemen
% x = mx*z + cx
% y = my*z + cy

p = polyfit(z,x,1);
mx = p(1);
cx = p(2);

p = polyfit(z,y,1);
my = p(1);
cy = p(2);

% Ein Punkt auf der Geraden ist p0
p0 = [cx;cy;0]
h=plot3(p0(1),p0(2),p0(3),'ro');
set(h, 'markersize',4);

l=20;

% Richtungsvektor r
r = [mx;my;1]
h = plot3([0 mx]*l,[0 my]*l,[0 1]*l,'r.-');
set(h, 'markersize',4);
set(h, 'linewidth',2);

% Die Steigung der Geraden mit zunehmenden z
m = sqrt(mx^2 + my^2)


grid on





4. Ausgabe


Ein Punkt au der Geraden
p0 =

	1.93440
   11.98781
	0.00000

Richtungsvektor
r =

   0.98368
  -0.81088
   1.00000



Die Steigung der Geraden im Bezug auf die x-y-Ebene
m =  1.2748



image


Siehe auch
Valid XHTML :: Valid CSS: :: Powered by WikkaWiki