c语言计算平面桁架内力计算程序
桁架计算(TRUSS)
桁架内力计算程序(TRUSS)一、程序功能及编制方法桁架内力计算程序(TRUSS),能计算任意平面和空间桁架(包括网架)在结点荷载作用下各结点的位移和各杆的轴力。
程序采用变带宽一维数组存储总刚度矩阵,先处理法引进支座条件。
计算结果输出各结点的位移和各杆的轴力。
二、程序使用方法使用方法与“APF”程序相同。
用文件编辑编辑器建立数据文件后即可运行。
计算结果将写在结果文件中。
三、数据文件填写格式数据文件填写格式大致与APF程序相似。
1.总信息:T,NJ,NE,NR,NB,NP,EO,DS其中:T——桁架类型,平面桁架 T=2,空间桁架 T=3。
NR——支座约束数。
其他变量与APF程序相同。
2.结点坐标数组XYZ(NJ, 3)每个结点填一行,每行三个数分别填写结点的x,y,z三个坐标数值,平面桁架只填x,y 值(单位:m)。
3.单元信息数组G(NE)采用紧缩存储方式,每个单元填一个数。
把单元的左端、右端结点号和杆的类型号三个数紧缩为一个数。
例如某单元左端结点号为15,在端结点号为8,类型号为3,则写成0.15083,一般格式为0.×××××。
4.单元截面信息数组AI(NB)填写各类单元的杆截面面积(m2)。
5.约束信息数组R(NR)采用紧缩存储方式,每个约束(支座链杆)填一个数。
把约束作用的作用点写在该数的整数部分,约束的方向写在小数部分。
x方向的约束为“l”,y方向的约束为“2”。
例如某支座链杆作用在 17号结点上,方向沿整体坐标 y方向,则写为 17.2,一般格式为××.×。
6.结点荷载信息数组F(NP,2)每个结点荷载填一行,每行两个数。
前一个数用紧缩方式填写荷载作用的结点号和作用方向,格式与约束信息的格式相同。
后一个数为荷载的数值。
单位为kN,与整体坐标方向一致者为正值,相反者为负值。
例如,作用在16号结点上,数值为183.5 kN,方向向下的力,则写成:16.2,-183.5(这里,假定坐标轴y轴向上)。
第二章 第四节 平面静定桁架内力的计算标准版文档
桁架静力分析 简化计算模型
节点
杆件
节点
杆件
节点
杆件
节点
杆件
桁架静力分析 静力分析的基本方法
节
以节点为平衡对象;
点
节点力的作用线已知, 指向可以假设;
法
不仅可以确定各杆受
力,还可以确定连接
件的受力。
桁架静力分析 静力分析的基本方法
指向可以假设;
节点法 用假想截面将桁架截开;
桁架静力分析 静力分析的基本方法
节点法
例 题
以节点为平衡对象,画出受力图:
FA B FA D
FC y
FB A
F BC FB D
FC B FC D
FC x
FD B FD C
FD A
指向节者点为压力;
FD y 背向节者点为拉力。
桁架静力分析 静力分析的基本方法
FC x = 0 , FC y = - 800 N , FD y = 2600 N 。
指向可以假设; 工程中由杆件通过焊接、铆接 直接求得杆件的内力,进
节点力的作用线已知, 工程中由杆件通过焊接、铆接
不仅可以确定各杆受
例 直接求得杆件的内力,进
平面简单桁架的内力计算 工程中由杆件通过焊接、铆接
用假想截面将桁架截开; 用假想截面将桁架截开; 力,还可以确定连接
题 指向可以假设;
桁架静力分析 静力分析的基本方法
用假想截面将桁架截开;
不仅可以确定各杆受
节点力的作用线已知,
截 工程中由杆件通过焊接、铆接
工程中由杆件通过焊接、铆接
以节点为平衡对象,画出受力图:
以节点为平衡对象,画出受力图:
用假想截面将桁架截开;
弹性力学与有限元分析第二章-平面桁架有限元分析及程序设计
x
由单元①的刚度方程:
Fj
①
k
① ji
i
①
k
① jj
j
①
k
① ji
2
k
① jj
1
由单元③的刚度方程:
Fj
③
k
③ ji
i
③
k
③ jj
j
③
k
③ ji
3
k
③ jj
1
§2.3 结点平衡与整体刚度矩阵的集成
代入结点1的平衡条件:
k
l
xi
)
(dx j
dxi
)
(
yj
l
yi )
(dy j
dyi )
(dx j dxi ) (dy j dyi )
cos sin
由于杆件的变形产生位移:
ui dxi vi dyi
u j dxj v j dy j
因此,杆件应变为:
dl l
l
(ui
uj)
l
(vi
vj)
杆件轴力为:
(2k1 k2 )v4 P
结构的整体刚度系数
v4
P 2k1
k2
12 3
l2 l1 l1
4 P
N1
N1y
cos
k1v4
cos
k1P
(2k1 k2 ) cos
N2
k2v4
k2P 2k1 k2
位移法求解超静定结构。
§2.1 平面桁架单元的离散
结构的离散化:尽量将结构离散成数量最少的等截面直 杆单元
kki③ ③jii
ki③j
k
③ jj
3 3 3 3
§2.3 结点平衡与整体刚度矩阵的集成
2桁架杆件内力的求解方法
求解桁架内力的方法
将每个节点视为平面汇交力系平衡对象,逐个节点求解。
例1:平面桁架如图示,已知:F=2kN,
试求:各杆的内力与支座约束力。
F
y
A
B
C
解: F
FAB
A
4m
x
D
E
333 3
FAD
[A]
Fiy = 0 : − F − FAD
4 =0 32 + 42
FAD
=
−
25 4
=
−2.5kN
Fix
= 0:
FAB
+ FAD
3 5
=0
FAB = 1.5kN
FDA D
FDB
[D]
Fiy
= 0:
FDA
4 5
+
FDB
4 5
=0
FDE
Fix
= 0:
FDB
3 5
−
FDA
3 5
+
FDE
=0
FDB = 2.5kN
FDE = −3kN
F
[B]
FBA B
FBC
A
B
C
FBD
FBE
4m
D
E
Fiy = 0 : Fix = 0
FC
a
a
n B
F [节点H]
FEH
=
4 3
F
D
F =0 ix
a FEH + FGH a2 + b2 − FHK = 0
F FCF C
n
A
Fy = 0,
F
− FGH
b a2 + b2
桁架结构内力计算方法
桁架结构内力计算方法
在计算桁架结构内力时,可以采用以下步骤:
1.给定载荷:首先确定桁架结构所受到的外部载荷,包括竖向荷载、
水平荷载和斜向荷载等。
这些载荷可以通过静力学分析或者实际测量得到。
2.确定支座反力:根据结构平衡条件,计算出桁架结构支座的反力。
支座反力是由桁架结构与支座之间的约束关系决定的。
3.确定节点平衡条件:桁架结构中的每个节点都应满足平衡条件,即
节点受力平衡。
根据节点的受力平衡条件,可以得到每个节点处的力平衡
方程。
4.建立杆件的受力方程:根据构件材料的力学性质和几何形状,建立
每根杆件的受力方程。
通常使用杆件受力平衡和伸缩力平衡方程。
5.解方程求解内力:将节点平衡条件和杆件受力方程组合起来,得到
一个线性方程组。
通过求解这个方程组,可以求解出各个构件的内力大小
和方向。
在具体计算过程中,可以采用不同的计算方法来求解桁架结构的内力。
以下是几种常用的计算方法:
1.切线法:切线法是一种基于几何形状的方法,通过假设桁架结构各
个构件处于弧形变形状态,利用切线关系计算出内力。
该方法适用于相对
简单的桁架结构。
2.牛顿-拉夫逊法:牛顿-拉夫逊法是一种基于力的平衡条件的方法,
通过迭代计算桁架结构内力。
该方法适用于复杂的桁架结构。
3.力法:力法是一种基于力平衡方程和几何条件的方法,通过逐个构件计算内力。
该方法适用于任意形状的桁架结构。
以上是桁架结构内力计算的基本方法和一些常用的计算方法。
在实际应用中,还可以根据具体情况选择适合的方法进行计算。
静力学-平面简单桁架的内力计算
3. 取左(右)部分分析, 列平面任意力系的平衡方程。
2. 截面法 求某几根杆件内力常用的方法 —平面任意力系问题
例: 求:1、2、3杆件内力
3. 取左(右)部分分析,假设 “拉”
C ①D
FAy
②
A
③
F FB 列平面任C意力①系的平F衡1方程。
B
FAy
② F2
FAx E
G
F1
F2
解:1. 求支座约束力
A
(2)
F
f f
A
如果作用于物块的全部主动力合力 F
的作用线落在摩擦角之外( ≥ f ),则
无论此合力多小,物块必滑动。
FRA
2. 自锁现象
(phenomena of self-locking)
FRA
FRA
0 f 物体静止平衡时,全约束力必在摩擦角内
Fmax FS
FN f
A
(1)
F
f f
(2)
A
FAx
③ E
F3
P1
MA0
FB
ME 0
F1
MB 0
FAy
Fy 0
F2
Fx 0
FAx
Fx 0
F3
2. 把桁架截开 不要截在节点处
赛 车 起 跑
为什么赛车运动员起跑前要将车轮与 地面摩擦生烟?
第四章 摩擦 Friction
摩擦(friction): 一种极其复杂的物理-力学现象。
涉及:
“滚动摩阻定律”
—滚动摩阻系数 ,长度量纲
r
P A
FS FN
Q
r
临界平衡 P
A
Mf
FS
FN
6-3-2平面静定桁架的内力计算(精)
1. 内力计算的方法
平面静定桁架的内计算
平面静定桁架的内力计算的方法通常有结点法和截面法。 结点法是截取桁架的一个结点为隔离体,利用该结点的静力 平衡方程来计算截断杆的轴力。 截面法是用一截面(平面或曲面)截取桁架的某一部分(两个结 点以上)为隔离体,利用该部分的静力平衡方程来计算截断杆 的轴力。
FNADy=10kN-40kN=-30kN FNADy FNAD 3.35m 67KN 1.5m FNADy FNADx 3m 60kN 1.5m
国家共享型教学资源库
四川建筑职业技术学院
取结点C为隔离体 (图 c),由∑Fx=0得
FNCF= FNAC=60kN 取结点D为隔离体(图d),列出平衡方程
M
D
0
得
FNdx=-15kN
利用比例关系,得
FNd= -18.05KN
国家共享型教学资源库
四川建筑职业技术学院
国家共享型教学资源库
四川建筑职业技术学院
3. 比例关系的应用
F N F Nx FNy l lx ly
例6-5 求图a所示桁架各杆的轴力。
国家共享型教学资源库
四川建筑职业技术学院
解 (1)求支座反力。
FAx 0
FAy 40KN
FB 40KN
(2)求各杆的内力。
取结点A为隔离体(图b)
利用比例关系,得
FNb
FNbx 3.61m 18.05KN 3m
四川建筑职业技术学院
国家共享型教学资源库
(3)求杆d的内力。联合应用结点法和截面法计算杆d的内力较
为方便。先取结点E为隔离体(图c),由平衡方程∑Fx=0 ,得
FNCE= FNc=52.5kN 再用截面Ⅱ-Ⅱ截取桁架左半部分为隔离体(图d),列平衡方程 由
习题课3.静定平面桁架的内力计算
习题课3静定平面桁架的内力计算一、找出桁架的零杆(1)F P000000(2)8根零杆5根零杆F P000(3)12根零杆F PF P 00000000000F P 12根零杆(4)A 000000000006根零杆(5)a aaaS 1S 2F P 2F P F P F N 2F N 1AB C DⅡⅡⅠⅠ00000由于荷载反对称,该桁架除下部水平链杆AB 外,其余杆件受力反对称,故。
0=NCD F 1S F=∑I-I 右:20S F =∑II-II 右:12220222N P P F F F +⋅−⋅=10N F =22220222N P P F F F −+⋅+⋅=22N P F F =F PF P(7)(6)F P0附属部分6根零杆7根零杆F P0000000二、用简捷方法求桁架指定杆轴力150+II-II 左:(1)ABC DE FGHa /2a /2ⅡⅡⅠⅠ12解:CM=∑11 1.51.5()N P N P F a F a F F ⋅⋅==−压220/200.5Dy P y PMF a F a F F =+==−∑I-I 下:250.5 1.118()1N P P F F F =−⋅=−压简单桁架1.5F PF P F P F Pa a /2aa /2 1.5F P125(2)F NF yB =2F P dd dd F PAC DB dⅡⅡⅠⅠ1F yC =F PF yA =F PF xA =2F P 323F P2F P331)020()2)0()3)0()C N P P N P x N P y yC P M F d F d F d F F F F F F F F =+−======↑∑∑∑拉拉I-I 右:联合桁架解:F NF yB =2F P dd ddF PAC DB dⅡⅡⅠⅠ1F yC =F PF yA =F PF xA =2F P 323F P2F P1210()()032()D N P P yN P P P M F F d F dF F F F F ==−⋅=−==−=−∑∑压压II-II 左:整体平衡:10(322)()2ByA P P P P P MF F d F d F d F d F d==+⋅−−=↑∑(3)F P0A -F P-F P-F PF DEC 12F PF PPF 2F N F Pa /2aⅠⅠ00B 0EN MF ==∑1)I-I 右:02=N F 2)结点C :1102()yy PN P FF F F F ===∑拉3)结点F :aa /2aa /2联合桁架解:(4)F P 4m4mF P F P F P 4F P6.67F P6.67F P AB FC F N 2134ⅡⅠEⅡD GH 4m4m3m3mⅠ解:1220()0()33DN P xN P MF F FF F ====−∑∑拉压1) I-I 右:2) 结点E :2222550()346xx PN x P FF F F F F ====∑拉简单桁架F PF N 2E 23PF F P 4m4mF P F P F P 4F P6.67F P6.67F P AB FC F N 2134ⅡⅠEⅡD G H4m4m3m3mⅠ553434343x Py P PN F F F F F F ==⋅==4) 结点D :F PFN 3F N 5D2F P2F P /3410(48)2()6F N P P P M F F F F −==+=−∑压3) II-II 右:xF=∑(5)F PCA B dⅠ1 1.5F P 1.5F P02F P F Pd 0复杂桁架1)结点C:结构与荷载均对称,两斜杆轴力为零。
平面桁架有限元C#编程
1题目结构如图所示: 杆的弹性模量E 为200000Mpa ,横截面面积A 为3250mm 2。
图 1 桁架示意图2实验材料PC 机一台,Microsoft Visual Studio 软件,Ansys 软件。
3实验原理(1)桁架结构特点桁架结构中的桁架指的是桁架梁,是格一种梁式结构。
桁架结构常用于大跨度的厂房、展览馆、体育馆和桥梁等公共建筑中。
由于大多用于建筑的屋盖结构,桁架通常也被称作屋架。
结构上由光滑铰链连接,载荷只作用于节点处,只约束线位移,各杆只有轴向拉伸和压缩。
(2)平面桁架有限元分析1、单元分析局部坐标系中的干单元如图所示:图 2 局部坐标系中的杆单元以下公式描述了整体位移和局部位移之间的关系:U=Tu 其中U=[ U ix U iy U jx U jy ],T=[cos θ−sin θ00sin θcos θ0000cos θ−sin θ00sin θcos θ],u=[u ix u iy u jx u jy ]U 和u 分别代表整体坐标系和局部坐标系XY 系和局部坐标系xy 下节点i 和节点j 的位移。
T 是变形从局部坐标转换到整体坐标系下的变换阵,类似的局部力和整体力也有以下关系:F=Tf其中F=[ F ixF iy F jx F jy ] ,是整体坐标系下施加在节点i 和j 上的力的分量而且f=[ f ix f iy f jx f jy ],代表局部坐标系下施加在节点i和j上的分量。
在假设的二力杆条件下,杆只能沿着局部坐标系的x方向变形,内力也总是沿着局部坐标系x的方向,因此将y方向的位移设置为0,局部坐标系下内力和位移通过刚度矩阵有如下关系:[f ixf iyf jxf jy]=|k0−k00000−k0k00000|=[U ixU iyU jxU jy]这里k=k eq=AE/L,写成矩阵形式有:f=Ku将f和u替换成F和U有:T-1F=KT-1U将方程两边乘以T得到:F=TKT-1U其中T-1是变换矩阵T的逆矩阵,替换方程中的TKT-1和U矩阵的值,相乘后得到:[F ixF iy F jx F jy]= k[cos2θsinθcosθ−cos2θ−sinθcosθsinθcosθsin2θ−sinθcosθ−sin2θ−cos2θ−sinθcosθcos2θsinθcosθ−sinθcosθ−sin2θsinθcosθsin2θ][U ixU iyU jxU jy]上述方程代表了施加外力、单元刚度矩阵和任意单元节点的整体位移之间的关系。
实验三 平面刚架程序设计
实验三平面刚架程序设计一.平面刚架内力和位移计算总框图二.平面桁架静力分析源程序(PFSAP.FOR)C ANALYSIS PROGRAM FOR PLANE FRAMEREAL K(200,200),KE(6,6),AKE(6,6),X(100),Y(100),AL(100), & EAI(3,100),PJ(100),PF(2,100),R(6,6),P(100),FF(6),& FE(6),D(100),ADE(6),DE(6),RT(6,6),AFE(6),F(3)INTEGER JE(2,100),JN(3,100),JPJ(100),JPF(2,100),M(6),& JEAI(100),NOOPEN (6,FILE='PFSAP.IN',STA TUS='OLD')OPEN (8,FILE='PFSAP.OUT',STA TUS='NEW')1 READ (6,*)NOIF(NO.EQ.0)STOPWRITE (8,'(/A5,I3,A1)')'(NO.=',NO,')'CALL READ(NJ,N,NE,NM,NPJ,NPF,JN,X,Y,JE,JEAI,EAI,JPJ,PJ,JPF,PF)DO 5 I=1,NP(I)=0.DO 5 J=1,N5 K(I,J)=0DO 10 IE=1,NECALL MKE(KE,IE,JE,JEAI,EAI,X,Y,AL)CALL MR(R,IE,JE,X,Y)CALL MAKE(KE,R,AKE)CALL CALM(M,IE,JN,JE)CALL MK(K,AKE,M)10 CONTINUEDO 20 IP=1,NPFCALL MR(R,JPF(1,IP),JE,X,Y)CALL TRAN(R,RT)CALL PE(FE,IP,JPF,PF,AL)CALL MULV6 (RT,FE,AFE)CALL CALM(M,JPF(1,IP),JN,JE)CALL MF(P,AFE,M)20 CONTINUEDO 30 I=1,NPJ30 P(JPJ(I))=P(JPJ(I))+PJ(I)CALL SLOV(K,P,D,N)WRITE(8,'(/2(26(1H*),A))') 'RESULTS OF CALCULATION'WRITE(8,40)40 FORMAT(/5X,'NO.N',4X,'X-DISPLACEMENT',2X,& 'Y-DISPLACEMENT',3X,'ANG.ROT.(RAD)')DO 60 KK=1,NJDO 50 II=1,3F(II)=0.I1=JN(II,KK)50 IF(I1.GT.0)F(II)=D(I1)60 WRITE(8,70)KK,F(1),F(2),F(3)70 FORMAT(I8,2X,3G16.5)WRITE(8,80)80 FORMAT(/'NO.E',5X,'N(1)',8X,'Q(1)',8X,'M(1)',& 8X,'N(2)',8X,'Q(2)',8X,'M(2)')DO 130 IE=1,NECALL MADE(IE,JN,JE,D,ADE)CALL MKE(KE,IE,JE,JEAI,EAI,X,Y,AL)CALL MR(R,IE,JE,X,Y)CALL MULV6(R,ADE,DE)CALL MULV6(KE,DE,FF)DO 100 IP=1,NPFIF (JPF(1,IP).EQ.IE) THENCALL PE(FE,IP,JPF,PF,AL)DO 90 I=1,690 FF(I)=FF(I)-FE(I)ENDIF100 CONTINUEWRITE(8,110) IE,(FF(I),I=1,6)110 FORMA T(I5,2X,6G12.5)130 CONTINUEGOTO 1ENDSUBROUTINE READ(NJ,N,NE,NM,NPJ,NPF,JN,X,Y,JE,JEAI,EAI, & JPJ,PJ,JPF,PF)REAL X(100),Y(100),EAI(3,100),PJ(100),PF(2,100)INTEGER JE(2,100),JN(3,100),JPJ(100),JPF(2,100),JEAI(100), & TITLE(20)READ(6,'(20A4)') (TITLE(I),I=1,20)WRITE(8,'(/7X,20A4)')TITLEREAD (6,*) NJ,N,NE,NM,NPJ,NPFWRITE(8,'(/3(5X,A4,1H:,I2))')'NJ=',NJ,& 'N=',N,'NE=',NE,'NM=',NM,'NPJ=',NPJ,'NPF=',NPFWRITE (8,5)5 FORMAT(/4X,'NO. (1) (2) (3)',10X,'X ',8X,'Y')READ (6,10)((JN(J,I),J=1,3),X(I),Y(I),I=1,NJ)10 FORMAT(2(3I5,2G16.4))DO 20 I=1,NJ20 WRITE (8,'(2X,1H(,I2,1H),3I6,4X,2F10.3)') I,JN(1,I),JN(2,I),& JN(3,I),X(I),Y(I)WRITE (8,30)30 FORMAT(/10X,'ELEMENT NO. NODE-1 NODE-2 MA TERIALS')READ (6,40)(JE(1,I),JE(2,I),JEAI(I),I=1,NE)40 FORMAT(5(3I5))DO 50 I=1,NE50 WRITE (8,'(14X,I2,3(7X,I3))') I,JE(1,I),JE(2,I),JEAI(I)READ(6,*)((EAI(I,J),I=1,3),J=1,NM)WRITE(8,60)(J,(EAI(I,J),I=1,3),J=1,NM)60 FORMAT(/3X,'NO.MAT',6X,'ELASTIK MODULUS',8X,& 'AREA',5X,'MOMENT OF INERTIA'/(I6,9X,3G16.6))IF(NPJ.EQ.0) GOTO 90WRITE(8,'(/20X,16H NODEL LOADS )')WRITE(8,'(16XA)')' NO.DISP. V ALUE'READ (6,70) (JPJ(I),PJ(I),I=1,NPJ)70 FORMAT (5(I5,G16.4))DO 80 I=1,NPJ80 WRITE(8,'(14X,I7,F16.3)') JPJ(I),PJ(I)90 CONTINUEIF(NPF.EQ.0) GOTO 130WRITE(8,'(/20X,16HNON-NODEL LOADS )')WRITE(8,'(11X,A,8X,A,9X,A)')'NO.E NO.LOAD.MODEL','A','C'READ (6,100) (JPF(1,I),JPF(2,I),PF(1,I),PF(2,I),I=1,NPF)100 FORMAT (2(2I5,2G16.4))DO 110 I=1,NPF110 WRITE(8,120) (JPF(J,I),J=1,2),PF(1,I),PF(2,I)120 FORMAT(6X,2I8,10X,2F10.3)130 CONTINUERETURNENDSUBROUTINE MKE(KE,IE,JE,JEAI,EAI,X,Y,AL)REAL KE(6,6),X(100),Y(100),EAI(3,100),AL(100),LINTEGER JE(2,100),JEAI(100)II=JE(1,IE)JJ=JE(2,IE)MT=JEAI(IE)L=SQRT((X(JJ)-X(II))**2+(Y(JJ)-Y(II))**2)AL(IE)=LA1=EAI(1,MT)*EAI(2,MT)/LA2=EAI(1,MT)*EAI(3,MT)/L**3A3=EAI(1,MT)*EAI(3,MT)/L**2A4=EAI(1,MT)*EAI(3,MT)/LKE(1,1)=A1KE(1,4)=-A1KE(2,2)=12*A2KE(2,3)=6*A3KE(2,5)=-12*A2KE(2,6)=6*A3KE(3,3)=4*A4KE(3,5)=-6*A3KE(3,6)=2*A4KE(4,4)=A1KE(5,5)=12*A2KE(5,6)=-6*A3KE(6,6)=4*A4DO 10 I=1 ,6DO 10 K=I ,610 KE(K,I)=KE(I,K)RETURNENDSUBROUTINE MR(R,IE,JE,X,Y)REAL R(6,6),X(100),Y(100),L,CX,CYINTEGER JE(2,100)I=JE(1,IE)J=JE(2,IE)L=SQRT((X(J)-X(I))**2+(Y(J)-Y(I))**2)CX=(X(J)-X(I))/LCY=(Y(J)-Y(I))/LDO 10 J=1,6DO 10 I=1,610 R(I,J)=0.DO 20 I=1,4,3R(I,I)=CXR(I,I+1)=CYR(I+1,I)=-CYR(I+1,I+1)=CX20 R(I+2,I+2)=1.RETURNENDSUBROUTINE MAKE(KE,R,AKE)REAL KE(6,6),R(6,6),RT(6,6),TMP(6,6),AKE(6,6)CALL TRAN(R,RT)CALL MULV(RT,KE,TMP)CALL MULV(TMP,R,AKE)RETURNENDSUBROUTINE CALM(M,IE,JN,JE)INTEGER M(6),JN(3,100),JE(2,100),IEDO 10 I=1,3M(I)=JN(I,JE(1,IE))10 M(I+3)=JN(I,JE(2,IE))RETURNENDSUBROUTINE MK(K,AKE,M)REAL K(200,200),AKE(6,6)INTEGER M(6)DO 10 I=1,6DO 10 J=1,6IF(M(I).NE.0.AND.M(J).NE.0)& K(M(I),M(J))=K(M(I),M(J))+AKE(I,J)10 CONTINUERETURNENDSUBROUTINE PE(FE,IP,JPF,PF,AL)REAL FE(6),PF(2,100),AL(100),LINTEGER JPF(2,100)A=PF(1,IP)C=PF(2,IP)L=AL(JPF(1,IP))IND=JPF(2,IP)DO 5 I=1,65 FE(I)=0.GOTO(10,20,30,40,50,60),IND10 FE(2)=(7*A/20+3*C/20)*LFE(3)=(A/20+C/30)*L**2FE(5)=(3*A/20+7*C/20)*LFE(6)=-(A/30+C/20)*L**2RETURN20 FE(5)=A*C**3*(2*L-C)/2/L**3FE(2)=A*C-FE(5)FE(3)=A*C**2*(6*L*L-8*C*L+3*C*C)/12/L/LFE(6)=-A*C**3*(4*L-3*C)/12/L/LRETURN30 FE(2)=A*(L-C)**2*(L+2*C)/L**3FE(3)=A*C*(L-C)**2/L**2FE(5)=A-FE(2)FE(6)=-A*C**2*(L-C)/L**2RETURN40 FE(2)=-6*A*C*(L-C)/L**3FE(3)=A*(L-C)*(L-3*C)/L**2FE(5)=-FE(2)FE(6)=A*C*(3*C-2*L)/L**2RETURN50 FE(1)=A*(1-C/L)FE(4)=A*C/LRETURN60 FE(1)=C*L/2.FE(4)=FE(1)RETURNENDSUBROUTINE MULV6(A,B,C)REAL C(6),A(6,6),B(6)DO 10 I=1,6C(I)=0.DO 10 J=1,610 C(I)=C(I)+A(I,J)*B(J)RETURNENDSUBROUTINE MF(P,AFE,M)REAL P(100),AFE(6)INTEGER M(6)DO 10 I=1,6IF(M(I).NE.0)P(M(I))=AFE(I)+P(M(I))10 CONTINUERETURNENDSUBROUTINE SLOV(AK,P,D,N)REAL AK(200,200),P(100),D(100)DO 5 I=1,1005 D(I)=P(I)DO 10 K=1,N-1DO 10 I=K+1,NC=-AK(K,I)/AK(K,K)DO 20 J=I,N20 AK(I,J)=AK(I,J)+C*AK(K,J)10 D(I)=D(I)+C*D(K)D(N)=D(N)/AK(N,N)DO 40 I=N-1,1,-1DO 30 J=I+1,N30 D(I)=D(I)-AK(I,J)*D(J)40 D(I)=D(I)/AK(I,I)RETURNENDSUBROUTINE MADE(IE,JN,JE,D,ADE)REAL ADE(6),D(100)INTEGER IE,JN(3,100),JE(2,100)DO 3 I=1,63 ADE(I)=0DO 10 I=1,3IF (JN(I,JE(1,IE)).NE.0) ADE(I)=D(JN(I,JE(1,IE)))IF (JN(I,JE(2,IE)).NE.0) ADE(I+3)=D(JN(I,JE(2,IE)))10 CONTINUERETURNENDSUBROUTINE TRAN(R,R T)REAL R(6,6),RT(6,6)DO 10 I=1,6DO 10 J=1,610 RT(I,J)=R(J,I)RETURNENDSUBROUTINE MULV(A,B,C)REAL A(6,6),B(6,6),C(6,6)DO 10 I=1 , 6DO 10 J=1 , 6C(I,J)=0.DO 10 K=1 , 610 C(I,J)=C(I,J)+A(I,K)*B(K,J)RETURNEND三.课后习题(1)准备原始数据○1确定结点、划分单元,建立整体坐标系与局部坐标系如下图所示。
静定结构的内力—静定平面桁架(建筑力学)
截断的五根杆件中,除杆ED外,其余 四杆均汇交于结点C,由力矩方程 ΣMC=0即可求得FNED。
静定平面桁架的内力计算
(2)欲求图复杂桁架中杆CB的轴力 可用Ⅰ-Ⅰ截面将桁架截开,在
被截断的四根杆件中,除杆CB外,
其余三杆互相平行,选取y轴与此三
静定平面桁架的工程实例和计算简图
1 静定平面桁架的工程实例
桁架是由直杆组成,全部由铰结点连接而成的结构。
屋架
桥梁
静定平面桁架的工程实例和计算简图
纵梁
横梁 主桁架
工业厂房
静定平面桁架的工程实例和计算简图
2 静定平面桁架的计算简图
(1)桁架各部分名称
斜杆 Diagonal chard
弦杆
上弦杆 Top chard
静定平面桁架的内力计算
MD 0 Fx 0
FNc 4 FAy 3 20 3 0 FNc 52.5kN FNbx FNa FNc 0
FNbx FNa FNc 15kN
由比例关系可得
FNb
lb lbxy
FNbx
3.61m 3m
15kN
18.05kN
静定平面桁架的内力计算
主内力:按理想桁架算出的内力,各杆只有轴力。 次内力:实际桁架与理想桁架之间的差异引起的杆件弯曲,由此引起的内力。
实际桁架不完全符合上述假定, 但次内力的影响是次要的。
静定平面桁架的工程实例和计算简图
3 静定平面桁架的分类
(1)按几何组成规律分类 简单桁架 由基础或一个铰接三角形开始,依
次增加二元体而组成的桁架 联合桁架 由几个简单桁架按照几何不变体系
c语言计算平面桁架内力计算程序
c语言计算平面桁架内力计算程序#include<stdio.h>#include<math.h>#include<stdlib.h>#define M 5int n,nc,nn,m,e,f;//节点总数,固定节点数,自由度数,杆件数int io,jo;//单根杆对号指示数int ihl[M],ihr[M];//杆件左右节点号double a[M];//各杆截面积double mm[M];//杆件质量double ea[M];//杆件EA的值double x[M],y[M];//节点坐标double dp[M];//总体系下的节点载荷double t[2];//0,1分别为坐标转换矩阵的cos(),sin()double c[2][2];//总体系下的单刚double clxy[3];//0,1,2分别为杆长,正弦,余弦double h[M];//杆件轴力double r[M][M];//总刚度阵double rd;//桁架轴力杆局部系单刚double u[M];//桁架节点位移double v[2];//存放节点位移差double d[M];//LDLT分解时的D矩阵的对角线元素double l[M][M];////LDLT分解时的D矩阵的对角线元素double fdp[M];//总体系下支座反力void iojo(int k)//计算对号指示数io,jo{int i,j;i=ihl[k-1];//k号杆左节点号进入ij=ihr[k-1];//k号杆节点右号进入iio=2*(i-nc-1);//uxi前未知位移的个数jo=2*(j-nc-1);//uyi前未知位移的个数}void ch(int k)//计算杆长与方向余弦函数{int i,j;i=ihl[k-1];//k号杆左节点进入ij=ihr[k-1];//k号杆右节点进入jclxy[1]=x[j-1]-x[i-1];//k号杆x坐标差clxy[2]=y[j-1]-y[i-1];//k号杆y坐标差clxy[0]=sqrt(clxy[1]*clxy[1]+clxy[2]*clxy[2]);//k号杆长clxy[1]=clxy[1]/clxy[0];//k号杆件x轴余弦clxy[2]=clxy[2]/clxy[0];//k号杆件y轴余弦}void stif(int k)//计算k号杆件总体系下的单元刚度阵{int i,j;ch(k);//调用ch(),计算k号杆件杆长与余弦t[0]=clxy[1];t[1]=clxy[2];rd=ea[k-1]/clxy[0];for(i=0;i<2;i++){for(j=0;j<2;j++){c[i][j]=t[i]*t[j]*rd;}}}void dor()//总体系下的总刚度阵的组集{int i,j,k;for(i=0;i<nn;i++){for(j=0;j<nn;j++){r[i][j]=0.0;//总刚度阵清0}}for(k=1;k<=m;k++){iojo(k);//调用k的对号指示函数,从而确定组集位置stif(k);//第k号杆件的总体系下的单刚if(io>=0){for(i=io+1;i<=io+2;i++){for(j=io+1;j<=io+2;j++){r[i-1][j-1]+=c[i-io-1][j-io-1];//在r中io+1,io+2行以及io+1,io+2列位置累加k的单刚}for(j=jo+1;j<=jo+2;j++){r[i-1][j-1]-=c[i-io-1][j-jo-1];//在r中io+1,io+2行以及jo+1,jo+2列位置累加k的负单刚r[j-1][i-1]=r[i-1][j-1];}for(i=jo+1;i<=jo+2;i++){for(j=jo+1;j<=jo+2;j++){r[i-1][j-1]+=c[i-jo-1][j-jo-1];//在r中jo+1,jo+2行以及jo+1,jo+2列位置累加k的单刚}}}else if(jo>=0)//如果io<0,即左节点为固定节点,jo>=0,右端为可动节点,则只在jo+1,jo+2对角分块位置累加{for(i=jo+1;i<=jo+2;i++){for(j=jo+1;j<=jo+2;j++){r[i-1][j-1]+=c[i-jo-1][j-jo-1];//在r中jo+1,jo+2行以及jo+1,jo+2列位置累加k的单刚}}}}void choldlt()//总刚度阵的LDLT分解{int i,j,k;double m,t[M][M];for(i=0;i<nn;i++){l[i][i]=1.0;}d[0]=r[0][0];//d[0]=r[0][0]for(i=1;i<nn;i++){for(j=0;j<i;j++){m=0.0;for(k=0;k<j;k++){m+=t[i][k]*l[j][k];}t[i][j]=r[i][j]-m;l[i][j]=t[i][j]/d[j]; //计算l[i][j] m=0.0;for(k=0;k<i;k++){m+=t[i][k]*l[i][k];d[i]=r[i][i]-m; //计算d[i] }l[j][i]=l[i][j];}}}void trildlt()//回代求节点位移{int i,k;double m,y[M];y[0]=dp[0];for(i=1;i<nn;i++){m=0.0;for(k=0;k<i;k++){m+=l[i][k]*y[k];y[i]=dp[i]-m; //计算y[i] } }u[nn-1]=y[nn-1]/d[nn-1];for(i=nn-1;i>=0;i--){m=0.0;for(k=i+1;k<nn;k++){m+=l[k][i]*u[k];u[i]=y[i]/d[i]-m; //计算u[i] }}}void doh()//计算杆件的轴力{int i,k;for(k=1;k<=m;k++){iojo(k);//调用第k号杆件的左右端点的位移指示数for(i=0;i<2;i++)//计算每个节点2个自由度循环{if(io<0)//把右节点的2个位移存入v[0],v[1] {v[i]=u[jo+i]; }else//把右节点的2个位移存入v[0],v[1] {v[i]=u[jo+i]-u[io+i]; } }stif(k);//计算第k号杆件总体系单刚,存入[2] h[k-1]=0.0;//数组h[k-1]清零for(i=1;i<=2;i++)//对两个位移循环{h[k-1]=h[k-1]+t[i-1]*v[i-1]*rd;//轴力存入h[k-1] } } }void dowt() 竖直向上{ int k,ko,i; double g;printf("请输入杆件质量:\n");for(i=0;i<m;i++){ printf("mm[%d]=",i+1); scanf("%lf",&mm[i]); }for(k=1;k<=m;k++){ iojo(k);ch(k);g=mm[k-1]*9.80665; if(io>=0) { dp[io+1]=dp[io+1]-(g/2); 二分之一重力dp[jo+1]=dp[jo+1]-(g/2); 二分之一重力} else if(jo>=0) //考虑自重,且规定y 轴//g为重力//各杆件质量值输入//对桁架杆件循环//调用函数//重力计算公式//左节点为自由节点//左节点的y轴荷载减少//右节点的y轴荷载减少//若右节点为自由节点,则仅有右节点做如下处理{ ko=io+2*nc;//定义反力指示数ko等于2*(固定节点号-1)dp[jo+1]=dp[jo+1]-(g/2); fdp[ko+1]=fdp[ko+1]-(g/2); //支座反力叠加重力的一半} } }void dofanli() { intk,ko; for(k=1;k<=m;k++){iojo(k); ch(k);ko=io+2*nc; if(io<0){ fdp[ko]=fdp[ko]-h[k-1]*clxy[1]; 件轴力反力fdp[ko+1]=fdp[ko+1]-h[k-1]*clxy[2]; 件轴力反力} } } void verify() { int k,i; double sigema,sigema0,sigema1; 力,压缩许用应力printf("请输入各杆截面积:\n");for(i=0;i<m;i++) { printf("a[%d]=",i+1); scanf("%lf",&a[i]); } printf("请输入杆件拉伸许用应力:\n");scanf("%lf",&sigema0); printf("请输入杆件压缩许用应力(输入正数):\n"); scanf("%lf",&sigema1); for(k=1;k<=m;k++)//计算反力//对杆件循环//引用函数//记录左节点//左节点为固定节点//为第i个节点x轴向力加杆//为第i个节点y轴向力加杆//强度校核函数//定义应力,拉伸许用应//截面面积输入//杆件拉伸许用应力输入//杆件压缩许用应力输入//对杆件循环{sigema=h[k-1]/a[k-1]; //计算公式轴力与面积之商if(sigema>sigema0||sigema<-1*sigema1)//对应力,许用应力进行比较(注:压应力为负值,所以不小于压缩许用应力){ printf("第%d根杆件超过许用应力,为危险杆件,请增加横截面积或更换其他材料\n",k); } } }void assemble() { int k,ko; double l; printf("请输入存在装配应力的杆件号:\n"); scanf("%d",&k);printf("请输入杆件装配时的拉长长度:\n"); scanf("%lf",&l);iojo(k); ch(k);h[k-1]=h[k-1]+ea[k-1]*l/clxy[0]; if(io>=0){dp[io]=dp[io]+ea[k-1]*l*clxy[1]/clxy[0]; 加P=△l*EA/l乘其方向余弦dp[io+1]=dp[io+1]+ea[k-1]*l*clxy[2]/clxy[0];dp[jo]=dp[jo]-ea[k-1]*l*clxy[1]/clxy[0]; 应力相反dp[jo+1]=dp[jo+1]-ea[k-1]*l*clxy[2]/clxy[0]; } else { ko=io+2*nc;dp[jo]=dp[jo]-ea[k-1]*l*clxy[1]/clxy[0]; 应力相反dp[jo+1]=dp[jo+1]-ea[k-1]*l*clxy[2]/clxy[0];printf("%f,%f\n",dp[jo],dp[jo+1]); fdp[ko]=fdp[ko]+ea[k-1]*l*clxy[1]/clxy[0]; 力fdp[ko+1]=fdp[ko+1]+ea[k-1]*l*clxy[1]/clxy[0]; } }//装配应力计算//定义杆件被拉长l //引用函数//储存装配杆件的应力值//左节点x轴方向附加载荷增//y轴方向同上操作//注:右节点与左节点附加装配//注:右节点与左节点附加装配//固定节点ihl反力叠加装配应void tem()//计算温度应力{int k,ko;double t0,arf,t1,t2,detal; //定义变量,温差,热膨胀系数,初始温度,最终温度,温变引起的长度变化printf("请输入初始温度\n"); //变量输入scanf("%lf",&t1);printf("请输入最终温度\n");scanf("%lf",&t2);printf("请输入杆件的热膨胀系数\n"); scanf("%lf",&arf); t0=t2-t1; for(k=1;k<=m;k++) { iojo(k);//引用函数ch(k);detal=-1*arf*t0*clxy[0]; //等效为装配应力杆件受压h[k-1]=h[k-1]+ea[k-1]*detal/clxy[0];if(io>=0){dp[io]=dp[io]+ea[k-1]*detal*clxy[1]/clxy[0]; //左节点x轴方向附加载荷增加P=△l*EA/l乘其方向余弦dp[io+1]=dp[io+1]+ea[k-1]*detal*clxy[2]/clxy[0]; //y轴方向同上操作dp[jo]=dp[jo]-ea[k-1]*detal*clxy[1]/clxy[0]; //注:右节点与左节点附加温度应力相反dp[jo+1]=dp[jo+1]-ea[k-1]*detal*clxy[2]/clxy[0];}else{ko=io+2*nc;dp[jo]=dp[jo]-ea[k-1]*detal*clxy[1]/clxy[0]; //注:右节点与左节点附加温度应力相反dp[jo+1]=dp[jo+1]-ea[k-1]*detal*clxy[2]/clxy[0];fdp[ko]=fdp[ko]+ea[k-1]*detal*clxy[1]/clxy[0]; //固定节点ihl反力叠加温度应力fdp[ko+1]=fdp[ko+1]+ea[k-1]*detal*clxy[1]/clxy[0];}}}int main(){int i;printf(" *****************求解平面桁架节点位移与杆端力程序*****************\n\n");printf("\n ------------------输入数据时请用空格或回车符间隔------------------\n"); printf("\n\n请输入桁架节点总数n,固定节点数nc,杆件数m:\n");scanf("%d,%d,%d",&n,&nc,&m);nn=2*(n-nc);printf("请输入节点坐标:\n");for(i=0;i<n;i++){printf("x[%d]=",i+1);scanf("%lf",&x[i]);printf("y[%d]=",i+1);scanf("%lf",&y[i]);}printf("输入杆件左右节点号:\n");for(i=0;i<m;i++){printf("ihl[%d]=",i+1);scanf("%d",&ihl[i]);printf("ihr[%d]=",i+1);scanf("%d",&ihr[i]);}printf("请输入杆件的EA值[ea]:\n");for(i=0;i<m;i++){printf("ea[%d]=",i+1);scanf("%lf",&ea[i]);}printf("请输入节点载荷[dp]:\n");for(i=0;i<nn;i++){printf("dp[%d]=",i+1);scanf("%lf",&dp[i]);}dor();choldlt();printf("是否需要考虑自重,需要请输入‘1’,不需要请输入‘0’。
平面桁架内力和位移计算的框图与程序
有生命就会有希望,有信心就会有 成功,有思索就会有思路,有努力
就会有收获
14
有生命就会有希望,有信心就会有 成功,有思索就会有思路,有努力
就会有收获
15
有生命就会有希望,有信心就会有 成功,有思索就会有思路,有努力
就会有收获
16
有生命就会有希望,有信心就会有 成功,有思索就会有思路,有努力
4-14)
在式(3-5)中,ann 对应 bn,1; aii 对应 bi,1;aij 对应 bi,j-I+1。把这些关系带入
后,得等带向后回运算格式
pn
对于i pi
pn
(bpn有 成n1i 生 功1m命 ,,inn(ji就 有id会 思12a1,,ni就有 索,)j会希 就i,11做有望 会pi 收, 有) /获有 思bi1信 路 心 ,就 有会 努有 力
பைடு நூலகம்
成功, 0有思0索就0会有0思路,有努力 就会有收获
2
2.坐标变换
杆端力和杆端位移的坐标变换是通过单元坐标变换矩T阵e 即式(1-34 )完成的,令 Cx cos , C y sin ,则
Cx Cy 0 0
Te
Cy
Cx
0
0
0
0
Cx
C
y
4
4.半带存贮和带消去法
在计算连续梁程序中,由于整体刚度矩阵所占计算机存贮量小,顾采
用高斯顺序消元法解刚度方程.如果方程组的系数矩阵是对称矩阵,可以
证明在第 k 轮消元后,由第(K+1)至第 n 个方程的系数仍是对称矩阵.为了
减小运算次数,在整个消元过程中,只要存贮系数矩阵上三角部分的元素.
四平面桁架的内力计算
四平面桁架的内力计算平面桁架是由各种杆件和节点组成的结构,用来支撑和传递荷载。
在设计和分析平面桁架时,需要计算每个杆件上的内力,以确定结构的稳定性和强度。
以下是平面桁架内力计算的方法。
平面桁架的内力计算可以分为两个步骤:静力平衡方程的建立和内力计算。
首先,建立静力平衡方程。
根据平面桁架的静力学原理,每个节点上的力的合力应等于零,每个节点上的力的合力矩也应等于零。
使用静力平衡方程可以得到各个节点上的力的关系。
节点力的计算可以通过以下步骤进行:1.选择一个节点作为参考节点,通常选择固定支座或者荷载作用点。
2.对于选择的参考节点,假设节点上的力的方向和大小,通常选择正向或者逆时针方向。
3.根据杆件的连接方式和静力平衡方程,计算其他节点上的力的方向和大小。
4.如果计算出的节点力的方向和大小与假设的相符,则计算准确。
如果不相符,则重新选择节点力的方向和大小,重复第3步。
5.重复第2和第3步,直到计算出所有节点上的力的方向和大小。
节点力的方向和大小确定后,可以计算每个杆件上的内力。
杆件内力的计算可以通过以下步骤进行:1.根据杆件的连接方式,在每个节点上绘制弯矩图和剪力图。
2.根据支点条件和杆件的连接方式,计算杆件上的弯矩和剪力。
3.根据杆件的材料性质和截面形状,计算杆件上的正应力和切应力。
4.计算出每个杆件上的内力,包括正应力和切应力的大小和方向。
在计算内力时,需要注意以下几个问题:1.合理选择参考节点,通常选择固定支座或者荷载作用点,可以简化计算过程。
2.在考虑弯矩和剪力时,需要考虑实际杆件长度和杆件的连接方式。
3.在计算正应力和切应力时,需要考虑杆件的材料性质和截面形状。
4.内力的计算需要满足力的平衡条件和结构的力学平衡条件。
总之,平面桁架的内力计算是通过建立静力平衡方程和应力平衡方程,确定每个节点和杆件上的力的大小和方向,然后根据杆件的连接方式和材料性质,计算杆件上的弯矩和剪力,最终计算出杆件上的内力。
§7 .2 桁架内力的计算
3 P 4
(↑)
2 .取节点B
F
iy 0
FGB sin 60 FBy 0
E
C
2 3 P FGB P 2 3 4
G P
Fix 0
FDB
FGB cos60 FDB 0
1 P P ( ) 2 2 4
FAx FAy A
FBy
图示桁架各杆长均为1m,P1=10kN , P2=7kN , 求杆 EG的内力。 解: (1)求支座约束力
以整体为研究对象:
M
iA
0
F
P 2 P2 3FBy P 1 P2 2 0 FBy 1 1 3
FAy
8 kN
F
iy
0
C
E
D
FAy P P2 FBy 9 kN 1
3 10 F 2F 5 3
FGB
FGB FGH
G
FDG
例题
例 题 9
§7 力系的平衡
FAy
MA
3m 2m 2m
B G 已求得
FGH 8 F 3
3.取整体为研究对象 Fix 0 FAx FGH 0
FAx FGH 8 F 3
P
P
C
P
D
F
FO 或 FO 称为二力杆的内力。可用代数值FO表示。
二力杆内力的符号规定:
FAB
FA
A
O FO
FO
O
B F B
二力杆的内力以拉力为正,压力为负。
FAB
FCD
FCD
A B AB杆内力FAB为正
平面桁架静力分析有限元程序
有限单元法平面桁架静力分析有限元程序#define NODE_NUM 300#define ELE_NUM 200#include<stdlib.h>#include<stdio.h>#include<math.h>int nj,ne,nm,nz,npj,jm[ELE_NUM][3],nzc[60],nj2,bw;float xy[NODE_NUM][4],EA[5],p[NODE_NUM],pj,F[ELE_NUM]; float ek[5][5];double **K,*f;int BAND2(int n,int m,double **K,double *f);double **TwoArrayAlloc(int,int);void TwoArrayFree(double**);FILE *outfile;/*-----------------------------*/double **TwoArrayAlloc(int r,int c){double *x,**y;int n;x=(double*)calloc(r*c,sizeof(double));y=(double**)calloc(r,sizeof(double*));for(n=0;n<=r-1;++n)y[n]=&x[c*n];return(y);}/*--------------------------------*/void TwoArrayFree(double **x){free(x[0]);free(x);}/*--------------------------------*/int BAND2(int n,int m,double **K,double *f) /*解方程函数*/ {int i,j,t,ij,ji,it,jt,tm,m1;double s,w;m1=m+1;for(i=1;i<=n;i++){if(K[i-1][m1-1]<=0) return(0);w=0.0;if(i>m1) tm=i-m;else tm=1;for(j=tm;j<=i;j++){s=0.0;ij=j-i+m1;for(t=tm;t<=j-1;t++){it=t-i+m1;jt=t-j+m1;s=s+K[i-1][it-1]*K[j-1][jt-1]/K[t-1][m1-1];}K[i-1][ij-1]=K[i-1][ij-1]-s;if(j==i)f[i-1]=f[i-1]-w;elsew=w+K[i-1][ij-1]*f[j-1]/K[j-1][m1-1];}}for(i=n;i>=1;i--){s=0.0;if(i>n-m1) tm=n; else tm=i+m;for(j=i+1;j<=tm;j++){ji=i-j+m1;s=s+K[j-1][ji-1]*f[j-1];}f[i-1]=(f[i-1]-s)/K[i-1][m1-1];}return 1;}/*--------------------------------------------*/void input()/*输入函数*/{int jj,j,i,nh,nl;float dx,dy;FILE *infile;infile=fopen("dat.txt","r");outfile=fopen("out.txt","w");fscanf(infile,"%d%d%d%d%d",&nj,&ne,&nm,&nz,&npj); /*读入控制数据*/fprintf(outfile,"The Num. Of Nodes: %3d\n",nj);/*输出节点数*/fprintf(outfile,"The Num. Of Mem.: %3d\n",ne);/*输出单元数*/fprintf(outfile,"The Num. Of Type Of Section Characteristic: %3d\n",nm);/*输出材料类型数*/fprintf(outfile,"The Num. Of Restriction: %3d\n",nz);/*输出荷载数*/ fprintf(outfile,"The Num. Of Nodal Loads: %3d\n",npj);/*输出荷载数*/for(i=1;i<=nj;i++){for(j=1;j<3;j++)fscanf(infile,"%f",&xy[i][j]);/*读入节点坐标*/}fprintf(outfile,"Coordinates x and y Of Nodes:\n");fprintf(outfile," Node x y\n");for(i=1;i<=nj;i++){fprintf(outfile,"%10d%10.2f%10.2f\n",i,xy[i][1],xy[i][2]);/*输出节点坐标*/}for(i=1;i<=ne;i++){for(j=0;j<3;j++)fscanf(infile,"%d",&jm[i][j]);/*读入单元信息(材料类型、单元左右节点码)*/}fprintf(outfile,"The Nodes Num. Of Mem.:\n");fprintf(outfile," Mem. Type Left Right\n");for(i=1;i<=ne;i++){fprintf(outfile,"%10d%10d%10d%10d\n",i,jm[i][0],jm[i][1],jm[i][2]);/*输出单元信息*/}for(i=1;i<=nm;i++) fscanf(infile,"%f",&EA[i]);/*读入材料刚度*/for(i=1;i<=nm;i++){fprintf(outfile,"nm=%d EA=%f\n",i,EA[i]);/*输出材料刚度*/ }for(i=1;i<=nz;i++) fscanf(infile,"%d",&nzc[i]);/*读入约束位置*/ fprintf(outfile,"The Position Of Restriction: ");for(i=1;i<=nz;i++){fprintf(outfile,"%d ",nzc[i]);/*输出约束位置*/}fprintf(outfile,"\n");nj2=nj*2;/*形成荷载*/for(i=0;i<nj2;i++) p[i]=0.0;for(i=0;i<npj;i++){fscanf(infile,"%d%f",&jj,&pj);/*读入荷载位置、荷载大小*/ p[jj]=pj;}fclose(infile);}/*-------------------------------------------------------------------------*/int bwidth()/*求半带宽函数*/{int ie,i,j,min,max,jj,ib,lk,m,nn[8];ib=0;for(ie=1;ie<=ne;ie++){m=abs(jm[ie][1]-jm[ie][2]);if(m>ib) ib=m;/*找出单元左右节点码之差的最大值*/ }return 2*ib+2;/*返回半带宽*/}/*-------------------------------------------------------------------------------*/ void stiff(int ie) /*形成单刚函数*/{int i,j,k,m,n;float dx,dy,dz,l,cx,cy,cz,ea;i=jm[ie][1];/*单元左节点号*/j=jm[ie][2];/*单元右节点号*/m=jm[ie][0];/*单元材料类型号*/dx=xy[j][1]-xy[i][1];/*单元左右节点横坐标之差*/dy=xy[j][2]-xy[i][2];/*单元左右节点纵坐标之差*/l=sqrt(dx*dx+dy*dy);/*单元长度*/cx=dx/l;/*求余弦*/cy=dy/l;/*求正弦*/ea=EA[m]/l;/*fprintf(outfile,"%d%10.2f\n",ie,l);*/ek[1][1]=ek[3][3]=cx*cx*ea;/*求单刚*/ek[2][2]=ek[4][4]=cy*cy*ea;ek[2][1]=ek[1][2]=ek[3][4]=ek[4][3]=cx*cy*ea;ek[4][1]=ek[1][4]=ek[3][2]=ek[2][3]=-cx*cy*ea;ek[1][3]=ek[3][1]=-cx*cx*ea;ek[2][4]=ek[4][2]=-cy*cy*ea;}/*-----------------------------------------------------------------------------*/ int ekzk(int ie)/*集成总刚度*/{int i1,j1,i,j,i2,j2,ii,jj,ji;for(i1=1;i1<=2;i1++){for(i2=1;i2<=2;i2++){i=2*(i1-1)+i2;ii=2*(jm[ie][i1]-1)+i2;for(j1=1;j1<=2;j1++){for(j2=1;j2<=2;j2++){j=2*(j1-1)+j2;jj=2*(jm[ie][j1]-1)+j2;ji=bw+jj-ii;if(ji<=bw) K[ii-1][ji-1]=K[ii-1][ji-1]+ek[i][j];}}}}}/*---------------------------------------------------------------------------*/ void force()/*求单元轴力函数*/{int i,j,ie,m;float dx,dy,dz,l,cx,cy,cz,ea,w[7];fprintf(outfile,"============dyzl==================\n");for(ie=1;ie<=ne;ie++){i=jm[ie][1];j=jm[ie][2];m=jm[ie][0];w[1]=f[2*i-2];w[2]=f[2*i-1];w[3]=f[2*j-2];w[4]=f[2*j-1];dx=xy[j][1]-xy[i][1];dy=xy[j][2]-xy[i][2];l=sqrt(dx*dx+dy*dy);cx=dx/l;cy=dy/l;ea=EA[m]/l;dx=w[3]-w[1];/*左右节点水平位移之差*/dy=w[4]-w[2];/*左右节点竖直位移之差*/l=ea*(cx*dx+cy*dy);/*求单元轴力*/F[ie]=1;fprintf(outfile," %d %10.4f\n",ie,l);/*输出单元号、单元轴力*/ }}/*--------------------------------------------------------------------------------------*/ void main(){int ie,i,j,ii,jj,i1,j1;float p1,p2,p3;input();bw=bwidth();K=TwoArrayAlloc(nj2,bw);f=(double*)calloc(nj2,sizeof(double));if(f==NULL) exit(1);for(i=0;i<nj2;i++) f[i]=p[i+1];for(ie=1;ie<=ne;ie++){stiff(ie);ekzk(ie);}for(i=1;i<=nz;i++)/*约束处理(后处理的0、1置换法)*/{j=nzc[i]-1;for(i1=0;i1<bw-1;i1++){K[j][i1]=00.00;/*将有约束处的行置0*/ii=j+i1+1;if(ii<nj2) K[ii][bw-i1-2]=00.00;/*将有约束处的列置0*/ }K[j][bw-1]=1.00;/*将对角线元素置1*/f[j]=0;}/*fprintf(outfile,"========================zk======================\n");for(i=0;i<nj2;i++){for(j=0;j<bw;j++){fprintf(outfile,"%6.2f",K[i][j]);}fprintf(outfile,"\n");}*/fprintf(outfile,"============jdhz=================\n");for(i=0;i<nj2;i++){fprintf(outfile,"%d %6.2f\n",i+1,f[i]);/*输出节点力*/}if(!BAND2(nj2,bw-1,K,f)){printf("Failed!\n"); exit(0);}fprintf(outfile,"=========jdwy==========\n");fprintf(outfile," x y\n");for(ii=0;ii<nj;ii++){p1=f[2*ii];p2=f[2*ii+1];fprintf(outfile,"%2d %14.5f %14.5f\n",ii+1,p1,p2);/*输出节点位移*/ }force();fclose(outfile);}。
VISUALC++编程计算桁架内力
(、2 。 )
(3) (4)
分析 以形 成结 构 的刚度矩 阵 [K],最 后求解 式 (6) 的方 程 组 ,得 到 节 点 位 移 {△}后 再 求 出 各 杆 件
内力【ll。
J ̄ E T]={∞ 锄口}。
函数 ASSEMT,根据平面桁架杆件两端节点 的 编码 ,将该杆的单元刚度矩阵 [K] )并入结构总刚 度矩阵 [K]中。K 存放 结构总 刚度矩 阵 [K],第 一 次调用为零阵 ,输 出时多 了一根杆件 的[K]c 。函 数源代 码包 括 6个 文件 Truss.C,Gauss.C,stilt.C,
维普资讯
广西水 利水电 GX WATER RF_ ̄ URCES&、HYDROFOWER ENGINEERING 2003(3)
度矩阵[K]( 。,函数代码为 : int stilt(double EA ,double X1,double Y1,
double X2,double Y2,double*B ,double*KE ) {int i,j;double RD,L0;L0 =sqrt((X2一
X1)*(X2一X1)+(Y2一 Y1)*(Y2一 Y1));RD = EA/LO;oosi(X1,Y1,X2,Y2,B);
{or(i=1;i< =4;i+ +) {for(j=1;j<=4;j++){KE [(i一1)*4+j]
=B [i]*B [j]*RD ;}l return(I); } 函数 PLACT,对于任一平 面桁 架杆件 ,根据 两
正 ,受压者 为负 ,所 以有 N = 2=一 l,最后得 出
各单元内力公式为 :
桁架计算TRUSS
桁架内力计算程序(TRUSS)一、程序功能及编制方法桁架内力计算程序(TRUSS),能计算任意平面和空间桁架(包括网架)在结点荷载作用下各结点的位移和各杆的轴力.程序采用变带宽一维数组存储总刚度矩阵,先处理法引进支座条件.计算结果输出各结点的位移和各杆的轴力.二、程序使用方法使用方法与“APF”程序相同.用文件编辑编辑器建立数据文件后即可运行.计算结果将写在结果文件中.三、数据文件填写格式数据文件填写格式大致与APF程序相似.1.总信息:T,NJ,NE,NR,NB,NP,EO,DS其中:T——桁架类型,平面桁架 T=2,空间桁架 T=3.NR——支座约束数.其他变量与APF程序相同.2.结点坐标数组XYZ(NJ, 3)每个结点填一行,每行三个数分别填写结点的x,y,z三个坐标数值,平面桁架只填x,y 值(单位:m).3.单元信息数组G(NE)采用紧缩存储方式,每个单元填一个数.把单元的左端、右端结点号和杆的类型号三个数紧缩为一个数.例如某单元左端结点号为15,在端结点号为8,类型号为3,则写成0.15083,一般格式为0.×××××.4.单元截面信息数组AI(NB)填写各类单元的杆截面面积(m2).5.约束信息数组R(NR)采用紧缩存储方式,每个约束(支座链杆)填一个数.把约束作用的作用点写在该数的整数部分,约束的方向写在小数部分.x方向的约束为“l”,y方向的约束为“2”.例如某支座链杆作用在 17号结点上,方向沿整体坐标 y方向,则写为 17.2,一般格式为××.×.6.结点荷载信息数组F(NP,2)每个结点荷载填一行,每行两个数.前一个数用紧缩方式填写荷载作用的结点号和作用方向,格式与约束信息的格式相同.后一个数为荷载的数值.单位为kN,与整体坐标方向一致者为正值,相反者为负值.例如,作用在16号结点上,数值为183.5 kN,方向向下的力,则写成:16.2,-183.5(这里,假定坐标轴y轴向上).四、计算例题例TRUEX1试计算图示空间桁架各杆的轴力.[解] 因为是静定桁架,各杆的弹性模量和横截面面积大小均不影响杆件的内力,故假定弹性模过和截面面积均等于1.选择坐标系及结点编号如图所示.输入数据文件取名为TRUEX1.DAT,输出数据文件取名为TRUEX1.OUT.输入数据文件内容为:39,15,12,1,3,1,00,6,8,4,6,8,4,0,8,0,0,82,0,11,0,6,0,4,6,0,4,0,0,0,0,00.01021,0.02031,0,03041,0.04011,0.010510.02051,0.03051,0.04051,0.01061,0.020710.03081,0.04091,0.04061,0.01071,0.0208116.1,6.2,6.3,7.1,7.2,7.3,8.1,8.2,8.3,9.1,9.2,9.33.2,6,4.2,6,5.2,6计算结果:N(1)=1.000N(2)=-6.000N(3)=-1.000N(4)=3.000N(5)=-3.500N(6)=-3.500N(7)=1.803N(8)=1.803N(9)=-1.500N(10)=-13.500N(11)=1.500N(12)=13.500N(13)=-15.000N(14)=0.000N(15)=15.000(单位:kN)例TRUEX2 试求示平面桁架各杆轴力.解:建立名为TRUEX2.DAT 的数据文件,内容如下:28,13,3,1,3,1,00,0,6,0,0,4,3,4,6,4,0,8,3,8,6,80.01021,0.01031,0.01041,0.02041,0.02051,0.03041,0.04051 0.03061,0.03071,0.05071,0.05081,0.06071,0.07081 11.1,1.2,2.25.1,-40,8.1,-40,7.2,-80计算结果:N(1)=-40.000N(2)=-66.667N(3)=-66.667N(4)=66.667N(5)=-13.333N(6)=50.000N(7)=-30.000N(8)=0.000N(9)=-83.333例TRUEX2图例TRUEX1图N(10)=-16.667 N(11)=0.000 N(12)=0.000 N(13)=-40.000。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
#include<stdio.h>#include<math.h>#include<stdlib.h>#define M 5int n,nc,nn,m,e,f;//节点总数,固定节点数,自由度数,杆件数int io,jo;//单根杆对号指示数int ihl[M],ihr[M];//杆件左右节点号double a[M];//各杆截面积double mm[M];//杆件质量double ea[M];//杆件EA的值double x[M],y[M];//节点坐标double dp[M];//总体系下的节点载荷double t[2];//0,1分别为坐标转换矩阵的cos(),sin()double c[2][2];//总体系下的单刚double clxy[3];//0,1,2分别为杆长,正弦,余弦double h[M];//杆件轴力double r[M][M];//总刚度阵double rd;//桁架轴力杆局部系单刚double u[M];//桁架节点位移double v[2];//存放节点位移差double d[M];//LDLT分解时的D矩阵的对角线元素double l[M][M];////LDLT分解时的D矩阵的对角线元素double fdp[M];//总体系下支座反力void iojo(int k)//计算对号指示数io,jo{int i,j;i=ihl[k-1];//k号杆左节点号进入ij=ihr[k-1];//k号杆节点右号进入iio=2*(i-nc-1);//uxi前未知位移的个数jo=2*(j-nc-1);//uyi前未知位移的个数}void ch(int k)//计算杆长与方向余弦函数{int i,j;i=ihl[k-1];//k号杆左节点进入ij=ihr[k-1];//k号杆右节点进入jclxy[1]=x[j-1]-x[i-1];//k号杆x坐标差clxy[2]=y[j-1]-y[i-1];//k号杆y坐标差clxy[0]=sqrt(clxy[1]*clxy[1]+clxy[2]*clxy[2]);//k号杆长clxy[1]=clxy[1]/clxy[0];//k号杆件x轴余弦clxy[2]=clxy[2]/clxy[0];//k号杆件y轴余弦void stif(int k)//计算k号杆件总体系下的单元刚度阵{int i,j;ch(k);//调用ch(),计算k号杆件杆长与余弦t[0]=clxy[1];t[1]=clxy[2];rd=ea[k-1]/clxy[0];for(i=0;i<2;i++){for(j=0;j<2;j++){c[i][j]=t[i]*t[j]*rd;}}}void dor()//总体系下的总刚度阵的组集{int i,j,k;for(i=0;i<nn;i++){for(j=0;j<nn;j++){r[i][j]=0.0;//总刚度阵清0}}for(k=1;k<=m;k++){iojo(k);//调用k的对号指示函数,从而确定组集位置stif(k);//第k号杆件的总体系下的单刚if(io>=0){for(i=io+1;i<=io+2;i++){for(j=io+1;j<=io+2;j++){r[i-1][j-1]+=c[i-io-1][j-io-1];//在r中io+1,io+2行以及io+1,io+2列位置累加k的单刚}for(j=jo+1;j<=jo+2;j++){r[i-1][j-1]-=c[i-io-1][j-jo-1];//在r中io+1,io+2行以及jo+1,jo+2列位置累加k的负单刚r[j-1][i-1]=r[i-1][j-1];}}for(i=jo+1;i<=jo+2;i++){for(j=jo+1;j<=jo+2;j++){r[i-1][j-1]+=c[i-jo-1][j-jo-1];//在r中jo+1,jo+2行以及jo+1,jo+2列位置累加k的单刚}}}else if(jo>=0)//如果io<0,即左节点为固定节点,jo>=0,右端为可动节点,则只在jo+1,jo+2对角分块位置累加{for(i=jo+1;i<=jo+2;i++){for(j=jo+1;j<=jo+2;j++){r[i-1][j-1]+=c[i-jo-1][j-jo-1];//在r中jo+1,jo+2行以及jo+1,jo+2列位置累加k的单刚}}}}}void choldlt()//总刚度阵的LDLT分解{int i,j,k;double m,t[M][M];for(i=0;i<nn;i++){l[i][i]=1.0;}d[0]=r[0][0];//d[0]=r[0][0]for(i=1;i<nn;i++){for(j=0;j<i;j++){m=0.0;for(k=0;k<j;k++){m+=t[i][k]*l[j][k];}t[i][j]=r[i][j]-m;l[i][j]=t[i][j]/d[j]; //计算l[i][j]m=0.0;for(k=0;k<i;k++){m+=t[i][k]*l[i][k];d[i]=r[i][i]-m; //计算d[i]}l[j][i]=l[i][j];}}}void trildlt()//回代求节点位移{int i,k;double m,y[M];y[0]=dp[0];for(i=1;i<nn;i++){m=0.0;for(k=0;k<i;k++){m+=l[i][k]*y[k];y[i]=dp[i]-m; //计算y[i] }}u[nn-1]=y[nn-1]/d[nn-1];for(i=nn-1;i>=0;i--){m=0.0;for(k=i+1;k<nn;k++){m+=l[k][i]*u[k];u[i]=y[i]/d[i]-m; //计算u[i]}}}void doh()//计算杆件的轴力{int i,k;for(k=1;k<=m;k++){iojo(k);//调用第k号杆件的左右端点的位移指示数for(i=0;i<2;i++)//计算每个节点2个自由度循环{if(io<0)//把右节点的2个位移存入v[0],v[1]{v[i]=u[jo+i];}else//把右节点的2个位移存入v[0],v[1]{v[i]=u[jo+i]-u[io+i];}}stif(k);//计算第k号杆件总体系单刚,存入[2]h[k-1]=0.0;//数组h[k-1]清零for(i=1;i<=2;i++)//对两个位移循环{h[k-1]=h[k-1]+t[i-1]*v[i-1]*rd;//轴力存入h[k-1]}}}void dowt() //考虑自重,且规定y轴竖直向上{int k,ko,i;double g; //g为重力printf("请输入杆件质量:\n");for(i=0;i<m;i++) //各杆件质量值输入{printf("mm[%d]=",i+1);scanf("%lf",&mm[i]);}for(k=1;k<=m;k++) //对桁架杆件循环{iojo(k); //调用函数ch(k);g=mm[k-1]*9.80665; //重力计算公式if(io>=0) //左节点为自由节点{dp[io+1]=dp[io+1]-(g/2); //左节点的y轴荷载减少二分之一重力dp[jo+1]=dp[jo+1]-(g/2); //右节点的y轴荷载减少二分之一重力}else if(jo>=0) //若右节点为自由节点,则仅有右节点做如下处理{ko=io+2*nc; //定义反力指示数ko 等于2*(固定节点号-1)dp[jo+1]=dp[jo+1]-(g/2);fdp[ko+1]=fdp[ko+1]-(g/2); //支座反力叠加重力的一半}}}void dofanli() //计算反力{int k,ko;for(k=1;k<=m;k++) //对杆件循环{iojo(k); //引用函数ch(k);ko=io+2*nc; //记录左节点if(io<0) //左节点为固定节点{fdp[ko]=fdp[ko]-h[k-1]*clxy[1]; //为第i个节点x轴向力加杆件轴力反力fdp[ko+1]=fdp[ko+1]-h[k-1]*clxy[2]; //为第i个节点y轴向力加杆件轴力反力}}}void verify() //强度校核函数{int k,i;double sigema,sigema0,sigema1; //定义应力,拉伸许用应力,压缩许用应力printf("请输入各杆截面积:\n"); //截面面积输入for(i=0;i<m;i++){printf("a[%d]=",i+1);scanf("%lf",&a[i]);}printf("请输入杆件拉伸许用应力:\n"); //杆件拉伸许用应力输入scanf("%lf",&sigema0);printf("请输入杆件压缩许用应力(输入正数):\n"); //杆件压缩许用应力输入scanf("%lf",&sigema1);for(k=1;k<=m;k++) //对杆件循环{sigema=h[k-1]/a[k-1]; //计算公式轴力与面积之商if(sigema>sigema0||sigema<-1*sigema1) //对应力,许用应力进行比较(注:压应力为负值,所以不小于压缩许用应力){printf("第%d根杆件超过许用应力,为危险杆件,请增加横截面积或更换其他材料\n",k);}}}void assemble() //装配应力计算{int k,ko;double l; //定义杆件被拉长l printf("请输入存在装配应力的杆件号:\n");scanf("%d",&k);printf("请输入杆件装配时的拉长长度:\n");scanf("%lf",&l);iojo(k); //引用函数ch(k);h[k-1]=h[k-1]+ea[k-1]*l/clxy[0]; //储存装配杆件的应力值if(io>=0){dp[io]=dp[io]+ea[k-1]*l*clxy[1]/clxy[0]; //左节点x轴方向附加载荷增加P=△l*EA/l乘其方向余弦dp[io+1]=dp[io+1]+ea[k-1]*l*clxy[2]/clxy[0]; //y轴方向同上操作dp[jo]=dp[jo]-ea[k-1]*l*clxy[1]/clxy[0]; //注:右节点与左节点附加装配应力相反dp[jo+1]=dp[jo+1]-ea[k-1]*l*clxy[2]/clxy[0];}else{ko=io+2*nc;dp[jo]=dp[jo]-ea[k-1]*l*clxy[1]/clxy[0]; //注:右节点与左节点附加装配应力相反dp[jo+1]=dp[jo+1]-ea[k-1]*l*clxy[2]/clxy[0];printf("%f,%f\n",dp[jo],dp[jo+1]);fdp[ko]=fdp[ko]+ea[k-1]*l*clxy[1]/clxy[0]; //固定节点ihl反力叠加装配应力fdp[ko+1]=fdp[ko+1]+ea[k-1]*l*clxy[1]/clxy[0];}}void tem() //计算温度应力{int k,ko;double t0,arf,t1,t2,detal; //定义变量,温差,热膨胀系数,初始温度,最终温度,温变引起的长度变化printf("请输入初始温度\n"); //变量输入scanf("%lf",&t1);printf("请输入最终温度\n");scanf("%lf",&t2);printf("请输入杆件的热膨胀系数\n");scanf("%lf",&arf);t0=t2-t1;for(k=1;k<=m;k++){iojo(k); //引用函数ch(k);detal=-1*arf*t0*clxy[0]; //等效为装配应力杆件受压h[k-1]=h[k-1]+ea[k-1]*detal/clxy[0];if(io>=0){dp[io]=dp[io]+ea[k-1]*detal*clxy[1]/clxy[0];//左节点x轴方向附加载荷增加P=△l*EA/l乘其方向余弦dp[io+1]=dp[io+1]+ea[k-1]*detal*clxy[2]/clxy[0]; //y轴方向同上操作dp[jo]=dp[jo]-ea[k-1]*detal*clxy[1]/clxy[0]; //注:右节点与左节点附加温度应力相反dp[jo+1]=dp[jo+1]-ea[k-1]*detal*clxy[2]/clxy[0];}else{ko=io+2*nc;dp[jo]=dp[jo]-ea[k-1]*detal*clxy[1]/clxy[0]; //注:右节点与左节点附加温度应力相反dp[jo+1]=dp[jo+1]-ea[k-1]*detal*clxy[2]/clxy[0];fdp[ko]=fdp[ko]+ea[k-1]*detal*clxy[1]/clxy[0]; //固定节点ihl反力叠加温度应力fdp[ko+1]=fdp[ko+1]+ea[k-1]*detal*clxy[1]/clxy[0];}}}int main(){int i;printf(" *****************求解平面桁架节点位移与杆端力程序*****************\n\n");printf("\n ------------------输入数据时请用空格或回车符间隔------------------\n");printf("\n\n请输入桁架节点总数n,固定节点数nc,杆件数m:\n");scanf("%d,%d,%d",&n,&nc,&m);nn=2*(n-nc);printf("请输入节点坐标:\n");for(i=0;i<n;i++){printf("x[%d]=",i+1);scanf("%lf",&x[i]);printf("y[%d]=",i+1);scanf("%lf",&y[i]);}printf("输入杆件左右节点号:\n");for(i=0;i<m;i++){printf("ihl[%d]=",i+1);scanf("%d",&ihl[i]);printf("ihr[%d]=",i+1);scanf("%d",&ihr[i]);}printf("请输入杆件的EA值[ea]:\n");for(i=0;i<m;i++){printf("ea[%d]=",i+1);scanf("%lf",&ea[i]);}printf("请输入节点载荷[dp]:\n");for(i=0;i<nn;i++){printf("dp[%d]=",i+1);scanf("%lf",&dp[i]);}dor();choldlt();printf("是否需要考虑自重,需要请输入‘1’,不需要请输入‘0’。