________________________________________________________________________________
Inhalt....: Das Skalarprodukt (Vademekum)
Kategorie.: Arbeitsblatt
Mathematik: Analysis
MuPAD.....: 3.1.1
Datum.....: 2005-04-04
Autoren...: Raymond Ami <r.ami@bluewin.ch>
Funktionen: matrix, linalg::scalarProduct, assuming, Type::Real
________________________________________________________________________________
Das Skalarprodukt (Vademekum)
Die folgenden Aspekte des Skalarproduktes von Vektoren werden untersucht:
- Feststellen ob zwei Vektoren rechtwinklig zueinander liegen / orthogonal sind.
- Berechnen der Länge eines Vektors
- Abbilden/Projezieren eines Vektors auf einen andern Vektor
- Bestimmen Winkel zwischen zwei Vektoren
Link
http://www.mathe-online.at/mathint/vect2/i.html
Das Bilden des Skalarprodukts
Das Skalarprodukt wird dadurch gebildet, dass man alle Vektorelemente mit gleichem Index mit-
einander multipliziert und die Summe dieser Produkte bildet. In MuPAD lautet die entsprechende
Funktion linalg::scalarProduct(Vektor1, Vektor2):
Va:= matrix([ax,ay,az])

Vb:= matrix([bx,by,bz])

Wir möchten unsere folgenden Betrachtungen im Raum der reellen Zahlen machen und führen
die Berechnungen daher "unter der Annahme" (assuming) durch, dass alle Bezeichner reell-
wertig (Type::Real) sind:
linalg::scalarProduct(Va,Vb) assuming Type::Real
![]()
Und nun mit numerischen Werten und einer Kotrollrechnung:
V1:= matrix([10,11,12])

V2:= matrix([20,21,22])

linalg::scalarProduct(V1,V2)
![]()
Kontrolle = V1[1]*V2[1] + V1[2]*V2[2] + V1[3]*V2[3] // = 10*20 + 11*21 + 12*22
![]()
Grafische Interpretation des Skalarprodukts
Die folgenden beiden Grafiken zeigen je zwei Vektoren (blau und rot). Die schrafierte Fläche
repräsentiert den Schatten-Wurf des roten Vektors auf den blauen Vektor und zwar von einer
Lichtquelle, die senkrecht auf den blauen Vektor leuchtet.
[Die untenstehende Berechnungen sollen an dieser Stelle nicht interessieren.]
AnimationScalarProduct:= (p) ->
(
RVa := (x) --> matrix([cos(x),sin(x)])*sqrt(8):
OVa := matrix([0,0]):
RVb := matrix([5,p]): // blauer Vektor
OVb := matrix([0,0]):
Ani := PI/4..9/4*PI:
ScPr := (x) --> linalg::scalarProduct(RVa(x),RVb):
ScPr_b := (x) --> ScPr(x) / linalg::scalarProduct(RVb,RVb):
ScPr_bL:= (x) --> ScPr(x) / norm(RVb,2):
ScPrWi := (x) --> (180/PI)*arccos(ScPr(x)/(norm(RVa(x),2)*norm(RVb,2))):
plot::Scene2d(
plot::Arrow2d ( OVa,RVa(a), a=Ani,Color=RGB::Red, LineWidth=1)
, plot::Curve2d ( matrix(OVa)+RVa(a)*L, L=-0.2..1.5, a=Ani, Color=RGB::Red)
, plot::Arrow2d ( OVb,RVb(p), Color=RGB::Blue, LineWidth=1)
, plot::Curve2d ( matrix(OVb)+RVb*L, L=-1.2..1.2, Color=RGB::Blue)
, plot::Polygon2d ( [ OVb, OVb+RVb*ScPr_b(a), OVa+RVa(a) ], a=Ani
, Filled, FillPattern=XCrossedLines, FillColor=RGB::Black20, LinesVisible=FALSE)
, plot::Arrow2d ( OVa+matrix([0,-0.2]), OVb+RVb*ScPr_b(a)+matrix([0,-0.2]), a=Ani
, Color=RGB::ForestGreen, LineWidth=1)
, plot::Text2d ( a -> "ScalProd -> ".stringlib::formatf(float(ScPr(a)),2,6)."\n"
. "LängeGrün = ------- =".stringlib::formatf(float(ScPr_bL(a)),2,6)."\n"
. "LängeBlau-> ".stringlib::formatf(float(norm(RVb,2)),2,6)."\n"
. "Winkel = ".stringlib::formatf(float(ScPrWi(a)),2,6)
, [-7.0, 4.8], a=Ani
, TextFont=["Courier New",9,Left,Bold], HorizontalAlignment=Left)
, Scaling = Constrained
, ViewingBox = [-7..5, -5..5]
, Header = "Animation für Vektor(5,".expr2text(p).")"
, HeaderFont = [10]
, Frames=25
)
):
In der ersten Grafik sind die Koordinaten des roten Pfeils in der (animierten) Grundstellung x=2 und y=2.
Die Koordinaten des blauen Pfeiles sind x=5 und y=0.
Das Skalarprodukt ist gleich: (2*5 + 2*0) = 10:
plot( AnimationScalarProduct(0), Width = 120, Height = 100):

