Программа 7. Изгиб балки
> | 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:=11: |
> | 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'=[2,6],'tooltip'="Введите координаты опор")]: |
> | a[2]:=["[xP]=", TextField['TxP'](14,'value'=[11],'tooltip'="Введите координаты сил")]: |
> | a[3]:=["[P]=", TextField['TP' ](14,'value'=[2],'tooltip'="Введите силы")]: |
> | a[4]:=["[xm]=", TextField['Txm'](14,'value'=[0],'tooltip'="Введите координаты моментов")]: |
> | a[5]:=["m=", TextField['Tm' ](14,'value'=[-10],'tooltip'="Введите моменты")]: |
> | a[6]:=["xq=", TextField['Txq'](14,'value'=[2],'tooltip'="Введите координаты q")]: |
> | a[7]:=["q=", TextField['Tq' ](14,'value'=[-6],'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.
> |