1 ist ungleich 1 und die Arccos spinnt auch
29.09.2016 07:24:01
Björn
Ich will das Skalarprodukt aus 2 Vektoren berechnen in VBA
Grundlage dafür ist folgende Formel
a*b=|a||b|cos(phi)
a1*b1 + a2*b2 + a3*b3 = |a|*|b|*cos(phi)
a1*b1 + a2*b2 + a3*b3 = (a1^2 + a2^2 + a3^2)^(1/2) * (b1^2 + b2^2 + b3^2)^(1/2) * cos(phi)
cos(phi) = [a1*b1 + a2*b2 + a3*b3] / [(a1^2 + a2^2 + a3^2)^(1/2) * (b1^2 + b2^2 + b3^2)^(1/2)]
Dann noch arccos des rechten Teils und fertig.
In VBA hab ich das dann so umgesetzt
Dim a1, a2, a3, b1, b2, b3 As Double
a1 = Sheets("Tabelle1").Cells(3, 9)
a2 = Sheets("Tabelle1").Cells(4, 9)
a3 = Sheets("Tabelle1").Cells(5, 9)
b1 = Sheets("Tabelle1").Cells(3, 12)
b2 = Sheets("Tabelle1").Cells(4, 12)
b3 = Sheets("Tabelle1").Cells(5, 12)
If ((a1 / b1) = (a2 / b2)) And ((a1 / b1) = (a3 / b3)) Then
Sheets("Tabelle12").Cells(n + 1, m + 1) = 0
Else
Sheets("Tabelle11").Cells(n + 1, m + 1) = WorksheetFunction.Acos((a1 * b1 + a2 * b2 + a3 * b3) / ((a1 ^ 2 + a2 ^ 2 + a3 ^ 2) ^ (1 / 2) * (b1 ^ 2 + b2 ^ 2 + b3 ^ 2) ^ (1 / 2)))
End If
Die Überprüfung ob der Vektor derselbe ist bzw linear davon abhängig habe ich eingefügt, weil er mir bei WorksheetFunction.Acos(1) eine Fehlermeldung bringt
1004 die Acos-Eigenschaft des Worksheetfunction-Objektes kann nicht zugeordnet werden
Dabei ist Arccos(1) ja eigentlich = 0 definiert.
Also entweder muss ich den Fehler wegbekommen, oder meine If-Schleife verbessern.
Denn VBA springt auch wenn die Vektoren dieselben sind in das Else-Statement.
Hier ein Screenshot der überwachung
Warum ist a1/b1 ungleich a2/b2 ?
Das heisst ja 1 ungleich 1?
Und warum sind alle Variablen Variant aber b3 nicht?
Bitte um Hilfe