Кирсанов М.Н. 
Решебник.Теоретическая механика.
 М.:ФИЗМАТЛИТ, 2002.
Иллюстрации и программы к книге

  Расчет фермы

 restart: with(LinearAlgebra):

1. Ввод данных   
   Число узлов и стержней фермы.  
    N:=22:  M:=2*N:  
    Длина опорных стержней на рисунке  d:=1.:                

     Координаты узлов
  x:=<0|0|-0.5|0|-1|0|1|1|2|2|3|3|4|4|5|5|6|6|7|6|6.5|6|-1|0|6>:
  y:=<0|1|1   |2|2 |3|3|2|3|2|3|2|3|2|3|2|3|2|2|1|1  |0|0 |-1|-1>:

     Номер узла начала и конца стержня-вектора
  Nbeg:=<1|2|4|8 |10|12|14|16|18|20|1|3|5|6|7|9|11|13|15|17|19|21|2|4|4|4                                                       |4|8|8|10|10|12|14|14|16|16|18|18|18|18|20|1|1|22>:      

>   Nend:=<2|4|8|10|12|14|16|18|20|22|3|5|6|7|9|11|13|15|17|19|21|22|3|3|5|6|7|7|9|
       9|11|11|11|13|13|15|15|17|19|21|21|23|24|25>:

  2. Рисунок фермы

Шрифт для номеров шарниров и стержней
Шрифт:=FONT(TIMES,BOLD,8):
with(plots):with(plottools):
for i to M do     R[i]:=PLOT(CURVES([[x[Nbeg[i]],y[Nbeg[i]]],[x[Nend[i]],y[Nend[i]]]])):
od:

>   
for i to N+3 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[Nbeg[i]]+x[Nend[i]])/2+0.1,
                         (y[Nbeg[i]]+y[Nend[i]])/2+0.1],
                          convert(i,symbol)),
                  Шрифт,COLOR(HUE,0.7)):
od:

>    Параметры стрелки на рисунке
arw:=0.05,0.2,0.2,color=red:

     Проекции наклонной силы
  f1:=10:f2:=6:
     Изображение нагрузок
  F1:=arrow([x[6],y[6]],evalm([0,-f1]*0.07),arw):
  F2:=arrow([x[17],y[17]],evalm([-f1,0]*0.07),arw):
  F3:=arrow([x[19],y[19]],evalm([0,-f1]*0.07),arw):

  
Изображение фермы
    display(F1,F2,F3,seq(R[i],i=1..M),seq(Шарнир[i],i=1..N+3),
    seq(Стержень[i],i=1..M),
    scaling=constrained,axes=none);

[Maple Plot]

3. Вычисления

   Заполнение матрицы
  G[i,j]:=0:
    for i to M do
      Lx:=x[Nend[i]]-x[Nbeg[i]]:
      Ly:=y[Nend[i]]-y[Nbeg[i]]:
      L:=evalf(sqrt(Lx^2+Ly^2)):
      G[2*Nbeg[i]-1,i]:=Lx/L:G[2*Nbeg[i],i]:=Ly/L:
      if i<M-2 then G[2*Nend[i]-1,i]:=-Lx/L:G[2*Nend[i],i]:=-Ly/L:fi:
    od:

       Правая часть системы - вектор нагрузок
    
 B:=Vector(M):

>   B[2*6-1]:=0:B[2*6]:=-f1:
B[2*17-1]:=-f2:B[2*17]:=0:
B[2*19-1]:=0:B[2*19]:=-f1:

       Решение системы
      
S := LinearSolve(Matrix(M,G),-B):
printf(`%s\n`,`__________________________`);
printf(`%s\n`,`  n      S     n      S   `);
for i to M/2 do
   printf(`%3.0f%9.3f %3.0f%9.3f\n`,2*i-1,S[2*i-1],2*i,S[2*i]);
od;
4. Таблица результатов (кН)

__________________________

  n      S     n      S   

  1  -23.333   2  -23.333

  3  -16.667   4  -15.333

  5  -14.000   6  -14.000

  7  -12.667   8  -11.333

  9   -8.667  10   -8.667

 11   13.416  12   13.416

 13   16.971  14   12.000

 15   10.667  16    9.333

 17    6.667  18    5.333

 19    4.000  20   14.142

 21    -.000  22    -.000

 23    0.000  24    0.000

 25  -18.000  26  -22.000

 27   -1.886  28    1.333

 29   -1.886  30    1.333

 31   -1.886  32    0.000

 33    1.886  34   -1.333

 35    1.886  36   -1.333

 37    1.886  38  -10.000

 39  -10.000  40    -.000

 41    0.000  42   -6.000

 43  -11.333  44   -8.667

>