In der zweiten Grafik sind die Koordinaten des roten Pfeils in der (animierten) Grundstellung x=2 und y=2.
Die Koordinaten des blauen Pfeiles sind x=5 und y=-5.
Das Skalarprodukt ist gleich: (2*5 + 2*-5) = 0:
plot( AnimationScalarProduct(-5), Width = 120, Height = 100):

Der Schatten unterteil den blauen Vektor in zwei Teile. Das Skalarprodukt sagt etwas über dieses
Verhältnis wie folgt aus:
Skalarprodukt
---------------------------------------------- = Länge (Betrag) des durch den Schatten bestimmten (günen) Vektors
Länge (Betrag) blauer Vektor
In beiden Grafiken kann dies in der Grundstellung optisch überprüft werden. Mit dem obigen Prinzip kann
auch der Winkel zwischen den beiden Vektoren berechnet werden (siehe unten).
Die beiden obige Grafiken sind animiert. Öffnen Sie die Grafiken mit einem Doppelklick und bringen Sie
den roten Vektor in die Stellung "senkrecht" zum blauen Vektor (nach "unten" und nach "oben"). Welche
Länge hat jeweils der grüne Schaten, welchen Wert hat das Skalarprodukt?
Antwort: beide sind 0
Immer wieder wichtig:
Ist das Scalarprodukt zweier Vektoren = 0, so liegen sie rechtwinklig zueinander. Man sagt,
sie sind orthogonal.
Umgekehrt gilt:
Liegen zwei Vektoren rechtwinklig zueinander (orthogonal), so ist deren Skalarprodukt = 0.
Anwendungen zum Skalarprodukt
Ganz allgemein:
in linearen Gleichungssystemen, in denen das Lot eine Rolle spielt.
Die Elemente eines Vektors ins Quadrat setzen und summieren (aa)
V1:= matrix([2,2])
![]()
linalg::scalarProduct(V1,V1)
![]()
Va:= matrix([a1,a2])
![]()
linalg::scalarProduct(Va,Va) assuming Type::Real
![]()
Die Länge (Betrag) eines Vectors ermitteln ( ¦a¦ )
V1:= matrix([2,2])
![]()
sqrt(linalg::scalarProduct(V1,V1)) = float(sqrt(linalg::scalarProduct(V1,V1)))
![]()
Va:= matrix([a1,a2])
![]()
sqrt(linalg::scalarProduct(Va,Va)) assuming Type::Real
![]()
oder kürzer:
norm(V1,2) = float(norm(V1,2)) assuming Type::Real;
norm(Va,2) assuming Type::Real
![]()
![]()
Feststellen ob zwei Vektoren orthogonal sind
V1:= matrix([2,2])
![]()
V2:= matrix([2,-2])
![]()
testeq(linalg::scalarProduct(V1,V2) = 0)
![]()
Va:= matrix([a1,a1])
![]()
Vb:= matrix([[1,0],[0,-1]])*Va;
![]()
linalg::scalarProduct(Va,Vb);
testeq(% = 0)
![]()
![]()
Abbilden eines Vektors auf einen andern (Projektion)
V1:= matrix([2,2]);
![]()
V2:= matrix([4,0]);
![]()
linalg::scalarProduct(V1,V2) / linalg::scalarProduct(V2,V2) * V2;
float(%)
![]()
![]()
Va:= matrix([a1,a2])
![]()
Vb:= matrix([b1,b2])
![]()
linalg::scalarProduct(Va,Vb) / linalg::scalarProduct(Vb,Vb) * Vb assuming Type::Real

Berechnen Winkel (in Grad)
zu berücksichtigen ist, dass die Berechnungen für beide Halbkreise zum selben Ergebnis führen
V1:= matrix([2,2])
![]()
V2:= matrix([100,0])
![]()
Bogenmass = arccos(linalg::scalarProduct(V1,V2)/(norm(V1,2)*norm(V2,2)));
WinkelGrad = (180/PI)*%[2]
![]()
![]()
Va:= matrix([a1,a2]);
![]()
Vb:= matrix([b1,b2]);
![]()
Bogenmass = arccos(linalg::scalarProduct(Va,Vb)/(norm(Va,2)*norm(Vb,2))) assuming Type::Real;
WinkelGrad = (180/PI)*%[2]


oder kürzer
linalg::angle(V1,V2):
Bogenmass = Simplify(%);
WinkelGrad = (180/PI)*%[2]
![]()
![]()
Bogenmass = linalg::angle(Va,Vb) assuming Type::Real;
WinkelGrad = (180/PI)*%[2]


________________________________________________________________________________
Anmerkungen:
1. Weitere Anregungen zum Einsatz von MuPAD in der Lehre finden Sie auf unserem WebPortal
MuPAD in Schule und Studium unter: http://schule.mupad.de bzw. http://studium.mupad.de.
________________________________________________________________________________