你提出的問題我之前剛好做過,使用有限元方法來進(jìn)行桁架結(jié)構(gòu)分析.
目前創(chuàng)新互聯(lián)建站已為上1000家的企業(yè)提供了網(wǎng)站建設(shè)、域名、網(wǎng)站空間、綿陽服務(wù)器托管、企業(yè)網(wǎng)站設(shè)計(jì)、豐臺(tái)網(wǎng)站維護(hù)等服務(wù),公司將堅(jiān)持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長(zhǎng),共同發(fā)展。
Matlab編程實(shí)現(xiàn)平面桿單元分析
首先,明確Matlab程序要實(shí)現(xiàn)的5個(gè)重要模塊分別為:?jiǎn)卧獎(jiǎng)偠染仃嚨那蠼狻卧M裝、節(jié)點(diǎn)位移的求解、單元應(yīng)力的求解、節(jié)點(diǎn)力的求解.下面給出這5個(gè)模塊的實(shí)現(xiàn).
1.\x09單元?jiǎng)偠染仃嚽蠼?/p>
定義函數(shù)Bar2D2Node_Stiffness,該函數(shù)計(jì)算單元的剛度矩陣,輸入彈性模量E,橫截面積A,兩個(gè)節(jié)點(diǎn)坐標(biāo)輸出單元?jiǎng)偠染仃噆(4X4).具體代碼如下:
function k=Bar2D2Node_Stiffness(E,A,x1,y1,x2,y2)
L=sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1));
x=acos((x2-x1)/L);
C=cos(x);
S=sin(x);
k=E*A/L*[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];
2.\x09單元組裝
定義函數(shù)Bar2D2Node_Assembly,該函數(shù)進(jìn)行單元?jiǎng)偠染仃嚨慕M裝,輸入單元?jiǎng)偠染仃噆,單元的節(jié)點(diǎn)編號(hào)i、j.輸出整體剛度矩陣KK,具體代碼如下:
function z = Bar2D2Node_Assembly(KK,k,i,j)
DOF(1)=2*i-1;
DOF(2)=2*i;
DOF(3)=2*j-1;
DOF(4)=2*j;
for n1=1:4
for n2=1:4
KK(DOF(n1),DOF(n2))= KK(DOF(n1),DOF(n2))+k(n1,n2);
end
end
z=KK;
3.\x09節(jié)點(diǎn)位移的求解
定義函數(shù)Bar2D2Node_Disp(KK,num,p),該函數(shù)輸入KK為總體剛度矩陣;num為活動(dòng)自由度編號(hào)數(shù)組;p為活動(dòng)自由度方向上的節(jié)點(diǎn)力;輸出節(jié)點(diǎn)位移列陣.具體代碼如下:
function u = Bar2D2Node_Disp(KK,num,p)
k=KK(num,num)
u=k\p
4.\x09單元應(yīng)力的求解
定義函數(shù)函數(shù)Bar2D2Node_Stress(E,x1,y1,x2,y2,u),該函數(shù)計(jì)算單元的應(yīng)力輸入彈性模量E,第一個(gè)節(jié)點(diǎn)坐標(biāo)(x1,y1),第二個(gè)節(jié)點(diǎn)坐標(biāo)(x2,y2)單元節(jié)點(diǎn)位移矢量u,返回單元應(yīng)力標(biāo)量stress .具體代碼如下:
L=sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1));
x=acos((x2-x1)/L);
C=cos(x);
S=sin(x);
stress=E/L*[-C -S C S]*u;
5.\x09計(jì)算節(jié)點(diǎn)力
定義函數(shù)Bar2D2Node_Forces(KK,q),該函數(shù)用于計(jì)算節(jié)點(diǎn)力,KK為剛度矩陣,q為節(jié)點(diǎn)位移陣列
function P= Bar2D2Node_Forces(KK,q)
q=zeros(8,1);
q(num)=u;
P=KK*q;
至此,基于Matlab的桿單元有限元分析的程序設(shè)計(jì)已經(jīng)完成,遇到實(shí)際問題時(shí)可以直接調(diào)用這些函數(shù)就可以解決問.
經(jīng)典算例
如圖所示的結(jié)構(gòu),各個(gè)桿的彈性模量和橫截面積都為 , .試基于MATLAB平臺(tái)求解該結(jié)構(gòu)的節(jié)點(diǎn)位移、單元應(yīng)力以及支反力.
四桿桁架結(jié)構(gòu)
對(duì)該問題進(jìn)行有限元分析的過程如下
(1) 結(jié)構(gòu)的離散化與編號(hào)
\x09對(duì)該結(jié)構(gòu)進(jìn)行自然離散,節(jié)點(diǎn)編號(hào)和單元編號(hào)如上圖所示
(2)計(jì)算各單元的剛度矩陣(基于國(guó)際標(biāo)準(zhǔn)單位)
\x09\x09輸入彈性模量E、橫截面積A,各點(diǎn)坐標(biāo).然后分別針對(duì)單元1,2,3和4,調(diào)用4次Bar2D2Node_Stiffness,就可以得到單元的剛度矩陣.
對(duì)應(yīng)的主程序中代碼:
E=2.95e11;A=0.0001;x1=0;y1=0;x2=0.4;y2=0;x3=0.4;y3=0.3;x4=0;y4=0.3;
k1=Bar2D2Node_Stiffness (E,A,x1,y1,x2,y2)
k2=Bar2D2Node_Stiffness (E,A,x2,y2,x3,y3)
k3=Bar2D2Node_Stiffness (E,A,x1,y1,x3,y3)
k4=Bar2D2Node_Stiffness (E,A,x4,y4,x3,y3)
(3) 建立整體剛度方程
由于該結(jié)構(gòu)共有4個(gè)節(jié)點(diǎn),因此,設(shè)置結(jié)構(gòu)總的剛度矩陣為KK(8×8),先對(duì)KK清零,然后四次調(diào)用函數(shù)Bar2D2Node _Assembly進(jìn)行剛度矩陣的組裝.相關(guān)主程序代碼為:
KK=zeros(8,8);
KK=Bar2D2Node_Assembly (KK,k1,1,2);
KK=Bar2D2Node_Assembly (KK,k2,2,3);
KK=Bar2D2Node_Assembly (KK,k3,1,3);
KK=Bar2D2Node_Assembly (KK,k4,4,3)
(4)邊界條件的處理及剛度方程的求解
由圖可以看出,被約束的自由度有:節(jié)點(diǎn)1的x,y方向自由度,節(jié)點(diǎn)2的y方向自由度,4節(jié)點(diǎn)的x、y方向兩個(gè)自由度.則活動(dòng)自由度編號(hào)為3,5,6.活動(dòng)自由度對(duì)應(yīng)的節(jié)點(diǎn)載荷F3=20000N,F5=0N,F6=25000N,采用高斯消去法進(jìn)行求解,對(duì)應(yīng)的代碼為:
num=[3,5,6];%可活動(dòng)的自由度編號(hào)
p=[20000;0;-25000];
u=Bar2D2Node_Disp(KK,num,p)
(5)支反力的計(jì)算
在得到整個(gè)結(jié)構(gòu)的節(jié)點(diǎn)位移后,由原整體剛度方程就可以計(jì)算出對(duì)應(yīng)的支反力.這部分對(duì)應(yīng)的主程序的代碼如下:
q=zeros(8,1);
q(num)=u;%節(jié)點(diǎn)位移陣列
P=Bar2D2Node_Forces(KK,q)
(6)單元應(yīng)力的計(jì)算
先從整體位移列陣q中提取出單元的位移列陣,然后,調(diào)用計(jì)算單元應(yīng)力的函數(shù)Bar2D2Node_ElementStress,就可以得到各個(gè)單元的應(yīng)力分量.
u1=[q(1);q(2);q(3);q(4)]
stress1=Bar2D2Node_Stress(E,x1,y1,x2,y2,u1)
u2=[q(3);q(4);q(5);q(6)]
stress2=Bar2D2Node_Stress(E,x2,y2,x3,y3,u2)
u3=[q(1);q(2);q(5);q(6)]
stress3=Bar2D2Node_Stress(E,x1,y1,x3,y3,u3)
u4=[q(7);q(8);q(5);q(6)]
stress4=Bar2D2Node_Stress(E,x4,y4,x3,y3,u4)
(7)計(jì)算結(jié)果的整理
通過主程序的運(yùn)行得計(jì)算結(jié)果.
主程序
%計(jì)算各單元的剛度矩陣(以國(guó)際標(biāo)準(zhǔn)單位)
E=2.95e11;
A=0.0001;
x1=0;
y1=0;
x2=0.4;
y2=0;
x3=0.4;
y3=0.3;
x4=0;
y4=0.3;
k1=Bar2D2Node_Stiffness (E,A,x1,y1,x2,y2)
k2=Bar2D2Node_Stiffness (E,A,x2,y2,x3,y3)
k3=Bar2D2Node_Stiffness (E,A,x1,y1,x3,y3)
k4=Bar2D2Node_Stiffness (E,A,x4,y4,x3,y3)
%建立整體剛度方程
%由于該結(jié)構(gòu)共有4個(gè)節(jié)點(diǎn),因此,結(jié)構(gòu)總的剛度矩陣為KK(8×8),先對(duì)K清零,然后四次調(diào)用函數(shù)Bar2D2Node _Assembly進(jìn)行剛度矩陣的組裝.
KK=zeros(8,8);
KK=Bar2D2Node_Assembly (KK,k1,1,2);
KK=Bar2D2Node_Assembly (KK,k2,2,3);
KK=Bar2D2Node_Assembly (KK,k3,1,3);
KK=Bar2D2Node_Assembly (KK,k4,4,3)
%邊界條件的處理及剛度方程求解
num=[3,5,6];%可活動(dòng)的自由度編號(hào)
p=[20000;0;-25000];
u=Bar2D2Node_Disp(KK,num,p)
%支反力的計(jì)算
q=zeros(8,1);
q(num)=u;%節(jié)點(diǎn)位移陣列
P=Bar2D2Node_Forces(KK,q)
%各單元的應(yīng)力計(jì)算
u1=[q(1);q(2);q(3);q(4)];
stress1=Bar2D2Node_Stress(E,x1,y1,x2,y2,u1)
u2=[q(3);q(4);q(5);q(6)];
stress2=Bar2D2Node_Stress(E,x2,y2,x3,y3,u2)
u3=[q(1);q(2);q(5);q(6)];
stress3=Bar2D2Node_Stress(E,x1,y1,x3,y3,u3)
u4=[q(7);q(8);q(5);q(6)];
stress4=Bar2D2Node_Stress(E,x4,y4,x3,y3,u4)
說的可能有些羅嗦,注意其中有5個(gè)function,和最后一個(gè)主程序,計(jì)算的時(shí)候直接運(yùn)行主程序就可以了.希望能幫助到你.
給你說了也白搭,你大概知道就行了,這個(gè)需要代碼量。。。簡(jiǎn)單地說就是,沒有多態(tài),那么等號(hào)左邊是啥右邊就得是啥,這就叫耦合,有了多態(tài),左邊是父類(或者接口),右邊是子類(或?qū)崿F(xiàn)類),我只管調(diào)用接口里面的方法就是了,至于你實(shí)現(xiàn)類怎么去實(shí)現(xiàn),那是你的事,你要修改一下實(shí)現(xiàn),你只管去把實(shí)現(xiàn)類換掉,我這邊一行代碼都不用變,這就解耦了
特征向量都求出來了,用哪一種歸一化還不跟玩兒一樣嗎?okok已經(jīng)回答你了,這里再貼一下,主要因?yàn)橐呀?jīng)消失幾天了,出來透口氣:div class="blockcode"復(fù)制內(nèi)容到剪貼板h5代碼:/h5code id="code0"function ziyouzhendong1(k,m)br /% k=600*[1 -1 0;-1 3 -2;0 -2 5];m=diag([1 1.5 2]);br /clcbr /[C,B]=eig(inv(m)*k);br /n=size(m,2);br /for i=1:nbr / Ct=C(:,i);br / zhenxing(:,i)=Ct/Ct(1);br /endbr /w=sqrt(diag(B));br /B1=diag(B)';br /Eigen=inv(m)*k;br /for i=1:nbr / t1(:,i)=B1(i)*zhenxing(:,i);br / t2(:,i)=Eigen*zhenxing(:,i);br /endbr /B,zhenxing,t1,t2,w/code/div其實(shí)完全可以不用循環(huán),這是上學(xué)初學(xué)MATLAB一個(gè)月左右時(shí)寫的程序,目的是幫助同班美女從繁重的結(jié)構(gòu)動(dòng)力學(xué)作業(yè)中解脫出來并有充分的時(shí)間買化妝品and keep us amused...,當(dāng)時(shí)還沒人學(xué)MATLAB這玩意兒,全拿計(jì)算器算動(dòng)力學(xué)矩陣的問題,顯然即使最多只有4×4的K矩陣也足夠讓人受折磨了...br /
br /
轉(zhuǎn)載
在BDF文件中SOL之下加入以下語句,可以輸出剛度矩陣
compile semg
alter ’kjjz.*stiffness’ $
matprn kjjz// $
本文標(biāo)題:剛度矩陣java代碼 單元?jiǎng)偠染仃嚲幊?/a>
路徑分享:http://vcdvsql.cn/article24/hejgje.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供響應(yīng)式網(wǎng)站、動(dòng)態(tài)網(wǎng)站、商城網(wǎng)站、外貿(mào)建站、移動(dòng)網(wǎng)站建設(shè)、建站公司
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)