Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1516to1520
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

1 ist ungleich 1 und die Arccos spinnt auch

1 ist ungleich 1 und die Arccos spinnt auch
29.09.2016 07:24:01
Björn
Hallo alle zusammen
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
Userbild
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

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: 1 ist ungleich 1 und die Arccos spinnt auch
29.09.2016 08:53:48
UweD
Hallo
Ich denke, es sind Rundungsungenauigkeiten, so dass der ACOS aus einer Zahl berechnet werden soll, die größer als | 1 | ist.
LG UweD
AW: 1 ist ungleich 1 und die Arccos spinnt auch
29.09.2016 09:21:14
Björn
Danke UweD, muss wohl so sein
Ich hab mein if jetzt abgeändert in
If Abs((a1 * b1 + a2 * b2 + a3 * b3) / ((a1 ^ 2 + a2 ^ 2 + a3 ^ 2) ^ (1 / 2) * (b1 ^ 2 + b2 ^ 2 + b3 ^ 2) ^ (1 / 2))) > 0.999999999999 Then
Sheets("Tabelle12").Cells(n + 1, m + 1) = 0
Else
Sheets("Tabelle12").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
Ist zwar absolut nicht schön aber ich denke man kann die Differenz von 10 hoch -12 mal davon kommen lassen
Funktioniert nun einwandfrei
Anzeige
oder: if min(1,deineFormel)=1 owt
29.09.2016 09:46:16
ingoG
...

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige