Multiplikation von mathematischen Variablen -> 2x*3x = 6x^2

  • Hallo zusammen,

    ich würde gerne zwei mathematische Variablen folgendermaßen multiplizieren:

    Code
    Local $x = 2x
    Local $y = 3x
    
    
    $Ergebnis = $x*$y
    MsgBox(0, "", $Ergebnis)

    Als Ergebnis soll er mir für §Ergebnis den Wert 6x^2 (6x zum Quadrat) ausspucken.
    Geht das in Autoit bzw. kann mir jemand bitte einen Ansatz dazu nennen?

    Vielen Dank

    Grüße
    tobius

  • Wolfram Alpha?
    Wolfram Alpha!

  • Wenn du es bei diesem "simplen" Beispiel belässt, dann ist das einfach, aber willst du eine Mathe Parser schreiben, dann wird's richtig kompliziert.

    Gruß,
    UEZ

    Auch am Arsch geht ein Weg vorbei...

    ¯\_(ツ)_/¯

  • Wir hatten vor einiger Zeit mal mit Yacas zu tun.
    Das ist ein Kommandozeilenbasiertes CAS, welches u.A. per DLL verwendet werden kann.
    Die Dll findest du im Anhang (eventuell noch die msvcr120.dll und die msvcp120.dll besorgen).
    Die Lösung für deinen Fall wäre dann damit folgendermaßen machbar:

    Yacas in AutoIt
    [autoit]

    #region
    #AutoIt3Wrapper_UseX64=n ; Wichtig wenn man eine 32Bit-DLL nutzen will !!!
    #endregion

    [/autoit] [autoit][/autoit] [autoit]

    Global $h_DLLYacas = -1

    [/autoit] [autoit][/autoit] [autoit]

    yacas_init() ; Yacas starten

    [/autoit] [autoit][/autoit] [autoit]

    Local $x = "2*x"
    Local $y = "3*x"

    [/autoit] [autoit][/autoit] [autoit]

    yacas_eval("Simplify(" & $x & "*" & $y & ");") ; Gleichung vereinfachen
    MsgBox(0,"Ergebnis", yacas_result() & @CRLF) ; Ergebnis ausgeben

    [/autoit] [autoit][/autoit] [autoit]

    yacas_exit() ; Yacas wieder herunterfahren

    [/autoit] [autoit][/autoit] [autoit]

    Func yacas_init()
    ;by AspirinJunkie
    Dim $h_DLLYacas = DllOpen("yacasdll.dll")
    If @error Then Return SetError(1, @error, False)
    DllCall($h_DLLYacas, "none:cdecl", "yacas_init")
    If @error Then Return SetError(2, @error, False)
    Return True
    EndFunc ;==>yacas_init

    [/autoit] [autoit][/autoit] [autoit]

    Func yacas_eval(Const $s_String)
    ;by AspirinJunkie
    If $h_DLLYacas = -1 Then Return SetError(1, 0, False)
    DllCall($h_DLLYacas, "none:cdecl", "yacas_eval", "str", $s_String)
    If @error Then Return SetError(2, @error, False)
    Return True
    EndFunc ;==>yacas_eval

    [/autoit] [autoit][/autoit] [autoit]

    Func yacas_result()
    ;by AspirinJunkie
    If $h_DLLYacas = -1 Then Return SetError(1, 0, False)
    Local $a_Ret = DllCall($h_DLLYacas, "str:cdecl", "yacas_result")
    If @error Then Return SetError(2, @error, "")
    Return StringTrimRight($a_Ret[0], 1)
    EndFunc ;==>yacas_result

    [/autoit] [autoit][/autoit] [autoit]

    Func yacas_exit()
    ;by AspirinJunkie
    If $h_DLLYacas = -1 Then Return SetError(1, 0, False)
    DllCall($h_DLLYacas, "none:cdecl", "yacas_exit")
    DllClose($h_DLLYacas)
    EndFunc ;==>yacas_result

    [/autoit]
  • Die von AspirinJunkie eingestellte Yacas dll nutze ich auch sehr oft, z.B. zum Rechnen mit großen Zahlen. Mann kann die Verwendung mit AutoItSetOption ( "ExpandVarStrings",1) noch ein wenig vereinfachen, denn dann kann man ohne lästiges '&' die Variablen direkt z.B mit "$x$*$y$" nach Yacas senden.

    Besten Gruß

    P.S.: Yacas wir wieder weiter entwickelt, leider haben die neuen DLL eine andere Struktur mit der ich nicht klar komme, wäre das nicht ein Projekt für die Fachleute?