트러스 구조해석 완전 가이드: 정정성·안정성부터 절점법·단면법, 영부재와 FEA 검증까지

12 m 평면 트러스 한 모델로 정정성·기하안정성, 반력, 절점법·단면법, 영부재, 단위하중 처짐과 행렬강성 FEA 검증을 재현합니다.

트러스 구조해석 완전 가이드: 정정성·안정성부터 절점법·단면법, 영부재와 FEA 검증까지

트러스 해석은 공식을 많이 외우는 과목처럼 보이지만, 실제로는 모델을 정확히 정의하고 평형을 여러 경로로 검산하는 훈련입니다. 절점을 핀으로 볼 수 있는지, 하중을 어느 절점에 놓아야 하는지, 지점이 강체운동을 막는지부터 틀리면 절점법의 대수는 완벽해도 답은 현실과 멀어집니다. 반대로 이상화의 경계를 알고 전체 평형·절점 평형·변위 에너지를 교차 확인하면 작은 손계산 모델이 대규모 FEA를 감시하는 강력한 기준이 됩니다.

이 글은 길이 12 m인 하나의 평면 트러스를 처음부터 끝까지 추적합니다. A점은 핀, E점은 롤러이고 B점에 30 kN, D점에 50 kN의 하향 집중하중이 작용합니다. 모든 부재는 교육용으로 E=200 GPa, A=2400 mm²를 사용합니다. 초보자는 자유물체도와 절점법을, 실무자는 기하학적 안정성·가상일·강성행렬·요소 선택과 검증 잔차를 같은 숫자로 이어서 볼 수 있습니다.

이 글의 규정 경계: 30 kN과 50 kN은 이미 정해졌다고 가정한 단일 탄성 정적 해석 케이스입니다. 법정 하중조합, 하중계수, 허용처짐, 인장·압축부재 강도, 좌굴길이, 접합부와 내진 상세는 계산하지 않습니다. 그 값은 프로젝트 관할과 구조형식에 맞는 KDS, AISC, Eurocode 등 적용 규정과 판본을 먼저 지정한 뒤 별도 설계해야 합니다. 특정 규정을 정하지 않은 채 조합계수나 강도식을 섞지 않습니다.

1단계 — 해석과 규정설계의 경계를 먼저 고정한다

구조해석은 주어진 기하, 재료강성, 지점조건과 하중에서 반력·부재력·변위를 구합니다. 규정설계는 그 결과를 어떤 하중조합으로 감쌀지, 어떤 저항계수 또는 안전율을 적용할지, 국부좌굴·전체좌굴·피로·접합·사용성을 어떻게 판정할지 정합니다. 두 작업은 연결되지만 동일하지 않습니다. 해석 모델이 틀리면 규정식을 정확히 적용해도 안전하지 않고, 해석 결과만으로는 법적·계약적 적합성을 선언할 수 없습니다.

따라서 계산서 첫 페이지에는 최소한 분석 케이스의 출처, 좌표축, 단위, 선형/비선형 가정, 부재 및 접합 이상화, 지점 자유도와 결과의 사용 목적을 적습니다. 이 예제는 “절점에 집중된 30/50 kN에 대한 1차 선형 탄성 축력과 처짐”까지만 답합니다. 압축부재가 그 축력을 견디는지는 유효길이·단면·재료·초기결함과 적용 규정이 추가되어야 답할 수 있습니다.

이 글에서 계산값 또는 방법적용 규정을 정한 뒤 별도 설계

지점반력전체 자유물체도와 평형식사실상 고정/탄성지점의 실제 강성

트러스 축력절점법·단면법·행렬강성법부재 인장·압축·좌굴 저항

선형 탄성 처짐단위하중법과 강성법규정상 사용성 한계와 장기효과

모델 평형반력합·절점잔차·자유도 잔차하중조합·계수·우발편심·내진상세

요소 이상화2절점 축력 전용 트러스 요소거셋·볼트·용접·국부판좌굴

