Программа 42
> | restart; |
> | with(plots): with(plottools): |
> | EpuraM:=proc(P1,P2,P3) |
> | local R,i,j,k,Lx,Rr,Ly,eq,eqs,S,Eq,sstm,unn:# |
> | global Rm,Rx,Ry,Ro: |
> | for k to 3 do |
> | for i to 3*n do Eq[k][i]:=0;od: |
> | od: |
> | for i to m do # 3 уравнения равновесия стержней |
> | Lx:=L1[i]: Ly:=L2[i]: |
> | eq[i]:=R[1][i,1]+R[1][i,2]+Qx[i]*abs(Ly); |
> | eq[i+m]:=R[2][i,1]+R[2][i,2]+Qy[i]*abs(Lx); |
> | eq[i+2*m]:=R[2][i,2]*Lx-R[1][i,2]*Ly+Qy[i]*abs(Lx)*Lx/2-Qx[i]*abs(Ly)*Ly/2+R[3][i,1]+R[3][i,2]; |
> | for k to 3 do #Равновесие узлов |
> | for j to 2 do |
> | Eq[k][str[i,j]]:=Eq[k][str[i,j]]-R[k][i,j]; |
> | od;od; |
> | od: |
> | for i to n do #Нагрузки на узлы |
> | for k to 3 do Eq[k][i]:=Eq[k][i]+P||k[i]:od: |
> | od: |
> | #Vns[i,1] номер стержня (1..m) |
> | #Vns[i,2] номер конца (1,2) |
> | #Vns[i,3] направление реакции (1-x,2-y,3-m) |
> | for i to ks do #Внутренний шарнир на стержне |
> | eqs[i]:=R[Vns[i,3]][Vns[i,1],Vns[i,2]]+Vns1[i]: |
> | od; |
> |
> | for i to ko do #Опора. Ro - реакции опор |
> | Eq[OPOR[i,2]][OPOR[i,1]]:=Eq[OPOR[i,2]][OPOR[i,1]]+Rr[i]: |
> | od; |
> | sstm:=seq(eq[i],i=1..3*m),seq(seq(Eq[k][i],k=1..3),i=1..n),seq(eqs[i],i=1..ks); |
> | unn:=seq(Rr[i],i=1..ko),seq(seq(seq(R[k][i,j],k=1..3),i=1..m),j=1..2); |
> | S:=solve({sstm},{unn}):assign(S): |
> | Rx:=R[1]; Ry:=R[2]; Rm:=R[3];Ro:=Rr; |
> | end proc: #**************************************************************** |
Определение поперечных сил
> | RQ:=proc(Rx,Ry) local QQ,k,sn,cs,Qs: |
> | global Q1: |
> | QQ:=x->Ry[k,1]*cs-Rx[k,1]*sn+Qs*x: |
> | for k to m do |
> | sn:=L2[k]/L[k]: cs:=L1[k]/L[k]: |
> | Qs:=(Qx[k]+Qy[k])*sign(-L2[k])*sign(L1[k]): |
> | Q1[k,1]:=QQ(0): Q1[k,2]:=QQ(L[k]): |
> | od; |
> | end proc:#RQ |
Печать таблиц результатов (эпюры моментов и сил)
> | PrintRez:=proc(M,Txt) local i,M1: |
> | printf("\n N %s(1) %s(2) \n",Txt,Txt); |
> | for i to m do |
> | printf("%d %7.2f %7.2f \n",i,M[i,1],M[i,2]); |
> | od; end proc: |
Получение функции M(v) по эпюре (z=0, если распр.нагр. нет, т.е. для единичных нагрузок)
> | EM:=proc(M,z,v,k) M[k,1]+(-M[k,2]-M[k,1])/L[k]*v + z*(Qx0[k]+Qy0[k])*v*(L[k]-v)/2*sign(-L2[k])*sign(L1[k]):end: |
> | RisRama:=proc() |
> | local Ns,setN; |
> | global rama; |
> | setN:=FONT(TIMES,BOLD,14),COLOR(RGB,1,0,0): |
> | Ns:=PLOT(seq(TEXT([x[i],y[i]],convert(i,symbol),ALIGNRIGHT),i=1..n),setN): |
> | rama:=seq(ЛиниЯ(str[i,1],str[i,2]),i=1..m): |
> | display(rama,Ns,axes=NONE); |
> | end proc: |
> | Lxy:=proc() |
> | local k; |
> | global L1,L2,L: |
> | for k to m do # Длины участков |
> | L1[k]:=x[str[k,2]]-x[str[k,1]]: |
> | L2[k]:=y[str[k,2]]-y[str[k,1]]: |
> | L[k]:=sqrt(L1[k]^2+L2[k]^2) |
> | od: |
> | end proc: |
Запись процедур на диск
> | save Lxy,RisRama,EM,PrintRez,RQ,EpuraM, "C:\\epura.m"; |
> |