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