2단계 — 실물을 절점·부재·지점·하중으로 이상화한다

이상적인 평면 트러스에는 네 가지 핵심 가정이 있습니다. 모든 부재 중심선이 절점에서 만나고, 접합은 모멘트를 전달하지 않는 핀으로 거동하며, 외력과 반력은 절점에 작용하고, 각 부재는 자기 축 방향의 인장 또는 압축만 전달합니다. 이때 한 부재의 양 끝 힘은 크기가 같고 방향이 반대이며 부재축과 일치합니다. 그래서 부재를 자른 자유물체도에는 전단력과 휨모멘트가 아니라 하나의 축력만 나타납니다.

실제 지붕 트러스의 분포하중은 퍼린이나 패널점을 통해 들어옵니다. 분포하중을 임의로 상현재 중간에 놓으면 그 부재에는 축력뿐 아니라 굽힘이 생겨 순수 트러스 가정이 깨집니다. 등가 절점하중으로 옮길 때는 전체 합력과 합력의 모멘트가 원래 하중과 같아야 합니다. 자중처럼 부재 전체에 분포되는 하중을 절점으로 등가화할지, 보-기둥 요소로 직접 모델링할지는 요구 정확도에 따라 명시적으로 결정합니다.

절점x (m)y (m)특이사항

A00핀: x·y 변위 구속

B3330 kN 하향

C63외력 없음

D9350 kN 하향

E120롤러: y 변위만 구속

F60외력 없음

부재는 AB, AF, BF, BC, CF, CD, DF, DE, FE의 아홉 개입니다. 대각재 길이는 √(3²+3²)=4.242641 m, 수평 상현재 BC와 CD 및 수직재 CF는 3 m, 하현재 AF와 FE는 6 m입니다. 계산 코드에서는 길이를 mm, 힘을 N, 탄성계수를 N/mm²로 통일해 변위가 바로 mm로 나오게 합니다.

3단계 — 전체 자유물체도로 지점반력을 먼저 구한다

A 핀은 수평반력 Ax와 수직반력 Ay를, E 롤러는 수직반력 Ey를 제공합니다. 수평 외력이 없으므로 ΣFx=0에서 Ax=0입니다. A점에 대한 모멘트를 취하면 12Ey−30×3−50×9=0이므로 Ey=45 kN입니다. 다시 ΣFy=0을 적용하면 Ay+45−30−50=0, 따라서 Ay=35 kN입니다.

반력을 구하기 전에 절점 해석을 시작하면 미지수가 불필요하게 늘고 부호 실수가 숨습니다. 반력 검산은 합력만 맞추는 것으로 끝내지 않습니다. 수직반력 합 35+45=80 kN이 외력 합과 같고, A에 대한 반력 모멘트 45×12=540 kN·m가 하중 모멘트 30×3+50×9=540 kN·m와 같아야 합니다.

평형식대입결과

ΣFx = 0Ax = 0Ax = 0 kN

ΣMA = 012Ey − 30·3 − 50·9 = 0Ey = 45 kN

ΣFy = 0Ay + Ey − 30 − 50 = 0Ay = 35 kN

4단계 — 정정성의 개수식과 기하학적 안정성을 따로 확인한다

단순 평면 트러스의 후보 정정성 검사는 m+r=2j입니다. 여기서 m은 부재 수, r은 독립 반력 성분 수, j는 절점 수입니다. 예제는 m=9, r=3, j=6이므로 9+3=12=2×6을 만족합니다. 개수만 보면 외적·내적으로 정정인 후보입니다. m+r<2j이면 일반적으로 구속이 부족하고, m+r>2j이면 여분의 미지수가 있는 부정정 후보입니다.

