Die Mathe-Redaktion - 14.12.2019 09:01 - Registrieren/Login
Auswahl
ListenpunktHome
ListenpunktAktuell und Interessant ai
ListenpunktArtikelübersicht/-suche
ListenpunktAlle Links / Mathe-Links
ListenpunktFach- & Sachbücher
ListenpunktMitglieder / Karte / Top 15
ListenpunktRegistrieren/Login
ListenpunktArbeitsgruppen
Listenpunkt? im neuen Schwätz
ListenpunktWerde Mathe-Millionär!
ListenpunktFormeleditor fedgeo
Schwarzes Brett
Aktion im Forum
Suche
Stichwortsuche in Artikeln und Links von Matheplanet
Suchen im Forum
Suchtipps

Bücher
Englische Bücher
Software
Suchbegriffe:
Mathematik bei amazon
Naturwissenschaft & Technik
In Partnerschaft mit Amazon.de
Kontakt
Mail an Matroid
[Keine Übungsaufgaben!]
Impressum

Bitte beachten Sie unsere Nutzungsbedingungen, die Distanzierung, unsere Datenschutzerklärung und
die Forumregeln.

Sie können Mitglied werden. Mitglieder können den Matheplanet-Newsletter bestellen, der etwa alle 2 Monate erscheint.

Der Newsletter Okt. 2017

Für Mitglieder
Mathematisch für Anfänger
Wer ist Online
Aktuell sind 394 Gäste und 8 Mitglieder online.

Sie können Mitglied werden:
Klick hier.

Über Matheplanet
 

Antworte auf:  Python: Wolfe-Powell-Regel von lissy1234567
Forum:  Programmieren, moderiert von: matph

[Zur Forum-Gliederung] [Wie man Fragen beantwortet]

  Alle registrierten Mitglieder können Mitteilungen schreiben.
Benutzername:
Passwort:
Nachricht-Icon:                     
                    
                  
Nachricht:


 

Erledigt J


Eingabehilfen (JavaScript): [Link extern intern] [MathML?] [$$?]
[fed-Bereich] [LaTeX-inline] [LaTeX-display] [Tikz] [hide-Bereich][show-Bereich] [Quelltext [num.]][?]
 Zeige Vorschau      Schreibe im fedgeoFormeleditor oder mit Latex.

Wähle Smilies für Deine Nachricht: :-) :-( :-D ;-) :-0 8-) :-? :-P :-|
Optionen: Deaktiviere HTML in dieser Nachricht
Deaktiviere MATHML in dieser Nachricht. Wenn Dein Text $-Zeichen enthält, die nicht LaTeX-Formeln begrenzen.
Deaktiviere Smilies in dieser Nachricht
Zeige die Signatur (Kann in 'Mein Profil' editiert werden.)
    [Abbrechen]
 
Beachte bitte die [Forumregeln]


Themenübersicht
lissy1234567
Aktiv
Dabei seit: 01.09.2017
Mitteilungen: 423
Herkunft:
 Beitrag No.2, eingetragen 2019-05-30 11:34    [Diesen Beitrag zitieren]

Hallo,

ich hatte den Fehler bereits gefunden, trotzdem danke:)


rlk
Senior
Dabei seit: 16.03.2007
Mitteilungen: 10602
Herkunft: Wien
 Beitrag No.1, eingetragen 2019-05-22 09:09    [Diesen Beitrag zitieren]

Hallo lissy1234567,
hast Du aus Versehen abgehakt oder hast Du den Fehler schon gefunden?

Du kannst in den drei while-Schleifen Ausgaben einbauen um festzustellen, in welcher das Programm hängen bleibt.

In all diesen Schleifen werden AblPhi und rhoPhi verglichen, Du berechnest diese beiden Größen am Anfang, aber zumindest AblPhi sollte von alfa abhängen.

Ich hoffe, das hilft Dir,
Roland


lissy1234567
Aktiv
Dabei seit: 01.09.2017
Mitteilungen: 423
Herkunft:
 Themenstart: 2019-05-21 12:20    [Diesen Beitrag zitieren]

Hallo zusammen,

