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