그러나 이 식은 필요조건에 가깝고 충분조건이 아닙니다. 부재가 겹치거나 여러 절점이 퇴화한 직선 배치에 놓이면, 여분 부재와 기구가 동시에 존재해 개수식은 맞아도 강성행렬이 특이해질 수 있습니다. 지점 반력선이 강체회전을 막는지도 보아야 합니다. 가장 안전한 습관은 (1) 개수식, (2) 삼각형으로 안정한 부분에서 구조를 확장할 수 있는지, (3) 강체 평행이동과 회전을 지점이 막는지, (4) 강성행렬의 0에 가까운 고유모드 또는 피벗이 있는지를 함께 확인하는 것입니다.

예제에서 CF를 제거하면 m+r=8+3=11<12가 되고 C점은 상현재를 따라 연결된 두 부재만 남습니다. C는 수직으로 움직이는 국부 기구가 되므로, CF에 현재 하중에서 축력이 0이라는 사실과 구조 안정에 불필요하다는 결론은 전혀 다릅니다.

5단계 — 영부재는 절점 규칙으로 찾되 하중조건을 붙여 말한다

외력이나 지점반력이 없는 절점에서 세 부재가 만나고 그중 두 부재가 일직선이면, 나머지 비공선 부재의 축력은 0입니다. C점에서 BC와 CD는 수평으로 일직선이고 외력이 없으므로 수직 평형을 만족시키기 위해 NCF=0입니다. 또한 외력이 없는 절점에 비공선 두 부재만 만나면 두 부재 모두 영부재입니다.

영부재는 압축현재의 좌굴길이를 줄이거나, 하중 반전·비대칭 적설·풍흡입·시공단계에서 힘을 전달하거나, 형상을 유지하는 역할을 할 수 있습니다. 실제 접합 편심과 절점 강성 때문에 작은 2차력이 생길 수도 있습니다. 그래서 한 하중 케이스의 0 kN 결과만 보고 부재를 삭제하면 안정성과 다른 조합의 하중 경로를 잃을 수 있습니다.

6단계 — 절점법은 인장을 양(+)으로 가정하고 부호가 답하게 한다

절점법에서는 미지 축력이 두 개 이하인 절점부터 시작합니다. 각 미지 부재력이 절점에서 바깥으로 당긴다고 가정하면 양수는 인장, 음수는 압축입니다. 압축일 것 같다고 화살표를 미리 뒤집으면 절점마다 부호규칙이 달라져 검산이 어려워집니다.

A점에서 AB는 45° 대각재입니다. 수직 평형 35+NAB sin45°=0에서 NAB=−49.497 kN, 수평 평형 NAF+NAB cos45°=0에서 NAF=+35.000 kN입니다. E점도 같은 방식으로 NDE=−63.640 kN, NFE=+45.000 kN을 얻습니다. 이제 B와 D에는 미지수가 두 개씩만 남습니다.

B점에서 이미 구한 압축력 AB가 절점에 미치는 성분은 오른쪽 35 kN, 위쪽 35 kN입니다. 외력 30 kN이 아래로 작용하므로 수직 평형에서 BF는 +7.071 kN 인장, 수평 평형에서 BC는 −40.000 kN 압축입니다. D점에서는 DF가 −7.071 kN 압축, CD가 −40.000 kN 압축입니다. C점에서는 BC와 CD가 서로 상쇄되고 CF는 0입니다.

7단계 — 전체 부재력 표와 절점 잔차를 함께 남긴다

부재길이 (m)축력 (kN)상태응력 N/A (MPa)

AB4.242641−49.497압축−20.624

AF6.000000+35.000인장+14.583

BF4.242641+7.071인장+2.946

BC3.000000−40.000압축−16.667

CF3.0000000.000영부재0.000

CD3.000000−40.000압축−16.667

DF4.242641−7.071압축−2.946

DE4.242641−63.640압축−26.517

FE6.000000+45.000인장+18.750

