Python Wiederholungen vermeiden

Neue Frage »

Hammala Auf diesen Beitrag antworten »
Python Wiederholungen vermeiden
Hallo zusammen,
ich habe hier ein Python-Programm geschrieben, ich weiß, leider viel zu lesen!
Dieses sieht gekürzt so aus:
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
EckpuntUntenLinks = complex(-10, -10)
Seitenlaenge = 20
def EingabeFunktion(z):
    return sin(z)              

def AbleitungEingabeFunktion(z):
    return cos(z)

def Weg(t, xKoordinateStart, yKoordinateStart, xKoordinateZiel, yKoordinateZiel):
    return (1 - t) * (EckpunktUntenLinks + complex(xKoordinateStart, yKoordinateStart)) \
        + t * (EckpunktUntenLinks + complex(xKoordinateZiel, yKoordinateZiel))

def Integrand(NachdiffTerm , Weg):
    return (1 / (2 * pi * complex(0, 1))) * (AbleitungEingabeFunktion(Weg) * \
            NachdiffTerm / (EingabeFunktion(Weg)))
    
def Integrand3(t):
    return (1 / (2 * pi * complex(0, 1))) * (AbleitungEingabeFunktion( \
            Weg(t, Seitenlaenge, Seitenlaenge, 0, Seitenlaenge)) * complex(-Seitenlaenge, 0)) / \
            (EingabeFunktion(Weg(t, Seitenlaenge, Seitenlaenge, 0, Seitenlaenge)))
 
für
>print(Integrand(complex(-Seitenlaenge, 0), Weg(0.1237,complex(-10,-10), 20, 20, 0, 20)))
>print(Integrand3(0.12))

bekomme ich:
(3.183098872236349-8.003232113843971e-09j)
(3.1830988733028307-6.382383250324234e-09j)

Wieso bekomme ich zwei unterschiedliche Ergebnisse? Auch wenn nah aneinander?
Mit Integrand3 funktioniert mein Programm, aber wenn ich Integrand wähle, dann nicht mehr?
Vielen Dank!!!
HAL 9000 Auf diesen Beitrag antworten »

Was erwartest du? Wenn du mit Floating-Point rechnest, dann kann selbst bei ein- und derselben langen mathematischen Formel unterschiedliche Ergebnisse herauskommen, wenn du die Operanden in unterschiedlicher Reihenfolge auswertest.

Beim Imaginärteil deines Ergebnisses scheinen die Auslöschungseffekte besonders stark zuzuschlagen - da kommt wohl in Wahrheit 0j heraus.
 
 
Hammala Auf diesen Beitrag antworten »

ok, dann ist das nicht der Fehler, ich würde gern in meinem Programm statt Integrand3 die Integrand Funktion benutzen, aber es funktioniert iwie nicht. Das ganze Programm hab ich jetzt hochgeladen. Ich habe auch Integrand1, Integrand2 und Integrand4 Funktionen und ich
würde gern die Wiederholungen raushaben und nur eine Integrand-Funktion benutzen.
Ich habe tagelang nach dem Fehler gesucht, aber nicht gefunden! Also mir gehts nur um die Vermeidung der Wiederholungen der Integrand1, etc. Funktionen.
Steffen Bühler Auf diesen Beitrag antworten »

Wenn Du partout nur eine Integrandfunktion haben willst, pack halt eine Modusvariable ins Argument. Also Integrand(t,0), die dann Integrand1(t) aufruft, Integrand(t,1), die dann Integrand2(t) aufruft, und so weiter.

Viele Grüße
Steffen
Hammala Auf diesen Beitrag antworten »

danke,

aber dann hängen eben die Wiederholungen in einer Funktion, bei dir Integrand(t,i) drin.
Am Besten wäre überhaupt keine Wiederholungen, ich dachte an die Integrand(NachdiffTerm, Weg) von oben im Code, funktioniert aber nicht
Neue Frage »
Antworten »



Verwandte Themen

Die Beliebtesten »
Die Größten »
Die Neuesten »