Seite 1 von 1

Verschachtelte Funktion mit Listendaten berechnen?

Verfasst: Mittwoch 11. August 2021, 10:41
von raspPy
Hallo,

ich stehe gerade auf dem Schlauch und habe das Gefühl, dass ich den Wald vor lauter Bäumen nicht sehe. Ich hoffe, ihr könnt mir helfen?

Was ich berechnen will:
"N" ist eine Zahl aus einem Bereich von 50 bis 55. Ich möchte mit allen Zahlen aus diesem Intervall im Abstand 0.05 ("N_step") arbeiten. Dafür lasse ich eine Liste per for-schleife erstellen, die genau diese 100 Zahlen enthält. Dann möchte ich jedoch eine Berechnung mit jedem N durchführen, dann anschließend mit jedem neuen Wert(N) erneut eine Berechnung durchführen und dann anschließend mit einer definierten Funktion den Funktionswert an diesen vorher berechneten Stellen berechnen.

Leider komme ich nach dem erstellen der Liste "lst_N" nicht wirklich weiter, wie ich diese Verschachtelung machen kann. Habt ihr einen Tipp?

Mein Code:

Code: Alles auswählen

import math

N_start = 50.0
N_stop = 55.0
N_step = 0.05
digits = 5

A = 10.0
E = 50.0 

def frange(start, stop, step, digits):
     for i in range(int(stop/step)+1):
         yield round(i*step, digits)
# Liste zeigen
print(list(frange(N_start, N_stop, N_step, digits)))
# Liste speichern
lst_N = list(frange(N_start, N_stop, N_step, digits))

# Berechnung f_1 mit jedem N aus lst_N
f_1 = 0.5*(A+N)

# Berechnung F_1 mit jedem N aus lst_N
F_1 = sqrt(f_1)

# Berechnung des Funktionswert der Funktion "ergebnis" für jedes N:
def ergebnis(lst_N, E):
  ergebnis_f= A+E+F_1
  return ergebnis_f

Re: Verschachtelte Funktion mit Listendaten berechnen?

Verfasst: Mittwoch 11. August 2021, 11:01
von __deets__
Dein frange ist falsch. Die Anzahl der Schritte ist die Intervallgrösse durch Schrittweite. Du berechnest aber rechte Grenze durch Schrittweite, und das sind dann viel zu viele. Und den Start berücksichtigst du bei den Resultaten auch nicht. Such dir mal da draussen eine funktionierende frange, da gibt’s Rezepte oder was in numpy.

Re: Verschachtelte Funktion mit Listendaten berechnen?

Verfasst: Mittwoch 11. August 2021, 12:12
von einfachTobi
Ich gehe davon aus, dass das Beispiel hier stark abstrahiert ist. Deshalb würde ich direkt zu numpy raten. Damit erledigst du auch gleich den Rest in Windeseile und ohne Schleifen.

Re: Verschachtelte Funktion mit Listendaten berechnen?

Verfasst: Donnerstag 12. August 2021, 11:01
von raspPy
Hallo,
danke für eure Antworten. Ich habe es jetzt mit NumPy probiert und das klappt auch grundsätzlich ganz gut. Bleiben zwei Sachen, die ich bisher nicht gelöst bekommen habe:

- ich kann zwar die Ergebnisse einfach aus der Konsole rauskopieren, doch ich hätte gerne den print von ERGEBNIS als eine einzige Spalte und nicht gemischt als Zeilen und Spalten.

- Außerdem verstehe ich nicht warum trotz meines integers "Nst_int" meine N nicht genau in 0.05 Schritte gehen sondern nur gerundet so sind.

Würde mich freuen, wenn ihr mir da noch einen Tipp geben könntet. Hier der Code:

Code: Alles auswählen

import numpy as np

##Konstanten
A = 10.0
E = 50.0 

N_start = 50.0
N_end = 55.0
N_step = 0.05

## Array
Nst_int = int((N_end-N_start)/N_step)
print("Anzahl Schritte", Nst_int)
N=np.linspace(N_start, N_end, Nst_int)
print("Schritte", N)


# Berechnung f_1 mit jedem N aus array
f_1 = 0.5*(A+N)
print("f_1", f_1)

# Berechnung F_1 mit jedem N aus array
F_1 = f_1**2
print("F_1: ", F_1)

# Berechnung des Funktionswert der Funktion "ergebnis" für jedes N:
def ergebnis(N, E):
  ergebnis_f= A+E+F_1
  return ergebnis_f

ERGEBNIS=ergebnis(N, E)
                                
print("Ergebnis: ", ERGEBNIS)                                

Re: Verschachtelte Funktion mit Listendaten berechnen?

Verfasst: Donnerstag 12. August 2021, 13:17
von Sirius3
Was meinst Du mit gerundet?
Du solltest Dich mit dem Problem beschäftigen, wie viele Zaunpfähle Du brauchst, wenn Du einen 50 Meter langen Zaun bauen willst und alle 50cm einen Pfahl in die Erde setzen mußt.

Konstanten werden komplett groß geschrieben, Variablennamen komplett klein. Du hast da ein wildes Mischmasch.
`ergebnis` ist ein seltsamer Name für eine Funktion. Warum wird F_1 nicht als Argument übergeben?

Re: Verschachtelte Funktion mit Listendaten berechnen?

Verfasst: Donnerstag 12. August 2021, 15:51
von einfachTobi
Ich habe deinen Code nicht ausprobiert, aber bei numpy.linspace() gibt es tatsächlich eine Besonderheit. Die Funktion ist darauf ausgelegt _zwingend_ die korrekte Anzahl an Ergebnissen zu liefern. Dazu wird intern start + x * step gebildet. Es lässt sich aber nicht jede Zahl beliebig genau als float abbilden. Daher kann es durchaus zu kleinen Verschiebungen kommen. Details hier: https://stackoverflow.com/questions/649 ... t64-values