Guten Morgen,
das ist mir heute morgen auch eingefallen das ich das Problem wahrscheinlich zu ungenau beschrieben habe.
gkuhl hat geschrieben:Geht es noch immer um
dieses Problem?
Ich habe so ein bisschen das Gefühl, dass du NumPy-Arrays benutzt um Excel-Tabellen abzubilden. Spalten kopieren, löschen, einfügen, etc. Dafür sind NumPy-Arrays aber eher ungeeignet, da unter anderem der Datentyp fix ist. Vom physikalischen Standpunkt aus, sollten die Objekte im Array zusätzlich immer die gleiche physikalische Größe beschreiben. Also niemals z.B. Zeit und Kraft in einen Array packen. Was sind denn "l1", "l2", "ecz", "x1" und "x2" für Objekte und wofür stehen sie?
Grüße
Gerrit
Ja genau, das ist für das Modul, jedoch bin ich da jetzt ein Stück weiter. Mein Fehler vielleicht hätte ich besser da weiter schreiben sollen.
Also das Modul berechnet die Schnittkräfte für einen 1-Feld, 2-Feld sowie 3-Feld Träger. Man bekommt dadurch dann die Momente, Querkraft, den Verdrehungswinkel phi, und die Durchbiegung des Trägers. Das Verfahren was dahinter steckt ist ein Mix aus Reduktionsverfahren der Übertragungsmatrizen und dem Weggrößenverfahren. Das ganze benötige ich um eine "Bemessungshilfe für eine Spannbetondurchlaufträger" zu erstellen und die Module die da nachkommen sind auf die Rückgabewerte des Moduls angewiesen.
Der Benutzer kann sich bei der Eingabe entscheiden, wie viel Träger er hat (also 1 -3). Die Träger dürfen unterschiedlich lang sein, l1 ist dabei die Länge des ersten Trägers, l2 die des zweiten und l3 dann die des dritten Trägers
In x1 stehen dann alle x-Werte drinne für der den ersten Träger, also an welcher Stelle [m] was berechnet wurde.
x2 ist dann für den 2. Träger der dann normalerweise wieder bei 0 losgehen würde, jedoch lasse ich diesen nun
an der letzten Stelle von x los gehen bis er die Länge von l1 + l2 erreicht.
Also:
in x1 steht dann bspw. [0,1,2,3,4,5,6,7,8,9,10] das ist dann für einen 10 m langen Träger, wo an 11 Stellen eine Berechnung durchgeführt wird
in x2 steht dann [10,11,12,13,14,15,16,17,18,19,20] auch für einen 10 m langen Träger. Der Plot später soll an dem Gesamtsystem ausgegben werden.
Also gehts bei 0 los bis ich 20 erreicht habe. x ist dabei die Einteilung für die x-Achse.
ecz ist dabei mein Container, wo ich in jeder Zeile [x, V, M, phi, w] rein speichere. Bei der Berechnung ist ab dem 2. Träger das x nicht mehr korrekt und muss durch das richtige ersetzt werden, denn x ist meine Variable wo drinne steht, an welchem Punkt des Trägers ich gerade die Wertee berechnet habe. Damit geh ich dann später in mathplot und lasse mir das ausgeben.
Den Teil den gkuhl meint ist der folgende, plus meiner Ergänzung damit ich anständig plotten kann
Code: Alles auswählen
# ecz Ergbinsse Container der Zwischenschnittgroessen fuer das Zeichnen, [x,V,M,phi,w, V,M,phi,w]] (Lastfall 1-4)
ecz = numpy.array([])
# s Zaehlvariabele fuer die Staebe
for s in range(0,2):
# l Zaehltvariabel fuer die Lastfaelle
for l in range(0,4):
# i Zaehlvariabel fuer die Intervalle der Zwischenschnittgroessen eines Stabes
for i in range(0,11):
#print asm[0,l,s]
x = i/10. * lsl[s]
V = (asm[0,l,s]) - p[s,l] * x
M = (asm[0,l,s]) * x + (asm[1,l,s]) - p[s,l] * x**2 / 2
phi = (((asm[0,l,s]) * (x**2 / 2) + (asm[1,l,s]) * x - p[s,l] * ( x**3 / 6)) / steifigkeit) + (asm[3,l,s])
w = (((- (asm[0,l,s]) * (x**3 /6) - (asm[1,l,s]) * (x**2 / 2) + p[s,l] * (x**4 / 24)) / steifigkeit) - (asm[3,l,s]) * x + (asm[2,l,s]))*1000
# e Berechnung der Zwischenwerte fuer V, M, w, phi
e = numpy.array([x, V, M, phi, w])
ecz = numpy.append(ecz, e, axis=0)
# Stabweise teilen
ecz = numpy.split(ecz, 2, axis = 0)
# ecz1 Ergbinsse Container der Zwischenschnittgroessen Stab 1, in 44x5 Matrix konvertieren, 11x20 Matrix konvertieren, x in 5.,10,15 Spalte loeschen
ecz1 = numpy.reshape(ecz[0], (44,5))
ecz1 = numpy.hstack((ecz1[:11], ecz1[11:22], ecz1[22:33], ecz1[33:44]))
ecz1 = numpy.delete(ecz1, [5,10,15], axis=1)
# ecz2 Ergbinsse Container der Zwischenschnittgroessen Stab 2, in 44x5 Matrix konvertieren, 11x20 Matrix konvertieren, x in 5.,10,15 Spalte loeschen
ecz2 = numpy.reshape(ecz[1], (44,5))
ecz2 = numpy.hstack((ecz2[:11], ecz2[11:22], ecz2[22:33], ecz2[33:44]))
ecz2 = numpy.delete(ecz2, [5,10,15], axis=1)
# ecz vertikal zusammenfuegen von ecz1, ecz2, runden
ecz = numpy.vstack((ecz1, ecz2))
ecz = numpy.round(ecz, decimals=10)
# Erste Spalte mit X-Werten ueber alle Felder korrigiern
x1 = numpy.linspace(0, l1, 11)
x2 = numpy.linspace(l1, l2+l1, 11)
x = numpy.hstack((x1[:10] , x2[:11]))
x = numpy.reshape(x,(21,1))
ecz = numpy.delete(ecz, 0 ,1)
ecz = numpy.insert(ecz, 0 ,x, axis=1)
und weiter unten komme ich zum Plot
Code: Alles auswählen
#Plot x,y
plt.plot(ecz[:,0] , (ecz[:,2])*-1)
plt.ylabel('Moment [kN/m]')
plt.xlabel('Laenge [m]')
plt.title('Momentenverlauf')
plt.grid() # Gitternetz zeichnen
plt.show()
Mit dem Plot möchte ich genau das erreichen, was ich in dem anderen Thread als Anschauungsbeispiel in Excel erzeugt habe.
Später soll das natürlich der Plot erledigen
Die x-Werte habe ich in der Exceltabelle per Hand geändert da diese nicht stimmen.
Man muss beim Anfang des neuen Träger immer den letzten x Wert des vorherigen Tägers dazurechnen, denn für die Berechnung selbst fängt x bei 0 wieder an. Denn jeder Träger wird seperat berechnet.
Das mit dem Plot funktioniert beim Einfeldträger, da es nur diesen einen gibt und kein weitere dazukommt wo die x Werte wieder von 0 los gehen.
Den Fehler den ich erhalte ist
File "/home/nutzer/workspace/sb2brain/src/schnitt_test.py", line 498, in schnittkraefte
ecz = numpy.insert(ecz, 0 ,x, axis=1)
File "/usr/lib/python2.6/dist-packages/numpy/lib/function_base.py", line 3153, in insert
new[slobj] = values
ValueError: array dimensions are not compatible for copy
In ecz steht vor dem edieren
Dabei ist die Dimension der Schnittgroessen Martrix (22, 17)
[[ 0.00000000e+00 3.75000000e+01 0.00000000e+00 -3.46790000e-06
0.00000000e+00 7.50000000e+01 0.00000000e+00 -6.93580000e-06
0.00000000e+00 8.75000000e+01 0.00000000e+00 -1.04037000e-05
0.00000000e+00 -1.25000000e+01 -0.00000000e+00 3.46790000e-06
0.00000000e+00]
[ 1.00000000e+00 2.75000000e+01 3.25000000e+01 -3.18350000e-06
3.37078650e-03 5.50000000e+01 6.50000000e+01 -6.36700000e-06
6.74157300e-03 6.75000000e+01 7.75000000e+01 -9.73090000e-06
1.01747815e-02 -1.25000000e+01 -1.25000000e+01 3.36390000e-06
-3.43320850e-03]
[ 2.00000000e+00 1.75000000e+01 5.50000000e+01 -2.44140000e-06
6.21445420e-03 3.50000000e+01 1.10000000e+02 -4.88280000e-06
1.24289083e-02 4.75000000e+01 1.35000000e+02 -7.93450000e-06
1.90872520e-02 -1.25000000e+01 -2.50000000e+01 3.05170000e-06
-6.65834370e-03]
[ 3.00000000e+00 7.50000000e+00 6.75000000e+01 -1.40800000e-06
8.15647110e-03 1.50000000e+01 1.35000000e+02 -2.81590000e-06
1.63129422e-02 2.75000000e+01 1.72500000e+02 -5.34750000e-06
2.57802747e-02 -1.25000000e+01 -3.75000000e+01 2.53160000e-06
-9.46733250e-03]
[ 4.00000000e+00 -2.50000000e+00 7.00000000e+01 -2.49700000e-07
8.98876400e-03 -5.00000000e+00 1.40000000e+02 -4.99400000e-07
1.79775281e-02 7.50000000e+00 1.90000000e+02 -2.30270000e-06
2.96296296e-02 -1.25000000e+01 -5.00000000e+01 1.80330000e-06
-1.16521015e-02]
[ 5.00000000e+00 -1.25000000e+01 6.25000000e+01 8.67000000e-07
8.66971840e-03 -2.50000000e+01 1.25000000e+02 1.73390000e-06
1.73394368e-02 -1.25000000e+01 1.87500000e+02 8.67000000e-07
3.03440144e-02 -1.25000000e+01 -6.25000000e+01 8.67000000e-07
-1.30045776e-02]
[ 6.00000000e+00 -2.25000000e+01 4.50000000e+01 1.77560000e-06
7.32417810e-03 -4.50000000e+01 9.00000000e+01 3.55110000e-06
1.46483562e-02 -3.25000000e+01 1.65000000e+02 3.82850000e-06
2.79650437e-02 -1.25000000e+01 -7.50000000e+01 -2.77400000e-07
-1.33166875e-02]
[ 7.00000000e+00 -3.25000000e+01 1.75000000e+01 2.30960000e-06
5.24344570e-03 -6.50000000e+01 3.50000000e+01 4.61920000e-06
1.04868914e-02 -5.25000000e+01 1.22500000e+02 6.24910000e-06
2.28672493e-02 -1.25000000e+01 -8.75000000e+01 -1.62990000e-06
-1.23803579e-02]
[ 8.00000000e+00 -4.25000000e+01 -2.00000000e+01 2.30270000e-06
2.88528230e-03 -8.50000000e+01 -4.00000000e+01 4.60540000e-06
5.77056460e-03 -7.25000000e+01 6.00000000e+01 7.79580000e-06
1.57580802e-02 -1.25000000e+01 -1.00000000e+02 -3.19050000e-06
-9.98751560e-03]
[ 9.00000000e+00 -5.25000000e+01 -6.75000000e+01 1.58830000e-06
8.73907600e-04 -1.05000000e+02 -1.35000000e+02 3.17660000e-06
1.74781520e-03 -9.25000000e+01 -2.25000000e+01 8.13570000e-06
7.67790260e-03 -1.25000000e+01 -1.12500000e+02 -4.95910000e-06
-5.93008740e-03]
[ 1.00000000e+01 -6.25000000e+01 -1.25000000e+02 0.00000000e+00
0.00000000e+00 -1.25000000e+02 -2.50000000e+02 0.00000000e+00
0.00000000e+00 -1.12500000e+02 -1.25000000e+02 6.93580000e-06
0.00000000e+00 -1.25000000e+01 -1.25000000e+02 -6.93580000e-06
-0.00000000e+00]
[ 0.00000000e+00 6.25000000e+01 -1.25000000e+02 0.00000000e+00
0.00000000e+00 1.25000000e+02 -2.50000000e+02 0.00000000e+00
0.00000000e+00 1.25000000e+01 -1.25000000e+02 6.93580000e-06
0.00000000e+00 1.12500000e+02 -1.25000000e+02 -6.93580000e-06
0.00000000e+00]
[ 1.00000000e+00 5.25000000e+01 -6.75000000e+01 -1.58830000e-06
8.73907600e-04 1.05000000e+02 -1.35000000e+02 -3.17660000e-06
1.74781520e-03 1.25000000e+01 -1.12500000e+02 4.95910000e-06
-5.93008740e-03 9.25000000e+01 -2.25000000e+01 -8.13570000e-06
7.67790260e-03]
[ 2.00000000e+00 4.25000000e+01 -2.00000000e+01 -2.30270000e-06
2.88528230e-03 8.50000000e+01 -4.00000000e+01 -4.60540000e-06
5.77056460e-03 1.25000000e+01 -1.00000000e+02 3.19050000e-06
-9.98751560e-03 7.25000000e+01 6.00000000e+01 -7.79580000e-06
1.57580802e-02]
[ 3.00000000e+00 3.25000000e+01 1.75000000e+01 -2.30960000e-06
5.24344570e-03 6.50000000e+01 3.50000000e+01 -4.61920000e-06
1.04868914e-02 1.25000000e+01 -8.75000000e+01 1.62990000e-06
-1.23803579e-02 5.25000000e+01 1.22500000e+02 -6.24910000e-06
2.28672493e-02]
[ 4.00000000e+00 2.25000000e+01 4.50000000e+01 -1.77560000e-06
7.32417810e-03 4.50000000e+01 9.00000000e+01 -3.55110000e-06
1.46483562e-02 1.25000000e+01 -7.50000000e+01 2.77400000e-07
-1.33166875e-02 3.25000000e+01 1.65000000e+02 -3.82850000e-06
2.79650437e-02]
[ 5.00000000e+00 1.25000000e+01 6.25000000e+01 -8.67000000e-07
8.66971840e-03 2.50000000e+01 1.25000000e+02 -1.73390000e-06
1.73394368e-02 1.25000000e+01 -6.25000000e+01 -8.67000000e-07
-1.30045776e-02 1.25000000e+01 1.87500000e+02 -8.67000000e-07
3.03440144e-02]
[ 6.00000000e+00 2.50000000e+00 7.00000000e+01 2.49700000e-07
8.98876400e-03 5.00000000e+00 1.40000000e+02 4.99400000e-07
1.79775281e-02 1.25000000e+01 -5.00000000e+01 -1.80330000e-06
-1.16521015e-02 -7.50000000e+00 1.90000000e+02 2.30270000e-06
2.96296296e-02]
[ 7.00000000e+00 -7.50000000e+00 6.75000000e+01 1.40800000e-06
8.15647110e-03 -1.50000000e+01 1.35000000e+02 2.81590000e-06
1.63129422e-02 1.25000000e+01 -3.75000000e+01 -2.53160000e-06
-9.46733250e-03 -2.75000000e+01 1.72500000e+02 5.34750000e-06
2.57802747e-02]
[ 8.00000000e+00 -1.75000000e+01 5.50000000e+01 2.44140000e-06
6.21445420e-03 -3.50000000e+01 1.10000000e+02 4.88280000e-06
1.24289083e-02 1.25000000e+01 -2.50000000e+01 -3.05170000e-06
-6.65834370e-03 -4.75000000e+01 1.35000000e+02 7.93450000e-06
1.90872520e-02]
[ 9.00000000e+00 -2.75000000e+01 3.25000000e+01 3.18350000e-06
3.37078650e-03 -5.50000000e+01 6.50000000e+01 6.36700000e-06
6.74157300e-03 1.25000000e+01 -1.25000000e+01 -3.36390000e-06
-3.43320850e-03 -6.75000000e+01 7.75000000e+01 9.73090000e-06
1.01747815e-02]
[ 1.00000000e+01 -3.75000000e+01 0.00000000e+00 3.46790000e-06
-0.00000000e+00 -7.50000000e+01 0.00000000e+00 6.93580000e-06
-0.00000000e+00 1.25000000e+01 -0.00000000e+00 -3.46790000e-06
0.00000000e+00 -8.75000000e+01 0.00000000e+00 1.04037000e-05
0.00000000e+00]]
Jetzt sollen halt immer die erste Spalte ( 0.00000000e+00, 1.00000000e+00, 2.00000000e+00, ... 9.00000000e+00, 1.00000000e+01)
durch das korrigierte X ersetzt werden.