我目前需要對我的 python 進行一些梳理......出于某種原因,我無法將這個冗長的代碼轉換為一個簡單的 for 回圈,該回圈回傳陣列中的值。
我正在創建一個代碼來解決非對稱截面梁的直接應力。撰寫正確的答案并不難,我也沒有問題,但我知道我可以利用 for 回圈將這段代碼縮減為幾行。
這是我寫的代碼:
Ixx = 5.6667 * 10**5
Iyy = 1.493 * 10**5
Ixy = - .8 * 10**5
x = 66.7
y = -50
Sy = np.array([400, 600, 800, 1000, 1200, -400, -800,-1000, -1200])
Sx = np.array([600, 600, 400, -400, -600, 600, 400, -400, 600])
Mx = -Sx * 1000
My = Sy * 1000
DEN = (Ixx * Iyy) - (Ixy**2)
Sigma0 = (((((My[0] * Ixx) - (Mx[0]*Ixy)) * x) ((Mx[0] * Iyy) - (My[0] * Ixy)) * y)) / DEN
print(Sigma0, 'MPa')
Sigma1 = (((((My[1] * Ixx) - (Mx[1]*Ixy)) * x) ((Mx[1] * Iyy) - (My[1] * Ixy)) * y)) / DEN
print(Sigma1, 'MPa')
Sigma2 = (((((My[2] * Ixx) - (Mx[2]*Ixy)) * x) ((Mx[2] * Iyy) - (My[2] * Ixy)) * y)) / DEN
print(Sigma2, 'MPa')
Sigma3 = (((((My[3] * Ixx) - (Mx[3]*Ixy)) * x) ((Mx[3] * Iyy) - (My[3] * Ixy)) * y)) / DEN
print(Sigma3, 'MPa')
Sigma4 = (((((My[4] * Ixx) - (Mx[4]*Ixy)) * x) ((Mx[4] * Iyy) - (My[4] * Ixy)) * y)) / DEN
print(Sigma4, 'MPa')
Sigma5 = (((((My[5] * Ixx) - (Mx[5]*Ixy)) * x) ((Mx[5] * Iyy) - (My[5] * Ixy)) * y)) / DEN
print(Sigma5, 'MPa')
Sigma6 = (((((My[6] * Ixx) - (Mx[6]*Ixy)) * x) ((Mx[6] * Iyy) - (My[6] * Ixy)) * y)) / DEN
print(Sigma6, 'MPa')
Sigma7 = (((((My[7] * Ixx) - (Mx[7]*Ixy)) * x) ((Mx[7] * Iyy) - (My[7] * Ixy)) * y)) / DEN
print(Sigma7, 'MPa')
Sigma8 = (((((My[8] * Ixx) - (Mx[8]*Ixy)) * x) ((Mx[8] * Iyy) - (My[8] * Ixy)) * y)) / DEN
print(Sigma8, 'MPa')
我嘗試通過執行以下操作將此代碼轉換為 for 回圈:
def CalcStress(Ixx, Iyy, Ixy, Mx, My, x, y, DEN):
n = My.shape[0]
result = np.zeros_like(Mx)
for i in range(0, n-1):
result[i] = (((((My[i] * Ixx) - (Mx[i]*Ixy)) * x) ((Mx[i] * Iyy) - (My[i] * Ixy)) * y)) / DEN
return result
I am trying to print the results but nothing comes up no matter where I put the print statement. My last python class was almost 2 years ago and I am attempting to brush up on it by coding up simple stress problems I know the answers to. Seems like a simple issue that I am missing but cant seem to find what. Thank you for the help in advance!
uj5u.com熱心網友回復:
您可以將其用于回圈:
for ix in range(len(Sy)):
Sigma = (((((My[ix] * Ixx) - (Mx[ix]*Ixy)) * x) ((Mx[ix] * Iyy) - (My[ix] * Ixy)) * y)) / DEN
print(Sigma, 'MPa')
或者,如果您想使用該函式,則必須呼叫它并可以使用它:
def CalcStress(Ixx, Iyy, Ixy, Mx, My, x, y, DEN):
n = My.shape[0]
result = np.zeros_like(Mx)
for i in range(0, n-1):
result[i] = (((((My[i] * Ixx) - (Mx[i]*Ixy)) * x) ((Mx[i] * Iyy) - (My[i] * Ixy)) * y)) / DEN
return result
xy = CalcStress(Ixx, Iyy, Ixy, Mx, My, x, y, DEN)
for element in xy:
print (element)
uj5u.com熱心網友回復:
我最終發現出了什么問題。在嘗試列印 CalcStress 時,我沒有包含引數。我現在所做的這段代碼給了我想要的陣列中的答案。
import numpy as np
Ixx = 5.6667 * 10**5
Iyy = 1.493 * 10**5
Ixy = - .8 * 10**5
x = 66.7
y = -50
Sy = np.array([400, 600, 800, 1000, 1200, -400, -800,-1000, -1200])
Sx = np.array([600, 600, 400, -400, -600, 600, 400, -400, 600])
Mx = -Sx * 1000
My = Sy * 1000
DEN = (Ixx * Iyy) - (Ixy**2)
def CalcStress(Ixx, Iyy, Ixy, Mx, My, x, y, DEN):
n = My.shape[0]
result = np.zeros_like(Mx)
for i in range(0, n):
result[i] = (((((My[i] * Ixx) - (Mx[i]*Ixy)) * x) ((Mx[i] * Iyy) - (My[i] * Ixy)) * y)) / DEN
return result
print(CalcStress(Ixx, Iyy, Ixy, Mx, My, x, y, DEN))
結果 =[ 189, 275, 356, 421, 502, -156, -334, -443, -502]
uj5u.com熱心網友回復:
我會更喜歡一些更具可讀性的東西:
def calc_stress(Ixx, Iyy, Ixy, Mx, My, x, y, DEN):
out = []
for xx, yy in zip(Mx, My):
pt1 = x * (yy * Ixx - xx * Ixy)
pt2 = y * (xx * Iyy - yy * Ixy)
out = [(pt1 pt2) / DEN]
return out
res = calc_stress(Ixx, Iyy, Ixy, Mx, My, x, y, DEN)
[print(f"{x} MPa") for x in res]
輸出:
189.19988203646955 MPa
275.6327039784023 MPa
356.620779869467 MPa
...
-443.05360181139974 MPa
-502.2626934989924 MPa
帶有原始資料索引的列印輸出版本:
[print(f"{idx}: {x} MPa") for idx, x in enumerate(aaa)]
輸出:
0: 189.19988203646955 MPa
1: 275.6327039784023 MPa
2: 356.620779869467 MPa
...
7: -443.05360181139974 MPa
8: -502.2626934989924 MPa
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/315994.html
上一篇:無符號短陣列到字符陣列
下一篇:角度-如何禁用類使用(驗證問題)