부재력 표는 최대값만 표시하지 말고 부호규칙과 하중 케이스를 함께 보존합니다. 각 절점에서 부재력의 x·y 성분, 외력, 반력을 다시 합해 0인지 확인합니다. 예를 들어 F점에는 BF가 (−5,+5) kN, DF가 (−5,−5) kN, AF가 (−35,0) kN, FE가 (+45,0) kN을 가해 합이 정확히 0입니다. 이런 성분 검산은 대각재의 사인·코사인을 바꿔 쓴 오류를 바로 드러냅니다.

8단계 — 단면법으로 원하는 부재력을 독립 계산한다

단면법은 관심 부재를 포함하도록 구조를 절단하고 한쪽 조각의 평형을 풉니다. 평면에서는 독립 평형식이 세 개이므로 일반적으로 미지 부재 세 개 이하를 자르는 단면을 고릅니다. 절단된 모든 축력은 우선 인장으로 가정합니다. 모멘트 중심을 다른 두 미지 부재의 작용선 교점에 잡으면 목표 부재 하나를 바로 구할 수 있습니다.

BC·BF·AF를 가르는 단면의 왼쪽 부분을 취합니다. F에 대한 모멘트에서 A의 35 kN 반력은 6 m 떨어져 반시계방향 210 kN·m, B의 30 kN 하중은 3 m 떨어져 시계방향 90 kN·m를 만듭니다. BC는 F 위 3 m에서 수평으로 작용합니다. 인장을 양으로 놓은 식 210−90+3NBC=0에서 NBC=−40 kN, 즉 압축입니다. 절점법 결과와 일치합니다.

단면법은 절점법의 단축키가 아니라 독립 검산 도구입니다. 같은 부호와 같은 자유물체도를 그대로 복제하면 두 방법이 같은 실수를 공유할 수 있으므로, 단면의 반대쪽을 택하거나 다른 모멘트 중심을 사용해 결과가 유지되는지 확인하면 더 강한 검산이 됩니다. MIT의 공식 강의 노트도 단면을 분리하고, 반력을 포함한 자유물체도를 만든 뒤, 절단 부재를 인장으로 가정하고 평형식을 적용하는 순서를 설명합니다.

9단계 — 응력 N/A는 계산하되 강도 판정으로 오해하지 않는다

교육용으로 모든 부재의 단면적을 2400 mm²로 두었으므로 축응력은 σ=N/A입니다. 가장 큰 절대응력은 DE의 −63.640 kN / 2400 mm² = −26.517 MPa입니다. 탄성변형률은 ε=σ/E이고, DE의 축방향 단축은 NL/(AE)=−0.234375 mm입니다. 이 값들은 선형 탄성 강성과 변위를 구성하는 중간량입니다.

하지만 |σ|가 항복강도보다 작다는 비교만으로 압축부재를 설계할 수 없습니다. 길고 가는 부재는 재료 항복 전에 전체좌굴할 수 있고, 접합 편심과 초기 휨, 잔류응력, 국부좌굴, 단면분류가 저항을 바꿉니다. 실제 단면 형상·유효길이·브레이싱·재료규격·제작공차와 적용 설계기준이 정해진 다음에 압축·인장 저항을 판정해야 합니다.

해석에서 얻는 값추가 정보 없이 말할 수 있는 것추가 정보가 있어야 말할 수 있는 것

축력 N인장/압축 방향과 크기규정 강도 대비 이용률

응력 N/A이상화된 균일 축응력국부좌굴·순단면·접합부 안전성

탄성변위이 모델의 1차 변형규정 허용처짐, 장기·비선형 변형

영부재이 케이스의 1차 축력이 0다른 조합에서도 삭제 가능 여부

10단계 — 단위하중법으로 필요한 한 점의 처짐을 구한다

트러스의 가상일식은 δ=Σ(Ni·ni·Li)/(Ai·Ei)입니다. Ni는 실제 하중계의 부재력, ni는 원하는 변위 방향에 단위하중 1을 가한 보조계의 부재력입니다. D점 아래 방향 처짐을 원하므로 D에 아래 방향 1 N을 놓고 동일한 지점과 부재망을 풉니다. 단위계에서 얻는 부재력은 AB −0.353553 N, AF +0.25 N, BF +0.353553 N, BC −0.5 N, CF 0, CD −0.5 N, DF −0.353553 N, DE −1.060660 N, FE +0.75 N입니다.

