P42.mws

Программа 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";

>