| > | restart: |
| > | interface(showassumed=0):assume(h>0):assume(c>0):assume(a>0): |
| > | Nmax:=10: |
| > | n:=3: # число панелей 1-10 |
| > | for n to Nmax do |
| > | m3:=4*n+7:# Число узлов c опорами |
| > | n3:=8*n+8:# стержней фермы c опорами |
| > | m:=n3: |
| > | ns:=n3-3: |
| > | #a:=3: h:=4: |
| > | for i to 2*n+2 do x[i]:=a*i-a: y[i]:=0: x[i+2*n+2]:=a*i-a: y[i+2*n+2]:=h: od:#нижн |
| > | x[4*n+5]:=0: y[4*n+5]:=-1: |
| > | x[4*n+6]:=x[2*n+2]: y[4*n+6]:=-1: |
| > | x[4*n+7]:=x[2*n+2]+1: y[4*n+7]:=0: |
| > | #seq(y[i],i=1..m3); |
| > | Номер узла начала и конца стержня-вектора |
| > | for i to n+1 do |
| > | N[i]:=[i+1,i+2*n+2]; # кресты |
| > | N[i+n+1]:=[i+n,i+3*n+3]; # |
| > | od: |
| > | for i to 2*n+2 do |
| > | N[i+2*n+2]:=[i,i+2*n+2]; # stoyki |
| > | od: |
| > | for i to 2*n+1 do |
| > | N[i+4*n+4]:=[i+2*n+2,i+2*n+3]; # v poyas |
| > | od: |
| > | for i to n do |
| > | N[i+6*n+5]:=[i,i+1]; # n poyas |
| > | N[i+7*n+5]:=[i+n+1,i+n+2]; # n poyas |
| > | od: |
| > |
| > | N[n3-2]:=[1,m3-2]: N[n3-1]:=[2*n+2,m3-1]: # opors |
| > | N[n3]:=[2*n+2,m3]: |
| > |
Шрифт для номеров шарниров и стержней
| > | with(plots):with(plottools): |
| > | for i to m do R[i]:=PLOT(CURVES([[x[N[i][1]],y[N[i][1]]],[x[N[i][2]],y[N[i][2]]]])):od: |
| > | for i to m3+5 do Шарнир[i]:=PLOT(TEXT([x[i]+0.1,y[i]+0.1],convert(i,symbol)), COLOR(HUE,1)): od: |
| > | for i to m do Стержень[i]:=PLOT(TEXT([(x[N[i][1]]+2*x[N[i][2]])/3,(y[N[i][1]]+2*y[N[i][2]])/3+0.1],convert(i,symbol)), COLOR(HUE,0.7)):od: |
| > |
Изображение фермы
| > | #display(seq(Шарнир[i],i=1..m3),seq(R[i],i=1..m),seq(Стержень[i],i=1..m),scaling=unconstrained,axes=none); |
| > |
Заполнение матрицы
Правая часть системы - вектор нагрузок(фактически набор векторов - каждый столбец - одна нагрузка. Система решается сразу для всех случаев. См. Решебник Теор мех с.344)
| > | B1:=Vector(m): G:=Matrix(m,m): |
| > | np:=2;B1[2*np]:=-1: |
Решение системы
| > | for i to m do |
| > | Lxy[1]:=x[N[i][2]]-x[N[i][1]]: |
| > | Lxy[2]:=y[N[i][2]]-y[N[i][1]]: |
| > | L[i]:=subs(a^2+h^2=c^2,sqrt(Lxy[1]^2+Lxy[2]^2)); |
| > | for j to 2 do |
| > | jj:=2*N[i][2]-2+j: |
| > | if jj<=m then G[jj,i]:=-Lxy[j]/L[i]:fi; |
| > | jj:=2*N[i][1]-2+j: |
| > | if jj<=m then G[jj,i]:= Lxy[j]/L[i]:fi; |
| > | od; |
| > | od: |
| > | G1:=1/G: # Обратная матрица |
| > | S1:=G1.B1: # Решение системы |
| > | seq(S1[jj],jj=m-2..m); |
| > | #Прогиб |
| > |
| > | DEL:=simplify((C1*a^3+C2*c^3+C3*h^3));#должно совпасть с del |
| > |
| > | del:=simplify(add(S1[i]*S1[i]*L[i],i=1..ns)*h^2);# |
| > | C1[n]:=coeff(del,a^3); |
| > | C2[n]:=coeff(del,c^3); |
| > | C3[n]:=coeff(del,h^3); |
| > | print(del,n);od: |
| > |
| > |
| > | n:='n':with(genfunc):#перед a^3 |
| > | S:=seq(C1[i]*(2*i+1)^2,i=1..Nmax); |
| > | NN:=nops([S])/2; |
| > | Z:=rgf_findrecur(NN, [S], t,n); |
| > | ZZ:=simplify(rsolve({Z,seq(t(i)=S[i],i=1..NN)},t)); |
| > |