모든 부재에 같은 A=2400 mm², E=200000 N/mm²를 사용하고 길이를 mm로 넣으면 δD=1.576745129 mm가 나옵니다. 아래 방향을 양으로 정의했으므로 결과는 아래로 1.576745 mm입니다. 부재별 면적이 다르면 각 항에 해당 Ai를 넣어야 하며, 케이블·인장전용 부재의 비활성화나 대변형이 생기면 선형 중첩과 이 식의 적용성을 다시 검토해야 합니다.

11단계 — 행렬강성법은 절점법을 컴퓨터가 풀 수 있게 배열한 것이다

2차원 트러스 요소의 국부 축강성은 EA/L이고, 방향코사인 c=Δx/L, s=Δy/L로 전역 x·y 자유도에 투영합니다. 요소의 4×4 전역강성은 (EA/L)[[c²,cs,−c²,−cs], [cs,s²,−cs,−s²], [−c²,−cs,c²,cs], [−cs,−s²,cs,s²]]입니다. 각 요소 행렬을 공통 절점 자유도에 더해 전체 K를 만들고, 구속 자유도를 분리한 뒤 Kff·uf=Pf를 풉니다.

예제의 구속은 A의 x·y, E의 y 자유도입니다. 해를 대입하면 D의 수직변위는 −1.576745129 mm이며 단위하중법의 크기와 일치합니다. 지점반력은 R=K·u−P의 구속 자유도 성분이고, 자유 자유도의 최대 잔차는 약 4.37×10⁻¹¹ N입니다. 이 잔차는 구조가 안전하다는 뜻이 아니라 선형 방정식이 수치적으로 평형을 만족한다는 뜻입니다.

절점ux (mm)uy (mm)

A0.0000000.000000

B+0.718750−1.337468

C+0.468750−1.707107

D+0.218750−1.576745

E+1.0000000.000000

F+0.437500−1.707107

12단계 — 온도·제작오차·지점침하는 '하중이 0'이어도 힘을 만들 수 있다

정정 트러스에서 한 부재가 자유롭게 열팽창할 수 있고 지점도 필요한 이동을 허용한다면 온도변화는 변위를 만들되 반드시 축력을 만들지는 않습니다. 반면 부정정 구조, 구속된 지점, 여러 재료의 서로 다른 열팽창, 폐합오차가 있는 제작 부재는 적합조건 때문에 초기 축력을 만듭니다. 요소의 자유변형 αΔT 또는 길이 오차 ΔL0/L를 초기변형으로 넣고 전체 평형과 변위 적합을 함께 풀어야 합니다.

지점침하도 비슷합니다. 정정 구조에서는 반력이 변하지 않고 기하학적 위치만 바뀌는 경우가 있지만, 부정정 구조에서는 강제변위가 부재력을 재분배합니다. “외력이 없으므로 응력도 없다”는 문장은 구속·온도·조립오차·프리스트레스가 모두 없을 때만 성립합니다. FEA에서 지점변위나 초기변형을 누락하면 완벽하게 수렴한 0 응력 결과가 나올 수 있으므로 입력 목록에서 별도 케이스로 관리합니다.

13단계 — 실제 트러스의 2차 휨이 언제 중요한지 판단한다

실제 거셋판 접합은 완전한 핀도 완전한 강접도 아닙니다. 부재 중심선이 한 점에서 만나지 않는 편심, 절점 사이에 작용하는 퍼린 하중, 거셋의 면외변형, 접합부 회전강성, 부재 자중은 2차 휨을 만듭니다. 그 영향이 작다고 판단해 축력 전용 모델을 쓰려면 근거를 남겨야 합니다.

