Кирсанов М.Н.
Решебник.Теоретическая механика.
М.:ФИЗМАТЛИТ, 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);
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
> |