P40.mws

Программа 40. Задача 61

>    restart;

>    with(plots):

>    PR:=module()

>    export BLK,runBLK:

>    BLK:=proc() local cst,GM,GQ,nP,nq,nm,xP,xOP,P,temp,m,xm,xq,

>                q,l,L,mP,mq,mm,Rb,Ra,qB,mB,z,i,x,N,u:

>    global MB,QB:

>     use Maplets[Tools] in

>     xOP:=Get('TxO'::list); # координаты опор

>     xP:=Get('TxP'::list); # координаты сил

>     P:=Get('TP'::list);   # силы

>     m:=Get('Tm'::list);   # моменты

>     xm:=Get('Txm'::list): # координаты моментов

>     xq:=Get('Txq'::list): # координаты левых концов q

>     q:=Get('Tq'::list);   # распр. нагрузки q

>     l:=Get('Tl'::list);   # длины распр. нагрузка q

>     u:=Get('RB1'::boolean);   #

>    nP:=nops(P):           # Число P

>    nm:=nops(m):           # Число m

>    nq:=nops(q):           # Число q

>    P:=[op(P),0,0]:

>    xP:=[op(xP),op(xOP)]:

>    L:=max(op(xP),op(xm),op(xq+l)):        # Вычисление длины балки

>    mP:=add(P[i]*(xP[i]-xOP[1]),i=1..nP):  # Моменты P

>    mq:=add(q[i]*l[i]*(xq[i]+l[i]/2-xOP[1]),i=1..nq):# Моменты q

>    mm:=add(m[i],i=1..nm):                           # Моменты m

>    Rb:=-(mP+mq+mm)/(xOP[2]-xOP[1]);                 # ПраваЯ реакциЯ

>    Ra:=-Rb-add(P[i],i=1..nP)-add(q[i]*l[i],i=1..nq);  # ЛеваЯ реакциЯ

>    P[nP+1]:=Ra: P[nP+2]:=Rb:# Зачисление реакций опор в множество сил

Эпюра поперечной силы

>    qB:=x->add(piecewise(x>=xP[i],P[i],x<=xP[i],0),i=1..nP+2)+

>           add(piecewise(x>=xq[i] and x<=xq[i]+l[i], q[i]*(x-xq[i]),

>                         x<=xq[i],0,

>                         x>=xq[i]+l[i],q[i]*l[i]),i=1..nq):          

 Эпюра моментов

>    z:=-1;

>    if u then z:=1: end if; # ДлЯ строительных специальностей z:=-1;

>    cst:=x->convert(evalf(x,4),string);

Процедура вычислений моментов

>    mB:=x->add(piecewise(x>=xm[i],-z*m[i],x<=xm[i],0,0),i=1..nm)+

>    add(piecewise(x>=xP[i],z*(x-xP[i])*P[i],x<=xP[i],0,0),i=1..nP+2)+

>    add(piecewise(x>xq[i] and x<xq[i]+l[i],(x-xq[i])^2/2*q[i]*z,

>                  x>=xq[i]+l[i],z*(x-xq[i]-l[i]/2)*l[i]*q[i],0),i=1..nq):

>    GM:=plot(mB(x),x=0..L,title="ЭПЮРА M"):

>    GQ:=plot(qB(x),x=0..L,title="ЭПЮРА Q"):

>    N:=10:

>    Set (TB1="  \n",TB2="  \n",TB3=" \n"):

>    for i from 0 to N do

>      x:=L/N*i:

>      Set(TB1(appendline)=cst(x)):

>      Set(TB2(appendline)=cst(qB(x))):

>      Set(TB3(appendline)=cst(mB(x))):

>    od:

>    end use:

>    GM,GQ:

>    end proc:

>   

>    runBLK:=proc()

>    local маплет,z,a,L,b1,b2,T1,T2,T3,c1,c2,c3,p1,p2,helpStr;

>    z:='width'=5,'height'=15,'editable'='false':

>    helpStr:="Момент положительный, если он вращает против часовой стрелки.

>    Силы и распределенные нагрузки, направленные вверх, положительные. Начало координат в левом конце балки.":

>    use Maplets:-Elements in

>    a[1]:=["[xOP]=",TextField['TxO'](14,'value'=[0,10],'tooltip'="Введите координаты опор")]:

>    a[2]:=["[xP]=", TextField['TxP'](14,'value'=[4],'tooltip'="Введите координаты сил")]:

>    a[3]:=["[P]=",  TextField['TP' ](14,'value'=[5],'tooltip'="Введите силы")]:

>    a[4]:=["[xm]=", TextField['Txm'](14,'value'=[6],'tooltip'="Введите координаты моментов")]:

>    a[5]:=["m=",    TextField['Tm' ](14,'value'=[-8],'tooltip'="Введите моменты")]:

>    a[6]:=["xq=",   TextField['Txq'](14,'value'=[0],'tooltip'="Введите координаты q")]:

>    a[7]:=["q=",    TextField['Tq' ](14,'value'=[-4],'tooltip'="Введите q")]:

>    a[8]:=["Lq=",   TextField['Tl' ](14,'value'=[4],'tooltip'="Введите длину q")]:

>    b1:=RadioButton['RB1']("+M",'value'=true, 'group'='Bt','tooltip'="Эпюра на сжатом волокне"):

>    b2:=RadioButton['RB2']("-M",'value'=false,'group'='Bt'):

>    T1:=TextBox['TB1'](z):

>    T2:=TextBox['TB2'](z):

>    T3:=TextBox['TB3'](z):

>    c1:=Button('width=90',"M", Evaluate('PL1' = 'display(BLK()[1])')):

>    c2:=Button('width=90',"Q", Evaluate('PL2' = 'display(BLK()[2])')):

>    c3:=Button("OK",Shutdown(['TxP','TP','Txm'])):       

>    p1:=Plotter['PL1']('height=200'):

>    p2:=Plotter['PL2']('height=200'):

>    маплет:= Maplet(Evaluate(function = 'BLK()'),

>                  ButtonGroup['Bt'](),

>         Window('title'="ЭПЮРЫ В БАЛКЕ",'menubar'='MB',

>         ["Сопротивление материалов",

>            [BoxColumn(seq(a[i],i=1..8),

>                [b1,b2],["x","Q","M"],[T1,T2,T3]),

>                [p1,p2]

>            ],[c1,c2,c3]        

>              ]),

>         Window['Справка'](BoxColumn(TextBox('height'=10,'value'=helpStr),Button("Close",CloseWindow('Справка')))),

>         MenuBar['MB']( Menu("Help",MenuItem("Правило знаков",'onclick'=RunWindow('Справка'))))

>                 ):#Maplet

>        Maplets:-Display(маплет):

>    end use;

>    end proc;

>    end module:

>    PR:-runBLK():    

>   

Initializing Java runtime environment.

>