실무적으로는 먼저 핀 절점 트러스 모델로 주 하중경로와 축력을 이해한 뒤, 다음 조건에서 보-기둥 또는 셸 국부모델을 추가합니다. 부재 중간에 큰 횡하중이 작용할 때, 중심선 편심이 무시할 수 없을 때, 접합 회전강성이 전체 변위나 좌굴형상을 바꿀 때, 거셋판·볼트군·용접부의 국부응력이 필요할 때, 대변형으로 축력과 횡변위가 결합될 때입니다. 모델을 복잡하게 만드는 목적은 더 화려한 응력그림이 아니라 질문에 필요한 물리만 추가하는 것입니다.

질문권장 모델주요 출력

전역 축력과 1차 처짐2절점 트러스 요소N, u, 반력, 잔차

부재 중간 횡하중·2차 휨보-기둥 요소N, V, M, 회전

거셋판 국부 거동셸 + 접촉/커넥터판 응력, 좌굴모드, 접합력

볼트·용접 세부국부 솔리드/셸 서브모델접촉압, 미끄럼, 구조응력

큰 변형·좌굴 이후기하비선형 + 초기결함하중–변위 경로, 안정한계

14단계 — 선형 축력과 압축부재 좌굴을 혼동하지 않는다

1차 트러스 해석의 압축력은 완전한 초기 형상에서 평형을 이루는 축력입니다. 이 결과만으로 안정 여유를 알 수 없습니다. 압축재의 실제 저항은 부재 길이와 단면2차반경, 단부 구속, 중간 브레이싱, 국부좌굴, 재료 비선형, 잔류응력과 초기 휨에 좌우됩니다. 전체 트러스도 압축현재의 면외 브레이싱, 절점의 횡구속, 하중 작용면 때문에 면외좌굴할 수 있습니다.

고급 검토 순서는 보통 (1) 규정식에 필요한 축력과 유효길이를 정의하고, (2) 고유치 좌굴로 가능한 모드와 모델 구속 오류를 탐색하되 이를 곧바로 실제 내력으로 부르지 않고, (3) 필요한 경우 규정 또는 검증계획에 따라 초기결함과 재료비선형을 포함한 기하비선형 해석으로 하중–변위 경로를 확인하는 방식입니다. 이 글의 DE 압축력 63.640 kN은 그 설계의 입력이지 합격판정이 아닙니다.

15단계 — FEA 요소와 경계조건을 손계산 모델에 맞춘다

OpenSees의 공식 Truss Element 문서는 트러스 요소를 단면적과 단축 재료를 갖는 2절점 요소로 정의하며, 기본 요소는 기하학적 비선형을 포함하지 않는다고 설명합니다. ANSYS LINK180도 3차원 축력 전용 요소로 절점당 병진 자유도만 가지며 핀 접합 트러스처럼 굽힘을 전달하지 않습니다. 즉 “트러스”라는 이름이 같아도 대변형 옵션, 인장전용 거동, 질량, 초기변형, 재료모델의 기본값은 프로그램마다 확인해야 합니다.

검증은 네 층으로 진행합니다. 첫째, 입력 검토에서 좌표·연결·단위·단면·탄성계수·하중·구속을 표와 비교합니다. 둘째, 평형 검토에서 반력 합과 모멘트를 확인합니다. 셋째, 국부 검토에서 AB, BC, CF, DE처럼 압축·인장·영부재를 대표하는 결과를 손계산과 맞춥니다. 넷째, 강성 검토에서 D점 처짐을 가상일과 비교하고 메시 또는 요소 분할을 바꿔 결과가 불필요하게 변하지 않는지 봅니다.

검증량기준값실패하면 먼저 볼 곳

수직반력 합80.000 kN하중 누락, 단위, 지점방향

A 반력Ax=0, Ay=35 kN핀 자유도, 좌표축

E 반력Ey=45 kN롤러 방향, 추가 구속

DE 축력−63.639610 kN요소 연결, 부호 정의

CF 축력0 kNC점 하중, 중심선, 수치 잡음

