Я работаю над динамикой задачи робота. Мне нужно рассчитать матрицу преобразования 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
или любой другой метод, который в вычислительном отношении быстрее?