Пример построение эпюры крутящих моментов

2010-03-14

Построим эпюру крутящих моментов для бруса, приведенного на странице “Определение крутящих моментов и построение“ с помощью компьютера.

Кручение бруса: исходные данные

Используем язык R.

Напишем небольшую функцию для вычисления крутящих усилий и построения эпюры моментов. Воспользуемся формулой для вычисления внутренних усилий при кручении (задан постоянный закон для распределенных моментов m ). $$M _к(x) = \sum M _{кi} + \sum m _i(x)\cdot (x- L_{mн}) - \sum m _i(x)\cdot (x- L_{mк})$$

где L и L – расстояние от начала координат до начала и до конца распределенного момента соответственно.
Учтем, что заделка может быть как слава так и справа.

# Построение эпюры крутящих моментов # Версия 0.1 10.03.10 # # (C) sva, 2010, http://sopromat.in.ua # Лицензия: BSD   # формирования таблицы усилий в брусе # и отображение эпюры # # Args: # m.external: заданная распределенная нагрузка () # Mk.external: сосредоточенная нагрузка (попарно - [координата, значение]) # L: Длина бруса # side: 0 - заделка слева, 1- заделка справа # # Returns: # Возвращаемых значений нет # Mk_epure <- function (m.external,Mk.external,L,side=0) { print('Построение эпбюры крутящих моментов Mк') #превращаем вектора в матрицу Mk<-matrix(Mk.external,ncol=2,byrow=TRUE); dimnames(Mk)[[2]] <- c('x','Mk'); mi<-matrix(m.external,ncol=3,byrow=TRUE); dimnames(mi)[[2]] <- c('Ln','Lk','m'); #проверяем результат print('Сосредоточенные моменты Mк');print(Mk); print('Распределенные нагрузки');print(mi);   # формируем список характерных сечений # в местах приложения моментов проводим сечение слева и справа на малом расстоянии eps Mk.point <- Mk[,1]; secMk <- numeric(); eps = L/10000; # малая величина for ( i in 1:length(Mk.point) ) { secMk<-c(secMk,Mk.point[i]-eps,Mk.point[i],Mk.point[i]+eps) } # добавили начало и конец бруса, а также точки начала и конца приложения сосредоточенных моментов secX <- c(0,L,mi[,1],mi[,2],secMk); # сформировали список характерных сечений secX <- sort(secX); # упорядочили список   Msec <- sapply(secX,Mkx_calc, m=mi, M=Mk, side=side); # рисуем plot(secX,Msec,type="l",ylab="Усилие",xlab="x", main="Эпюра крутящих моментов Mк"); abline(h=0); polygon(c(secX,L,0),c(Msec,0,0),col='gray'); # добавим точки, где приложены силы, а также начало и конец бруса xf <- c(Mk.point,mi[,1],mi[,2],0,L); yf <- sapply(xf,Mkx_calc, m=mi, M=Mk, side=side); # points(xf,yf); text(xf,yf,yf); text(xf,0,xf,pos=1); # Определяем максимальное усилие Mmax.x <- secX[which.max(abs(Msec))]; Mmax <- Msec[match(Mmax.x,secX)];   points(Mmax.x,Mmax, col="red", pch=20); abline(v=Mmax.x,col="red",lty=2); print(sprintf("Максимальное крутящее усилие Mk=%f при x=%f ",Mmax,Mmax.x) ); }   # Определяем, пападает ли нагрузка в отсеченную часть бруса # # Args: # x: текущая координата # x1: координата нагрузки # side: = 0 - заделка слева # 1 - заделка справа # TurnF <- function (x,x1,side) { if (side) { ret<- (x >x1) } else { ret<- (x<=x1) } }   # определение суммы всех сил справа/или слева от сечения Xi # Args: # Xi: заданная координата # m: массив распределенных нагрузок # M: массив сосредоточенных нагрузок # side: 0 или 1 (слева или справа заделка) # Mkx_calc <- function (Xi,m,M,side=0) { MSum <- function(Mx, x,side) { Mi<-Mx[2]*TurnF(x,Mx[1],side); } # сумма всех сосредоточенных нагрузок в оставленной части Mk.sum<-sum(apply(M,1, MSum, x=Xi, side=side));   # Распределенные нагрузки mSum <- function(mx,x,side) { Mi <- mx[3]*(x-mx[1]) * TurnF(x,mx[1],side) - mx[3]*(x-mx[2])* TurnF(x,mx[2],side); } m.sum<-sum(apply(m,1, mSum, x=Xi, side=side)); M<-Mk.sum+m.sum; }

Исходный код функций Mk_epure.r

В среде R вводим:

  1.   source("Mk_epure.r", echo=TRUE); # загружаем нашу функцию
  2.   L=13;       # Длина
  3.   # распределенная нагрузка [начало,конец, интенсивность нагрузки]
  4.   m.external <- c(7, 11, -10);
  5.   # сосредоточенная нагрузка. Порядок заполнения  [точка приложения, значение силы] ...
  6.   Mk.external <- c(4, -30, 13, 50);
  7.   side=0; # 0- заделка слева; 1 - заделка справа
  8.   Mk_epure(m.external,Mk.external,L,side) # вычисления и построения
  9.  

В результате получим:

[1] "Построение эпюры крутящих моментов Mк" [1] "Сосредоточенные моменты Mк" x Mk [1,] 4 -30 [2,] 13 50 [1] "Распределенные нагрузки" Ln Lk m [1,] 7 11 -10 [1] "Максимальное крутящее усилие Mk=50.000000 при x=11.000000 "

Ниже приведена полученная эпюра крутящих моментов Mк для задания, приведенного вначале статьи.

Узнать усилие в любой точке можно с помощью функции Mkx_calc (x,m,Mk,side) Кручение бруса: эпюра крутящих моментов
Контроль правильности эпюр крутящих моментов

По правилам, приведенными здесь, проверяем правильность построенной эпюры крутящих моментов.




Связанные статьи

метки: , ,

Последнее обновление: 16/03/2010; #71

категория: ,