D점 uy−1.576745129 mmE·A·길이 단위, 경계조건

자유 DOF 잔차약 4.37×10⁻¹¹ N솔버, 조립, 수렴기준

16단계 — 실행 가능한 최소 코드로 숫자를 재현한다

아래 코드는 외부 패키지, 프로젝트 키, 파일명 치환이 필요 없습니다. 그대로 truss_analysis.py에 저장하고 python3 truss_analysis.py를 실행하면 됩니다. 좌표는 mm, 힘은 N, 탄성계수는 N/mm²입니다. 교육용 가우스–조던 솔버를 포함하므로 NumPy가 없는 환경에서도 동일한 반력·축력·변위를 재현합니다.

from math import hypot # Coordinates are mm; loads are N. No project key or external file is required. nodes = { "A": (0.0, 0.0), "B": (3000.0, 3000.0), "C": (6000.0, 3000.0), "D": (9000.0, 3000.0), "E": (12000.0, 0.0), "F": (6000.0, 0.0), } members = [ ("A", "B"), ("A", "F"), ("B", "F"), ("B", "C"), ("C", "F"), ("C", "D"), ("D", "F"), ("D", "E"), ("F", "E"), ] E = 200_000.0 # N/mm^2 A = 2_400.0 # mm^2, same for every member in this teaching model def solve(matrix, vector): """Gauss-Jordan elimination with partial pivoting.""" a = [row[:] + [rhs] for row, rhs in zip(matrix, vector)] n = len(a) for col in range(n): pivot = max(range(col, n), key=lambda row: abs(a[row][col])) a[col], a[pivot] = a[pivot], a[col] if abs(a[col][col]) < 1.0e-12: raise ValueError("Singular stiffness matrix: check stability and supports") scale = a[col][col] for j in range(col, n + 1): a[col][j] /= scale for row in range(n): if row == col: continue scale = a[row][col] for j in range(col, n + 1): a[row][j] -= scale * a[col][j] return [a[i][-1] for i in range(n)] names = list(nodes) index = {name: i for i, name in enumerate(names)} ndof = 2 * len(nodes) K = [[0.0] * ndof for _ in range(ndof)] for start, end in members: x1, y1 = nodes[start] x2, y2 = nodes[end] dx, dy = x2 - x1, y2 - y1 L = hypot(dx, dy) c, s = dx / L, dy / L factor = E * A / L k = [ [ c*c, c*s, -c*c, -c*s], [ c*s, s*s, -c*s, -s*s], [-c*c, -c*s, c*c, c*s], [-c*s, -s*s, c*s, s*s], ] dof = [2*index[start], 2*index[start]+1, 2*index[end], 2*index[end]+1] for i, I in enumerate(dof): for j, J in enumerate(dof): K[I][J] += factor * k[i][j] P = [0.0] * ndof P[2*index["B"] + 1] = -30_000.0 P[2*index["D"] + 1] = -50_000.0 fixed = [2*index["A"], 2*index["A"]+1, 2*index["E"]+1] free = [i for i in range(ndof) if i not in fixed] Kff = [[K[i][j] for j in free] for i in free] uf = solve(Kff, [P[i] for i in free]) u = [0.0] * ndof for dof, value in zip(free, uf): u[dof] = value residual = [sum(K[i][j] * u[j] for j in range(ndof)) - P[i] for i in range(ndof)] print("Reactions [kN]:", f"Ax={residual[2*index['A']]/1000:.6f}", f"Ay={residual[2*index['A']+1]/1000:.6f}", f"Ey={residual[2*index['E']+1]/1000:.6f}") axial = {} for start, end in members: x1, y1 = nodes[start] x2, y2 = nodes[end] dx, dy = x2 - x1, y2 - y1 L = hypot(dx, dy) c, s = dx / L, dy / L dof = [2*index[start], 2*index[start]+1, 2*index[end], 2*index[end]+1] extension = sum(q*v for q, v in zip( [-c, -s, c, s], [u[i] for i in dof])) axial[start + end] = E * A / L * extension print(f"{start+end}: {axial[start+end]/1000:+.6f} kN") max_free_residual = max(abs(residual[i]) for i in free) print(f"D vertical displacement: {u[2*index['D']+1]:+.9f} mm") print(f"Max free-DOF residual: {max_free_residual:.3e} N")

