Hallo,

und vielen Dank für Eure Antworten.

Da ich nicht gerade das riesige Mathegenie bin habe ich es doch mit einer automtischen Suche gemacht.


Begrenzt durch maximale Suchdurchgänge und dem Abgleich der Abweichung der berechneten Radien von den Zielradien lassen sich auch ganz gut Falsche Eingangswerte erkennen. Die Zeit ist durch eine dynamische Schrittanpassung auch nicht so lang wie ich dachte.

Habe mein Excel Testprgramm und den Code mal angehangen.

Vielen Dank für Eure hilfe.

Code:
Option Explicit

Dim P(5)        As Double
Dim S1(5)       As Double
Dim S2(5)       As Double
Dim S3(5)       As Double

Sub GetGPSPos()

Dim iStepCount  As Integer
Dim iStepLimit  As Integer
Dim iStep       As Integer
Dim i           As Integer

Dim dError      As Double
Dim dTolerance  As Double

Dim Mybook      As Workbook
Dim MySheet     As Worksheet

Dim StartTime As Date
Dim EndTime As Date

'Zeitmessung
StartTime = Timer

'Excelwerte holen
Set Mybook = ActiveWorkbook
Set MySheet = Mybook.ActiveSheet

For i = 0 To 3
    S1(i) = MySheet.Cells(2, i + 2)
    S2(i) = MySheet.Cells(3, i + 2)
    S3(i) = MySheet.Cells(4, i + 2)
    P(i) = 0
Next


'Grenzen festlegen
dTolerance = 1      'benötigte Toleranz
iStepCount = 0      'Durchlaufzähler rücksetzen
iStepLimit = 1000   'Durchlaufgrenze festlegen

Do
'Durchlaeufe zählen
iStepCount = iStepCount + 1

'Gesamtabweichung berechnen
dError = GetError

'Schritt festlegen
iStep = Fix(dError / 3)
If iStep = 0 Then
    iStep = 1
End If


'X-Check
P(0) = P(0) + iStep
If GetError > dError Then
    P(0) = P(0) - (2 * iStep)
    If GetError > dError Then
        P(0) = P(0) + iStep
    End If
End If


'Y-Check
P(1) = P(1) + iStep
If GetError > dError Then
    P(1) = P(1) - (2 * iStep)
    If GetError > dError Then
        P(1) = P(1) + iStep
    End If
End If


'Z-Check
P(2) = P(2) + iStep
If GetError > dError Then
    P(2) = P(2) - (2 * iStep)
    If GetError > dError Then
        P(2) = P(2) + iStep
    End If
End If


'Ergebnis prüfen
If dError < dTolerance Or iStepCount >= iStepLimit Then

    'Zeitmessung ende
    EndTime = Timer


    'Werte Ausgeben
    MySheet.Cells(5, 2) = P(0)
    MySheet.Cells(5, 3) = P(1)
    MySheet.Cells(5, 4) = P(2)
    MySheet.Cells(5, 6) = dError
    MySheet.Cells(5, 7) = iStep
    MySheet.Cells(5, 8) = iStepCount
    MySheet.Cells(5, 9) = Format(EndTime - StartTime, "0.0")
    
    'Schleife beenden
    Exit Do

End If

Loop

End Sub

'Distanz berechnen
Function GetR(P1() As Double, P2() As Double) As Double

GetR = Sqr(((P1(0) - P2(0))) ^ 2 + ((P1(1) - P2(1))) ^ 2 + ((P1(2) - P2(2))) ^ 2)

End Function

Function GetError() As Double

'Distanz berechnen
S1(4) = GetR(S1, P)
S2(4) = GetR(S2, P)
S3(4) = GetR(S3, P)

'Abweichung berechnen
S1(5) = S1(4) - S1(3)
S2(5) = S2(4) - S2(3)
S3(5) = S3(4) - S3(3)

'Gesamtabweichung berechnen
GetError = Abs(S1(5)) + Abs(S2(5)) + Abs(S3(5))

End Function
US-GPS.zip