PlaneTruss

m

function

PlaneTruss

%本程式用於求解平面桁架問題的節點力和節點位移

%使用前請將本檔案(‘PlaneTruss。m’)與‘myTruss。m’放置在同一資料夾中

%編寫時間:2020年5月25日-28日

setData

%初始化資料

SovelModel

%求解

getRes

%輸出結果

return

%Step1

function

setData

%讀取結構引數

global

Node

Element

Material

BC1

F

Node

Element

Material

BC1

F

]=

feval

‘myTruss’

);

return

%Step2

function

SovelModel

global

Node

Element

nodeNum

eleNum

F

totalK

Delta

Reaction

axisF

nodeNum

~

]=

size

Node

);

eleNum

~

]=

size

Element

);

totalK

=

sparse

nodeNum

*

2

nodeNum

*

2

);

for

i

=

1

1

eleNum

localKe

c

s

]=

gEStiffness

i

);

Ke

=

gTransK

localKe

c

s

);

gTStiffness

i

Ke

);

end

modK

=

gBoundary

Delta

=

modK

\

F

Reaction

=

totalK

*

Delta

axisF

=

gElementF

return

%Step3

function

getRes

%輸出結果

global

nodeNum

eleNum

Delta

Reaction

axisF

fprintf

‘ 節點位移\n’

);

fprintf

‘節點號 x方向位移 y方向位移\n’

);

for

i

=

1

1

nodeNum

fprintf

‘%3d %10。6f %10。6f\n\n’

i

Delta

((

i

-

1

*

2

+

1

1

+

0

Delta

((

i

-

1

*

2

+

2

1

+

0

);

end

fprintf

‘ 節點外力\n’

);

fprintf

‘節點號 x方向外力 y方向外力\n’

);

for

j

=

1

1

nodeNum

fprintf

‘%3d %10。6f %10。6f\n’

j

Reaction

((

j

-

1

*

2

+

1

1

+

0

Reaction

((

j

-

1

*

2

+

2

1

+

0

);

end

fprintf

‘ 杆件軸力\n’

);

fprintf

‘單元號 軸力\n’

);

for

k

=

1

1

eleNum

fprintf

‘%3d %10。6f\n’

k

axisF

k

1

+

0

);

end

return

function

[localKe,c,s]

=

gEStiffness

i

%計算區域性座標系下的單元剛度陣

global

Material

Node

Element

E

=

Material

Element

i

4

),

1

);

% I=Material(Element(i,4),2); %桁架暫時用不到I

A

=

Material

Element

i

4

),

3

);

x1

=

Node

Element

i

2

),

2

);

y1

=

Node

Element

i

2

),

3

);

x2

=

Node

Element

i

3

),

2

);

y2

=

Node

Element

i

3

),

3

);

L

=

sqrt

((

x2

-

x1

^

2

+

y2

-

y1

^

2

);

c

=

x2

-

x1

/

L

s

=

y2

-

y1

/

L

localKe

=

E

*

A

/

L

。*

1

0

-

1

0

0

0

0

0

-

1

0

1

0

0

0

0

0

return

function

Ke

=

gTransK

localKe,c,s

%轉換為整體座標系下的單元矩陣

global

T

T

=[

c

s

0

0

-

s

c

0

0

0

0

c

s

0

0

-

s

c

Ke

=

T

‘*

localKe

*

T

return

function

gTStiffness

ie,Ke

%整合單元剛度陣到整體剛度陣

global

Element

totalK

for

i

=

1

1

2

for

j

=

1

1

2

for

m

=

1

1

2

for

n

=

1

1

2

x

=(

i

-

1

*

2

+

m

y

=(

j

-

1

*

2

+

n

X

=(

Element

ie

i

+

1

-

1

*

2

+

m

Y

=(

Element

ie

j

+

1

-

1

*

2

+

n

totalK

X

Y

)=

totalK

X

Y

+

Ke

x

y

);

end

end

end

end

return

function

modK

=

gBoundary

()

%處理邊界條件

%採用乘大數法

global

BC1

totalK

F

modK

=

totalK

i

~

]=

size

BC1

);

for

x

=

1

1

i

m

=(

BC1

x

1

-

1

*

2

+

BC1

x

2

);

F

m

1

)=

F

m

1

*

BC1

x

3

*

10e30

modK

m

m

)=

modK

m

m

*

1e30

end

return

function

axisF

=

gElementF

()

%求解杆單元軸力

global

Element

Delta

T

eleNum

~

]=

size

Element

);

axisF

=

sparse

eleNum

1

);

delta

=

zeros

4

1

);

for

i

=

1

1

eleNum

localKe

c

s

]=

gEStiffness

i

);

T

=[

c

s

0

0

-

s

c

0

0

0

0

c

s

0

0

-

s

c

delta

1

1

)=

Delta

2

*

Element

i

2

-

1

1

);

delta

2

1

)=

Delta

2

*

Element

i

2

),

1

);

delta

3

1

)=

Delta

2

*

Element

i

3

-

1

1

);

delta

4

1

)=

Delta

2

*

Element

i

3

),

1

);

delta

=

T

*

delta

Force

=

localKe

*

delta

%讀取區域性座標系下的軸力

%結果是雙零一正一負的單列矩陣,注意力的方向

for

x

=

1

1

4

if

Force

x

~=

0

axisF

i

)=

-

Force

x

);

break

end

end

end

return

myTruss

m

function

[Node,Element,Material,BC1,F]

=

myTruss

()

%整體座標系取水平為x方向,豎直為y方向的笛卡爾直角座標系

%節點號/x座標/y座標

Node

=[

1

0

1

2

1

1

3

0

0

4

1

0

];

%單元編號/節點號/節點號/材料種類

Element

=[

1

1

2

1

2

1

3

1

3

2

4

1

4

1

4

1

5

3

4

1

];

%材料彈模/截面慣性矩/面積

Material

=[

1

1

1

];

%第一類邊界條件,直接給出β值

%節點號/自由度種類(1水平2豎直)/β值(位移限定值)

BC1

=[

3

1

0

3

2

0

4

1

0

4

2

0

];

%輸入已知的節點外力

nodeNum

~

]=

size

Node

);

F

=

sparse

nodeNum

*

2

1

);

F

3

1

)=

2

F

4

1

)=

-

1

end