Flächenschwerpunkt berechnen

mit matplotlib, NumPy, pandas, SciPy, SymPy und weiteren mathematischen Programmbibliotheken.
Antworten
Halberhai
User
Beiträge: 3
Registriert: Mittwoch 23. November 2016, 18:56

Ich habe ein Program geschrieben, dass den Flächenschwerpunkt mit Hilfe von Trapezflächen bestimmt.
Allerdings bin ich nicht ganz glücklich über das Gesamtergebnis.
Bei einem einfachen Beispiel: Dreieck mit der Höhe 1 berechnet das Programm einen wert von 0.3466.. eigentlich sollten der Schwerpunkt bei 0.333.. liegen. Gibt es in Python eine andere Möglichkeit den Flächenschwerpunkt zu berechnen?
#### das Programm###############

Code: Alles auswählen

def Schwerpunkt_y(t,Sigma):
    dAxdY_liste=[];dA_Liste=[];
   
    for i in range(len(t)-1):
        #berechen den Flaecheninhalt eines Trapez
        dSigma=(Sigma[i+1]+Sigma[i])/2
        dZeit=(t[i+1]-t[i])
        dA=dSigma*dZeit
        #berechne den Schwerpunkt fuer jedes Trapez
        if Sigma[i+1]>=Sigma[i]:
            print 'Steigend'
            y=Sigma[i]/2+(Sigma[i+1]-Sigma[i])/3
        if Sigma[i+1]<Sigma[i]:
            print 'Fallend'
            y=Sigma[i+1]/2+(Sigma[i]-Sigma[i+1])/3    
        #bilde das Produkt aus dA und dY
        dAxdY_liste.append(y*dA)
        dA_Liste.append(dA)
    #berechne die Gesamtflaeche    
    A=sum(dA_Liste) 
    print A    
    Integral=sum(dAxdY_liste)
    #berechne den Schwerpunkt
    Ys=1/A*Integral   
    return(Ys)
Zuletzt geändert von Anonymous am Mittwoch 23. November 2016, 22:24, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Codebox-Tags gesetzt.
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

@Halberhai: wie sieht denn Dein Algorithmus aus, den Du hier versuchst umzusetzen? Was sind die Eingabewerte? Was bedeutet Zeit bei einem Flächeninhalt?
Halberhai
User
Beiträge: 3
Registriert: Mittwoch 23. November 2016, 18:56

Ich habe unterschiedliche Signale, bei denen ich den Höhenschwerpunkt bestimmen muss. ich dachte, dass ich das ganz gut mit einem Dreieckssignal überprüfen könnte.
So sehen meine Listen dazu aus:
Zeit=[0, 0.003, 0.006, 0.009, 0.012, 0.015, 0.018, 0.021, 0.024, 0.027, 0.03]
höhe=[ 0, 0.2 ,0.4, 0.6, 0.8, 1, 0.8, 0.6 ,0.4, 0.2, 0.00]
Ich versuche, die Fläche unter dem Höhenzug in kleine rechteckige Trapeze zu zerlegen, in diesem Fall wären es 10 Stück. Die Flächeninhalte bekommen ich gut hin allerdings den Flächenscherpunkt nicht so. Der Gesamtschwerpunkt bildet sich durch das Integral, des Produktes aus den infinitesimalen Flächen und den Einzelschwerpunkten, dividiert durch die Gesamtfläche.
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

@Halberhai: Rechtecke sind die einzigen rechteckigen Trapeze. Was Du wohl meinst, sind Rechtecke auf die man noch Dreiecke gesetzt hat. Das ist aber eigentlich auch egal, solange man das Integral von f(t)²/2 dt ausrechnet, hier halt Abschnittweise definiert als fᵢ(t) = hᵢ − (hᵢ₊₁ − hᵢ)∙(1 − (t−tᵢ) / (tᵢ₊₁ − tᵢ))

Code: Alles auswählen

def calculate_center_of_mass(t, h):
    area = 0
    weighted_area = 0
    points = zip(t, h)
    t1, h1 = next(points)
    for t2, h2 in points:
        area += (h2 + h1) * (t2 - t1) / 2
        weighted_area += (h2*h2 + h1*h2 + h1*h1) * (t2 - t1) / 6
        t1, h1 = t2, h2
    return weighted_area / area
Halberhai
User
Beiträge: 3
Registriert: Mittwoch 23. November 2016, 18:56

Bin erst jetzt wieder dazu gekommen, an dieser Baustelle weiter zu arbeiten.
Vielen Dank für deine Antwort. Ja, so geht es..
Antworten