um die Wolfe-Powell-Regel im Gradientenverfahren nutzen zu können, versuche ich gerade dafür eine Funktion zu schreiben (vorgegebener Rahmen der Uni). Mein Programm bleibt aber irgendwo in einer Schleife haengen und ich komme zu keinem Ergebnis sozusagen.
Könnt ihr mir helfen? Der Code ist mit dem Wing-Editor geschrieben und ich bin absolute Anfaengerin, muss das aber bald abgeben :)
Python
def  wolfe_powell ( f,g, xo,dx, fo,go, gamma=0.4,rho=0.6 ) :
    '''
    #
    #  f:   die zu minimierende Funktion;
    #  g:   Gradient der zu minimierenden Funktion;
    #  xo:  Startpunkt der approximierten Abstiegs-Liniensuche;
    #  dx:  Abstiegsrichtung;
    #  fo:  Funktionswert an der Stelle xo = fh(xo);
    #  go:  Gradient an der Stelle xo;
    #  gamma:  Wolfe-Powell-Parameter;
    #  beta:   Wolfe-Powell-Parameter;
    #
    #  xn,fn,gn: Neue Iterierte, ihr Funktionswert und Gradient;
    #  alfa:   xn = xo + alfa*dx ;
    #  term:  Zaehler der Funktions- und Gradientenauswertungen in wolfe_powell.
    #
    '''
    if  ( fo == None ) :
        fo = f ( xo )
    if  ( go == None ) :
        go = g ( xo )
    alfa = np.nan
    term = -1
    #
    if  ( ( gamma <= 0.0 ) or ( 0.5 <= gamma ) ) :
        print ( 'wolfe-powell:  gamma nicht in (0.0,0.5) !' )
        return ( xo,fo,go,alfa,term )
    if  ( ( gamma > rho ) or ( rho >= 1.0 ) ) :
        print ( 'wolfe-powell:  rho nicht in [gamma,1.0) !' )
        return ( xo,fo,go,alfa,term )
    c = go.dot ( dx )
    if  ( c >= 0.0 ) :
        print ( 'wolfe-powell:  dx ist keine Abstiegsrichtung!' )
        return ( xo,fo,go,alfa,term )
 
    # benoetigen wir spaeter
    dx = -go
    Grad = np.dot(go, dx)
    alfa = 1
    xn = xo + alfa*dx    
    phi = lambda alfa: f(xn)
    GradPhi = np.gradient(phi(alfa))
    AblPhi = np.dot(GradPhi,dx)
    rhoPhi = rho*Grad
    xi = lambda alfa: phi(alfa) - fo - gamma*alfa*Grad
# Schrittweiten-Regel nach Wolfe-Powell (Algorithmus 3.3)
    # erstes IF
    if xi(alfa) <= 0:
        # zweites IF
        if AblPhi >= rhoPhi:
            return(alfa)
        # zweites ELSE
        else:
            a = alfa
            # WHILE in ELSE
            while xi(alfa) <= 0:
                alfa = 2*alfa
            # Ende WHILE
            b = a
    # erstes ELSE
    else:
        b = alfa
        # WHILE in ELSE
        while xi(alfa) > 0 or AblPhi >= rhoPhi:
            alfa = 0.5*alfa
        # Ende WHILE
        a = alfa
    # Ende erste Schleife
    alfa = (a+b)/2
    # WHILE
    while xi(alfa) > 0 or AblPhi < rhoPhi:
        # drittes IF
        if xi(alfa) > 0:
            b = alfa
        # drittes ELSE
        else:
            a = alfa
        # Ende zweite Schleife
        alfa = (a+b)/2
 
    term += 1
    # Wolfe-Powell-Regel: Ende, dh Schrittweite gefunden
    xn = xo + alfa*dx
    # Funktionswert und Gradient der neuen Iterierten
    fn = fh(xn)
    gn = gh(xn)
    return ( xn,fn,gn,alfa,term )


 
All logos and trademarks in this site are property of their respective owner. The comments are property of their posters, all the rest © 2001-2019 by Matroids Matheplanet
This web site was made with PHP-Nuke, a web portal system written in PHP. PHP-Nuke is Free Software released under the GNU/GPL license.
Ich distanziere mich von rechtswidrigen oder anstößigen Inhalten, die sich trotz aufmerksamer Prüfung hinter hier verwendeten Links verbergen mögen.
Lesen Sie die Nutzungsbedingungen, die Distanzierung, die Datenschutzerklärung und das Impressum.
[Seitenanfang]