기대 출력의 핵심은 Ay=35.000000 kN, Ey=45.000000 kN, CF=+0.000000 kN, DE=−63.639610 kN, D vertical displacement=−1.576745129 mm입니다. 자유 자유도 잔차가 대략 10⁻¹¹ N 수준이면 이 작은 문제에서 수치 평형이 충분히 맞습니다. 단, 코드가 손계산과 일치한다는 것은 두 모델이 일치한다는 뜻이지 실제 접합과 좌굴까지 검증됐다는 뜻은 아닙니다.

17단계 — 숙련도에 따라 같은 모델에서 질문의 깊이를 높인다

수준반드시 설명할 수 있어야 하는 질문권장 산출물

입문핀·롤러 반력 수가 왜 3개인가? 인장과 압축 부호는 무엇인가?전체 및 A/B/C 절점 자유물체도

초급 실무왜 CF가 이 케이스에서 0인가? 단면법으로 BC를 어떻게 검산하는가?반력·부재력 표, 절점 잔차

중급분포하중을 어느 패널점에 등가화했는가? 처짐 결과가 어떤 EA에 민감한가?하중 변환표, 가상일 기여도

고급2차 휨·편심·브레이싱·초기결함이 어떤 한계상태를 바꾸는가?모델 계층화와 민감도 비교

검토 책임자해석 결과가 어떤 규정 판정으로 넘어가며 모델 위험을 누가 승인했는가?설계기준서, 독립검산, 변경이력

30년 경력자의 차이는 더 복잡한 행렬을 손으로 푸는 데 있지 않습니다. 어떤 단순화가 결과를 지배하는지, 어느 검산이 서로 독립인지, 0처럼 보이는 결과가 실제로는 어떤 조건부 문장인지 판단하는 데 있습니다. 같은 작은 모델을 손계산·코드·상용 FEA로 반복하면 그 판단 기준을 명확히 훈련할 수 있습니다.

18단계 — 제출 전 체크리스트와 공식 자료

하중 케이스의 출처와 적용 규정의 경계를 적었는가?

모든 부재 중심선과 하중 작용점이 의도한 절점에서 만나는가?

지점이 강체 x·y 이동과 회전을 막되 불필요한 구속을 추가하지 않는가?

m+r=2j뿐 아니라 기하학적 기구와 퇴화 배치를 확인했는가?

반력의 힘·모멘트 평형을 둘 다 검산했는가?

영부재 결과에 하중 케이스를 붙였는가?

대표 부재를 절점법과 단면법으로 교차 확인했는가?

변위를 단위하중법과 강성법으로 교차 확인했는가?

트러스 요소가 굽힘·편심·대변형 중 무엇을 제외하는지 적었는가?

압축축력을 좌굴 합격으로 잘못 해석하지 않았는가?

이 글의 해석 절차는 MIT OpenCourseWare의 Truss Analysis 강의, Method of Sections 노트, Truss Deflections 노트와 대조했습니다. 요소의 구현 경계는 UC Berkeley OpenSees의 Truss Element 문서와 ANSYS의 LINK180 공식 문서를 참고했습니다. 실제 설계에서는 프로젝트 관할이 지정한 구조기준 원문과 판본이 최종 근거입니다.

마지막 검토 문장: 좋은 트러스 해석은 “프로그램이 수렴했다”에서 끝나지 않습니다. 하중이 어디서 들어와 어떤 축력 경로로 지점에 도달하는지, 그 경로가 기하학적으로 안정한지, 힘과 변위가 독립적인 방법으로 같은 답을 내는지 설명할 수 있어야 합니다.