Программа 45. Задачи 61, 62.
| > | restart: |
| > | read "C:\\Podpr1.m": |
| > | read "C:\\epura.m"; #RisRama,PrintRez,RQ,EpuraM |
| > | read "C:\\Risepura.m"; #Risepur |
| > | fd := fopen("C:/M13/P61.txt",READ):# Открываем файл (p61.txt, p62.txt) |
Ввод данных
Длины участков
| > | a:=[parse(readline(fd))]: |
| > | n:=nops(a)+1:# Число узлов |
| > | P1:=Vector(n): |
| > | P2:=[-parse(readline(fd))]:# Нагрузки в узлах |
| > | P3:=[parse(readline(fd))]: # Моменты в узлах |
| > | m:=n-1: # Число стержней |
| > | s1:=parse(readline(fd)); # Номера стержней с шарнирами в конце |
| > | Nopor:=parse(readline(fd));# Опоры |
| > | nops([Nopor]); # Число опор |
| > | Qx:=Vector(m): |
| > | Qy:=[-parse(readline(fd))];# Нагрузки распределенная |
| > | fclose(fd): # Закрываем файл |
Координаты узлов
| > | x[1]:=0:for i to n-1 do x[i+1]:=x[i]+a[i];od: |
| > | y:=Vector(n): |
| > | Vns:=[seq([s1[i],2,3],i=1..nops([s1]))]: |
| > | ks:=nops(Vns): # Число внутренних шарниров |
| > | Vns1:=Vector(n): # Вектор значений внутренних моментов в шарнирах Vns(=0) |
Опоры: [Узел, направление (1-X,2-Y,3-M)]
| > | OPOR:=[[Nopor[1],1],seq([Nopor[i],2],i=1..nops([Nopor]))]; |
| > | ko:=nops(OPOR): # Число опор |
| > | printf("Число неизвестных %d + %d, уравнений %d + %d + %d",ko,6*m,ks,3*m,3*n); |
Решение
| > | for i to n do str[i,1]:=i;str[i,2]:=i+1;od: |
| > | Lxy(): |
| > | RisRama(): |
| > | EpuraM(P1,P2,P3):#Моменты |
| > | Реакции=seq(Ro[i],i=1..ko); |
Число неизвестных 3 + 18, уравнений 0 + 9 + 12
| > | RQ(Rx,Ry): #Поперечная (перерезывающая) сила |
| > | PrintRez(Q1,"Qp"); |
N Qp(1) Qp(2)
1 9.00 -7.00
2 -2.00 -2.00
3 -2.00 -2.00
| > | QP:=-Matrix(m,2,Q1): |
| > | RisEpur(QP,'QP',0); |
| > | MP:=Matrix(m,2,Rm): |
| > | RisEpur(MP,'MP',1); |
| > | PrintRez(Rm,"Mp"); |
N Mp(1) Mp(2)
1 0.00 4.00
2 -4.00 0.00
3 -8.00 0.00