2 Stimmen

Gleichung zur Lösung für x

Ich habe die folgende Gleichung in einem String

y = 18774x + 82795

Beim Lösen für x würde ich Folgendes tun:-

x = (y-82795) / 18774

Ich kenne den Wert von y

Die Gleichung ändert sich jedoch ständig und ist immer in einem String-Format

Ist es möglich, die ursprüngliche Gleichung einfach in eine Evaluate-Anweisung zu werfen und automatisch nach x zu lösen?

Ich weiß, dass ich Dinge wie diese tun kann:-

MsgBox Evaluate("5*(8+3)-2*(3*5)")

aber in meinem Fall wäre es

MsgBox Evaluate("67657657 = 18774x + 82795") 

wo y = 67657657

Dies wirft offensichtlich einen Fehler. Gibt es einen einfachen Weg, wie ich nach x auflösen kann?

Ansonsten müsste ich den String analysieren und es etwas manueller herausfinden

2voto

John Alexiou Punkte 25680

Versuchen Sie dies:

Public Function SolveEquation(ByVal eq As String) As Double
    Dim i_eq As Integer, y As Double
    ' eq : "67657657 = 18774x+82795"
    i_eq = InStr(1, eq, "=")
    y = 0#
    If i_eq > 0 Then
        y = Anwendung.Evaluiere(Trim(Left(eq, i_eq - 1)))
        'y =67657657
        eq = Trim(Mid(eq, i_eq + 1))
    End If

    Dim eq_1 As String, eq_2 As String
    Dim x_1 As Double, x_2 As Double
    Dim y_1 As Double, y_2 As Double
    x_1 = 0#: x_2 = 1#
    eq_1 = Ersetzen(eq, "x", "*(" & Str(x_1) & ")")
    y_1 = Anwendung.Evaluiere(eq_1)
    eq_2 = Ersetzen(eq, "x", "*(" & Str(x_2) & ")")
    y_2 = Anwendung.Evaluiere(eq_2)
    ' y_1 = 82795, y_2 = 101569

    ' Alternative Lösung aus Auswertungspunkten
    ' SolveEquation = x_1 + (x_2-x_1)/(y_2-y_1)*(y-y_1)

    ' y = a*x+b
    Dim a As Double, b As Double
    a = (y_2 - y_1) / (x_2 - x_1)
    b = y_1 - a * x_1
    ' a= 18774, b = 82795

    ' Lösung aus linearer Form y = a*x+b
    SolveEquation  = (y - b) / a
    ' 3599.38542665388

End Function

1voto

Gary's Student Punkte 95642

Im A1 platzieren Sie den String:

y = 18774x + 82795

Im A2 platzieren Sie den y-Wert:

67657657

Versuchen Sie dann dieses Makro:

Sub Zolver()
    Dim sTra As String, X As Double
    Dim A As Double, B As Double, Y As Double
    sTra = Range("A1").Value
    sTra = Replace(sTra, " ", "")
    sTra = Replace(sTra, "x", "")
    sTra = Replace(sTra, "y=", "")
    sTra = Replace(sTra, "+", ",")
    A = CDbl(Split(sTra, ",")(0))
    B = CDbl(Split(sTra, ",")(1))
    Y = CDbl(Range("A2").Value)
    X = (Y - B) / A
    MsgBox X
End Sub

0voto

brettdj Punkte 53619

Angenommen, Sie lösen eine lineare Gleichung:

Sub Extract()
Dim strFunc As String
Dim X(1 To 2) As Variant
Dim Y(1 To 2) As Variant
Dim C As Variant
X(1) = 0
X(2) = 100
strFunc = "18774x + 82795"
Y(1) = Evaluate(Replace(LCase$(strFunc), "x", X(1)))
Y(2) = Evaluate(Replace(LCase$(strFunc), "x", X(2)))
C = Application.WorksheetFunction.LinEst(Y, X)
MsgBox "K is " & C(1) & vbNewLine & "M is " & C(2)
End Sub

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X