1. Dashboard
  2. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team
    4. Mitgliedersuche
  3. Forenregeln
  4. Forum
    1. Unerledigte Themen
  • Anmelden
  • Registrieren
  • Suche
Alles
  • Alles
  • Artikel
  • Seiten
  • Forum
  • Erweiterte Suche
  1. AutoIt.de - Das deutschsprachige Forum.
  2. Mitglieder
  3. nuts

Beiträge von nuts

  • Unicalc Grafik - 3.0.0.3

    • nuts
    • 13. Januar 2010 um 20:22

    http://de.wikipedia.org/wiki/Numerische_Mathematik

    Bist mitgekommen würde ich sagen. ;)

    edit \ Hab die Nullstellen mal etwas ausgearbeitet. Bei den Rückgabewerten habe ich etwas gepfuscht :D

    Spoiler anzeigen
    [autoit]


    #include <Array.au3>
    HotKeySet("{ESC}", "Terminate") ; press ESC to emergency-exit

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

    Global $expression = InputBox("Enter Function", "E.g. x^2-16", "x^2-16") ; make sure you use * to multiply
    If @error Then Exit
    ; auf die Konforme Funktionsübergabe kann man ja in Unicalc selbst achten
    ; Y=0 in die eingegeben Funktion von Unicalc einsetzen und übergeben

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

    $array =_ReturnZero($expression, -10, 10)
    _ArrayDisplay($array, "X- Werte der Nullstellen")

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

    Func Terminate()
    Exit
    EndFunc ;==>Terminate

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

    Func _ReturnZero($expr, $startpoint, $endpoint, $dez = 0.01)
    ;expr: Funktion
    ;§leftbound = Linke Grenze
    ;$rightbound = Rechte Grenze
    ;$dez = Suchintervall -> je kleiner je mehr loops werden benötigt -> Risiko 2er Nullstellen im Intervall wird jedoch verkleinert
    ;return: Array mit den x-Werten der Nullstellen im angegebenen Bereich
    ;@error; Kein Treffer im angegebenen Bereich
    Local $calc, $temp, $match = "", $asplit, $sreturn
    For $x = $startpoint To $endpoint Step $dez
    $calc = Execute(StringReplace($expr, "x", $x))
    If $calc > 0 And $temp < 0 Then
    $match &= String($x) & "|"
    $temp = $calc
    ElseIf $calc < 0 And $temp > 0 Then
    $match &= String($x) & "|"
    $temp = $calc
    Else
    $temp = $calc
    EndIf
    Next
    If $match = "" Then Return SetError(0)
    $asplit = StringSplit($match, "|")
    _ArrayDisplay($asplit, "Return Guess") ;zum überprüfen
    Local $areturn[$asplit[0]-1]
    For $i = 1 To $asplit[0] - 1
    $t = _CalcZero($expression, $asplit[$i])
    if not @error then $areturn[$i-1] = $t
    Next
    Return $areturn
    EndFunc ;==>_Check

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

    Func _CalcZero($expr, $guess)
    Local $x_guesses_array[2] ; Zum Vergleich der Ergebnisse, bei entsprechender Genauigkeit wird abgebrochen
    Local $x_guess = Number($guess)
    Local $c = 0
    local $zero
    While 1
    $x_guess = $x_guess - (_Fx($expression, $x_guess) / _SlopeOfTangent($expression, $x_guess)) ;Newton
    $c += 1
    If IsInt($c / 1000) And Not IsInt($c / 2000) Then
    $x_guesses_array[0] = $x_guess
    $x_guesses_array[1] = 0
    EndIf
    If IsInt($c / 2000) Then
    ;Genauigkeit des Ergebnis wird überprüft (alle 2000 loops)
    $x_guesses_array[1] = $x_guess
    If Abs($x_guesses_array[1] - $x_guesses_array[0]) < 0.001 Then ExitLoop
    EndIf
    If $c >= 10000 Then
    $zero=_CheckZeroZero($expr)
    if $zero then
    Return 0 ;geht durch 0|0
    else
    Return SetError(0) ;kein match
    endif
    EndIf
    WEnd
    Return $x_guess
    EndFunc ;==>_CalcZero

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

    Func _SlopeOfTangent($expr, $at_point, $var = "x", $places = 4)
    Local $dx = 0.00000001
    Local $x = $at_point
    Local $y = $x + $dx
    Local $slope = Execute(StringReplace($expr, $var, "$y")) - Execute(StringReplace($expr, $var, "$x"))
    Return Round($slope / $dx, $places)
    EndFunc ;==>_SlopeOfTangent

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

    Func _Fx($expr, $at_point)
    Return Execute(StringReplace($expr, "x", "$at_point"))
    EndFunc ;==>_Fx

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

    func _CheckZeroZero($expr)
    if Execute(StringReplace($expr, "x", 0)) = 0 then
    Return true
    else
    Return false
    endif
    endfunc

    [/autoit]
  • Unicalc Grafik - 3.0.0.3

    • nuts
    • 13. Januar 2010 um 18:25

    Klaro, den Bereich muss man definieren.

    z.B. man vermutet eine Nullstelle irgendwo x >0 und schickt das Skript 1000 "Einheiten" nach "rechts"
    -> Nullstelle gefunden (y|x)
    oder
    -> keine Nullstelle gefunden - Suchbereich erweitern?

    Numerische Lösungsmethoden waren bei uns in der Schule manchmal die Einleitung ins Thema.

  • Unicalc Grafik - 3.0.0.3

    • nuts
    • 13. Januar 2010 um 18:11

    Nee genau so sehe ich das auch.

    Druck aufbauen möchte ich natürlich nicht. Kannst auch warten bis ihr das Thema in Mathe durchgenommen habt und dann entscheiden ob du es einbauen willst.

    edit \ Ich meinte, dass die möglichen Funktionen in Unicalc auch Nullstellen/Extremstellen außerhalb des Plottingbereichs haben können (im Bereich +/- unendlich).

  • Unicalc Grafik - 3.0.0.3

    • nuts
    • 13. Januar 2010 um 17:53

    Naja der Definitonsbereich liegt bei +/- unendlich :D
    Die X-Achse nach Vorzeichenwechsel abzuklappern ist aber trotzdem eine gute Idee, gerade bei Nullstellen, die sich nicht innerhalb der Grafik befinden.

    Hoch- / Tiefpunkte schau ich mal übers WE.
    Wendepunkte ähm naja wenns es da keine geniale Vereinfachung gibts brauchen wir dazu nen Profi - UEZ oder Andy würde ich das zutrauen 8)

  • PC Gehäuse-Lüfter

    • nuts
    • 13. Januar 2010 um 16:25
    Zitat von Oscar

    nuts: Scythe-Lüfter hatte/habe ich ja auch in meinem Rechner und die sind ja auch schön leise (anfangs). Wie sieht das bei Dir mit der Lebensdauer aus? Wie lange laufen die schon?


    Schon über 1 Jahr, sind leise wie am ersten Tag.
    Die Serienstreuung ist bei Scythe wohl ein Problem, hattest du auch die S-Flex verbaut?

  • PC Gehäuse-Lüfter

    • nuts
    • 13. Januar 2010 um 16:08

    Im Heimkino PC (sehr hoher Silent-Anspruch) verwende ich Noctua-Lüfter http://geizhals.at/deutschland/?cat=coolfan&xf=1034_Noctua, um genau zusein die NF-S12 1200 @5V (ca. 650 upm).
    Im Büro-PC sind Scythe S-flex verbaut: http://geizhals.at/deutschland/a187161.html

    Bin mit beiden Modellen zufrieden, vorallem die Noctua sind sehr hochwertig.

  • Neuer PC (gelöst)

    • nuts
    • 13. Januar 2010 um 15:07

    Für den Selbstbau wäre vielleicht eine kleine ITX Schachtel interessant:
    http://geizhals.at/deutschland/a495899.html
    http://geizhals.at/deutschland/?cat=cpu1156&xf=1133_Core+i3

    Gibts vielleicht auch bald fertige Systeme dazu.
    Diese Kombi's sollten auf jeden Fall super leise zu kühlen sein.

  • Toolbar - Button "Ausschneiden"

    • nuts
    • 13. Januar 2010 um 14:52

    Einfach einen Dummy-Button ganz links einfügen ist deine Lösung oder wie?
    Normalerweise ist das nämlich nicht nötig.

    edit \ Ah der Buttonsep wars. :D

  • Toolbar - Button "Ausschneiden"

    • nuts
    • 13. Januar 2010 um 14:44

    Versuchs mal so:

    [autoit]

    If BitAND(_GUICtrlToolbar_GetButtonState($hToolbar, $DeinButton), $TBSTATE_PRESSED) = $TBSTATE_PRESSED Then

    [/autoit]
  • AutoIt-Skript in C++

    • nuts
    • 13. Januar 2010 um 14:25

    Schau mal hier rein: Autoit Frage

  • Unicalc Grafik - 3.0.0.3

    • nuts
    • 12. Januar 2010 um 22:19

    Klar es wird nur die lokale Nullstelle berechnet.
    Für diese Unzulänglichkeit müsste sich dein Rechner nicht schämen, denn mein grafischer Taschenrechner (TI-83 Plus) kann auch nicht mehr ;)

    Eine Kurvendiskussion die automatisch alle interessanten Punkte ohne näheres eingrenzen bestimmt wird sehr sehr schwer (s. Theorie zu den Extremstellen).

  • Prob mit Array in einer For-Schleife und GUIGetMsg()

    • nuts
    • 12. Januar 2010 um 22:11
    Spoiler anzeigen
    [autoit]


    #cs ----------------------------------------------------------------------------

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

    AutoIt Version: 3.3.2.0
    Author: Karill Endusa

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

    Script Function:
    a script

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

    #ce ----------------------------------------------------------------------------

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

    ; Script Start - Add your code below here

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

    ;[includes]
    #include <GUIConstantsEx.au3>
    #include <TreeViewConstants.au3>
    #include <WindowsConstants.au3>
    #include <GuiStatusBar.au3>
    #include <GuiTreeView.au3>
    #include <Array.au3>
    ;----------------------------------------Variables-------------------------Start
    Global $TV[5][6]
    Global $CM_TV[5]
    Global $CMI_TV[25]
    ;----------------------------------------Variables---------------------------End

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

    ;----------------------------------------GUI-------------------------------Start
    $GUI_mainWindow = GUICreate("Any GUI", 1000, 750, -1, -1)

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

    ;------Menu------Start
    $M_datei = GUICtrlCreateMenu("Datei")
    $MI_beenden = GUICtrlCreateMenuItem("Beenden", $M_datei)
    ;------Menu--------End

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

    ;-----ListView---Start
    GUICtrlCreateGroup("Kunden", 5, 0, 160, 330)
    $TreeView = GUICtrlCreateTreeView(10, 20, 150, 300, BitOR($TVS_HASBUTTONS,$TVS_HASLINES,$TVS_LINESATROOT,$TVS_DISABLEDRAGDROP,$TVS_SHOWSELALWAYS,$WS_GROUP,$WS_TABSTOP,$WS_HSCROLL,$WS_VSCROLL,$WS_BORDER))
    $hTreeView = GUICtrlGetHandle($TreeView)

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

    For $i = 0 To 4
    $TV[$i][0] = GUICtrlCreateTreeViewItem("Ordner 1_"&$i, $TreeView)
    For $x = 1 To 5
    $TV[$i][$x] = GUICtrlCreateTreeViewItem("User "&$x&", Ordner "&$i, $TV[$i][0])
    Next
    Next
    ;-----ListView-----End
    global $counter = 0
    ;-----LVMenu-----Start
    For $i = 0 To 4
    For $x = 1 To 5
    $CM_TV[$i] = GUICtrlCreateContextMenu($TV[$i][$x])
    $CMI_TV[$counter] = GUICtrlCreateMenuItem("Detailansicht", $CM_TV[$i])
    $counter +=1
    Next
    Next
    ;-----LVMenu-------End

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

    ;-----StatusBar--Start
    $StatusBar1 = _GUICtrlStatusBar_Create($GUI_mainWindow)
    _GUICtrlStatusBar_SetSimple($StatusBar1)
    _GUICtrlStatusBar_SetText($StatusBar1, "Any StatusBar text")
    _GUICtrlStatusBar_SetMinHeight($StatusBar1, 20)
    ;-----StatusBar----End

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

    GUISetState(@SW_SHOW, $GUI_mainWindow)
    ;//TODO
    $GUI_detailWindow = GUICreate("Detailansicht", 750, 500, -1, -1)
    GUISetState(@SW_HIDE, $GUI_detailWindow)
    ;GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")
    ;GUIRegisterMsg($WM_COMMAND, "WM_COMMAND")
    ;----------------------------------------GUI---------------------------------End

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

    ;----------------------------------------Script----------------------------Start
    While 1 * Sleep(10)
    $nMsg = GUIGetMsg(1)
    Switch $nMsg[0]
    Case $GUI_EVENT_CLOSE
    If $nMsg[1] = $GUI_mainWindow Then
    Exit
    ElseIf $nMsg[1] = $GUI_detailWindow Then
    GUISetState(@SW_HIDE, $GUI_detailWindow)
    EndIf
    Case $MI_beenden
    Exit
    case $CMI_TV[0] to $CMI_TV[24]
    ConsoleWrite(_GUICtrlTreeView_GetText ($hTreeView,_GUICtrlTreeView_GetSelection($hTreeView)) & @CRLF)
    EndSwitch
    WEnd

    [/autoit]


    Eine Möglichkeit.
    Wollte eigentlich was cooles mit WM_Notify präsentieren, hat aber auf die schnelle nicht geklappt :rofl:
    Vielleicht morgen dann :whistling:

  • Prob mit Array in einer For-Schleife und GUIGetMsg()

    • nuts
    • 12. Januar 2010 um 21:36

    Nur damit ichs verstanden habe:
    Du willst einen Klick (oder Doppelklick) auf ein Treeview oder ein Treeviewitem abfangen und den Text des Items übergeben?
    Dabei ist die ID des Controls unbekannt (da dynamisch erstellt)?

  • Unicalc Grafik - 3.0.0.3

    • nuts
    • 12. Januar 2010 um 19:05

    Hab was im Archiv gefunden (ist nicht von mir).

    Spoiler anzeigen
    [autoit]


    ; Utilty that utilizes Newton's method to find solutions to equations
    ; See http://en.wikipedia.org/wiki/Newton%27s_method for an explanation of the math.
    ; by Diego Hernandez < d (dot) hernandez 0 9 at g mail >

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

    #include <Array.au3>
    #include <String.au3>

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

    HotKeySet ("{ESC}", "Terminate") ; press ESC to emergency-exit

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

    Local $expression = InputBox ("Enter equation", "E.g. x^2=16", "x^2=16") ; make sure you use * to multiply
    If @error Then Exit

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

    $expression = "&" & $expression & "&"
    $right_side = _StringBetween ($expression, "=", "&")
    $left_side = _StringBetween ($expression, "&", "=")
    $expression = $left_side[0] & " - (" & $right_side[0] & ")" ; one side of the equation is now 0; now apply Newton's method.

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

    Local $x_guesses_array[2] ; every 2000 iterations (this is more than enough in many cases) the program will compare
    ; the values for the root and if it has converged enough, it will display the answer in a MsgBox.
    $x_guess = Number(InputBox ("Enter approximation for root", "Enter a guess reasonably close to the root so Newton's method can converge properly. Thank you!","1"))
    ; The program will find the root closest to your initial guess. If it is complex, it will enter into an infinite cycle.
    $c = 0

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

    While 1
    $x_guess = $x_guess - (_Fx($expression, $x_guess)/_SlopeOfTangent($expression, $x_guess))
    ; see http://en.wikipedia.org/wiki/Newton%27s_method for an explanation of the math behind Newton's method
    $c +=1
    If IsInt ($c/1000) = 1 and IsInt ($c/2000) = 0 Then
    $x_guesses_array[0] = $x_guess
    $x_guesses_array[1] = 0
    EndIf
    If IsInt ($c/2000) Then
    ; every 2000 iterations, the program will compare its current x value with the x-value stored from the previous 1000th iteration.
    ; if they are close enough, the root has been sufficiently determined. It will ExitLoop and display the root.
    $x_guesses_array[1] = $x_guess
    ; _ArrayDisplay ($x_guesses_array)
    If Abs($x_guesses_array[1] - $x_guesses_array[0]) < 0.001 Then ExitLoop
    EndIf
    If $c >= 10000 Then
    MsgBox (0, "Message", "You have reached a complex root or other weird occurrence. Please try again with a different initial guess. Thank you!")
    Exit ; I have tried to make it user-friendly
    EndIf
    WEnd

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

    MsgBox (0, "Solution", Round($x_guess, 4))

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

    Func Terminate ()
    Exit
    EndFunc

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

    Func _SlopeOfTangent($expr, $at_point, $var = "x", $places=4)
    Local $dx = 0.00000001
    Local $x = $at_point
    Local $y = $x + $dx
    Local $slope = Execute(StringReplace($expr,$var,"$y")) - Execute(StringReplace($expr,$var,"$x"))
    Return Round($slope/$dx,$places)
    EndFunc ;_SlopeOfTangent()==>

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

    Func _Fx ($expr, $at_point)
    Return Execute (StringReplace($expr, "x", "$at_point"))
    EndFunc

    [/autoit]


    Das Newtonverfahren zum Annähern der lokalen Nullstelle.

  • Prospeed-Tutorial?

    • nuts
    • 12. Januar 2010 um 18:53

    Ist doch eine gute Idee und wird sicherlich viele interessieren. :thumbup:

  • Unicalc Grafik - 3.0.0.3

    • nuts
    • 12. Januar 2010 um 17:23

    Oha sehe gerade dein Geburtsdatum. Wahnsinns Skript für dein Alter. :thumbup:

    Bei der Kurvendiskussion (so wurde das bei uns in der Schule genannt) geht es ähm (lang lang ists her) um bestimmte Punkte der Gleichung.
    z.B.
    Nullstellen (y = x hat die Nullstelle 0:0)
    Hochpunkte (y=x^2 hat den Tiefpunkt 0:0)
    Wendepunkt (y=x^3 hat den Wendepunkt 0:0)
    usw.
    Ist mathematsich eigentlich relativ einfach, in Code zu fassen schon schwerer.
    Gibt dir aber ein Riesenvorsprung für die Oberstufe :thumbup:

    Kann dir ja mal ein Beispiel dazu machen.

  • Unicalc Grafik - 3.0.0.3

    • nuts
    • 12. Januar 2010 um 16:58

    Kleiner Fehler: Beim Rauszoomen (Mapeinheit cm) überschneiden sich die Bezeichnungen auf der X-Achse.
    Vielleicht sollte die Maßeinheit auch nicht direkt bei der "Zahl" stehen.

    Ansonsten wirklich toll gemacht! :thumbup:

    edit \ Funktionen zur Kurvendiskussion (Nullstellen, Hoch- Tiefpunkte usw.) gibts noch nicht oder?

  • [beendet] µit Light Januar 2010

    • nuts
    • 12. Januar 2010 um 16:46

    Wo ist da der Unterschied? :D
    Ich habe die Aufgabe wie in Unicalc umgesetzt verstanden.

  • [beendet] µit Light Januar 2010

    • nuts
    • 12. Januar 2010 um 16:35

    Motiviert hats mich auf jeden Fall nicht :P
    Unicalc ist schon wirklich super gemacht.

  • Datenbank import automatisieren

    • nuts
    • 11. Januar 2010 um 21:58

    Genau und dann schnappst (z.B. mit Stringsplit) du dir alles hinter dem ":" bis in einer Zeile steht "Aktuelle Gerätezähler-Information:".
    Danach wird das Trennzeichen/Suchzeichen von ":" in "=" geändert.

Spenden

Jeder Euro hilft uns, Euch zu helfen.

Download

AutoIt Tutorial
AutoIt Buch
Onlinehilfe
AutoIt Entwickler
  1. Datenschutzerklärung
  2. Impressum
  3. Shoutbox-Archiv
Community-Software: WoltLab Suite™