Как использовать numbafy или есть ли альтернатива lambdify - PullRequest
0 голосов
/ 10 октября 2019

Я работаю над динамикой задачи робота. Мне нужно рассчитать матрицу преобразования 4х4. Я сохранил матрицу преобразования в символической форме для вычисления матрицы скорости Uij, составленной из списка списка, т.е. дифференцирования матрицы преобразования по углу соединения.

T хранит список матрицы преобразования [T01, T02 , T03 ... ] T= [[4x4 symbolic matrix], [4x4 symbolic matrix], [4x4 symbolic matrix], ......10 terms]

Qdiff хранит различные углы соединения:

Qdiff=[Q1,Q2,Q3,Q4,Q5,Q6,Q7,Q8,Q9,Q10]

U2d - это матрица скоростей, хранящаяся в списке, где U2d [i] [j] дает дифференциацию T [0] [j] относительно Qj

Чтобы получить форму U2d[i][j], я сохранил ее в списке списка

U2d=[ [ T[i].diff(Qdiff[j]) for j in list(range(0,i+1)) ] for i in list(range(10)) ]

U2nsubs - это список из списка преобразования символьного выражения в функцию с использованием lambdify (что в вычислительном отношении очень дорого и занимает около 70% времени)

U2nsubs=[[sp.lambdify([[Q1,Q2,Q3,Q4,Q5,Q6,Q7,Q8,Q9,Q10]],U2d[i][j]) for j in range(0,i+1)]for i in range(10)]

Здесь я пытаюсь получить массив кусков путем подстановки различных угловых положений на разных итерациях. Kq - список списка угловых соединений на разных временных интервалах:

q= [[10 real values of Q1],[10 real values of Q2],[10 real values of Q3],....]

U2dsubs=[[[U2nsubs[i][j]([q[0][k],q[1][k],q[2][k],q[3][k],q[4][k],q[5][k],q[6][k],q[7][k],q[8][k],q[9][k]]) for k in list(range(10))]for j in range(0,i+1)]for i in range(10)]

U2dsubs[i][j][k] заменятизменяет угол соединения от Q1 до Q10 с интервалом k.

  • Как оценить это, используя Numbafy или любой другой метод, который в вычислительном отношении быстрее?
...