<jupyter_start><jupyter_text>4.2 Propiedades de inercia<jupyter_code># Ejemplo helice
# Considere una hélice con propiedades de inercia definidas respecto al centro de masa en
# el sistema de coordenadas definido por B.
b=ReferenceFrame('B')
# Defina las variables para los momentos de inercia (escalares)
Ix,Iy,Iz=symbols('Ix,Iy,Iz') 

#Defina los vectores de inercia I1, I2, I3 (los productos de inercia son nulos en este ejemplo)
I1=Ix*b.x 
I2=Iy*b.y
I3=Iz*b.z

#Defina los vectores unitarios
na=sqrt(2)*(b.y+b.z)/2
nb=sqrt(2)*(b.x+b.z)/2

#Calcule los vectores de inercia respecto a na y nb
Ia=na.dot(b.x)*I1+na.dot(b.y)*I2+na.dot(b.z)*I3
Ib=nb.dot(b.x)*I1+nb.dot(b.y)*I2+nb.dot(b.z)*I3

#Calcule los escalares de inercia
Iaa=Ia.dot(na)
Ibb=Ib.dot(nb)
Iab=Ia.dot(nb)
pprint(Iaa)
pprint(Ibb)
pprint(Iab)<jupyter_output>Iy   Iz
── + ──
2    2 
Ix   Iz
── + ──
2    2 
Iz
──
2<jupyter_text>4.2.3 Matrices y diádicas de inercia<jupyter_code># Puede utilizar la clase inertia para definir diádicas de inercia
n=ReferenceFrame('N')
O=Point('O')
i11,i12,i13,i22,i23,i33=symbols('i11,i12,i13,i22,i23,i33')
I=inertia(n,i11,i22,i33,i12,i13,i23)
I
# Puede usar la representación matricial con el método to_matrix
I.to_matrix(n)
r11,r12,r13,r22,r23,r33=symbols('r11,r12,r13,r22,r23,r33')
b=n.orientnew('B','DCM',Matrix([[r11,-r12,-r13],[r12,r22,-r23],[r13,r23,r33]]))
# Puede expresar la matriz respecto a otro marco de referencia
I.to_matrix(b)
# Lo que es equivalente a la operación de cambio de base (eq. 4.16)
b.dcm(n)*I.to_matrix(n)*b.dcm(n).transpose()
# Observe esto con el ejemplo de la hélice
b=ReferenceFrame('B')
O=Point('O')
ix,iy,iz=symbols('ix,iy,iz')
q=symbols('q')
I=inertia(b,ix,iy,iz)
a=b.orientnew('A','DCM',Matrix([[cos(q),sin(q),0],[-sin(q),cos(q),0],[0,0,1]]))
# b.dcm(a) #Observe la matriz de rotación entre A y B (recuerde que en sympy dcm es definido por filas)
I.to_matrix(a)
# Alternativamente puede utilizar algebra de diádicas para expresar la inercia en A
I.express(a)
## 4.2.4 Teoremas de ejes paralelos
# Para el ejemplo del quadricóptero calcule la inercia respecto al centro de masa de la base A
a=ReferenceFrame('A')
O=Point('O')
# Defina variables de movimiento para cada hélice
q1,q2,q3,q4=dynamicsymbols('q1,q2,q3,q4')
# defina simbolos para los escalares
mb,jx,jy,jz,ix,iy,iz,r=symbols('mb,jx,jy,jz,ix,iy,iz,r')

# Defina el marco de referencia de cada hélice
qi=[q1,q2,q3,q4]
Bnames=['B{}'.format(i) for i in range(0,4)]
blist=[a.orientnew(Bnames[i],'Axis',(qi[i],a.z)) for i in range(0,4)]

# Defina la ubicacion de cada hélice en A
# utilice la clase Particle para definir una masa puntual en cada Bi
pnames=['P{}'.format(i) for i in range(0,4)]
loclist=[a.x*r,a.y*r,-a.x*r,-a.y*r]
plist=[O.locatenew(pnames[i],loclist[i]) for i in range(0,4)]
particleList=[Particle(pnames[i],plist[i],mb) for i in range(0,4)]

# Calcule la diádica de inercia de la base del cuadricóptero
iaa=inertia(a,jx,jy,jz)
# Calcule la diádica de inercia de la hélice en B
ibbList=[inertia(bi,ix,iy,iz) for bi in blist]
# Calcule la diádica de inercia de la masa puntual de cada hélice en A
ibaList=[pi.parallel_axis(O,a) for pi in particleList]
# Observe cada término Ibi/A
ibaList[0]
#ibaList[1]
#ibaList[2]
#ibaList[3]
# Para simplificar el código, defina una función para sumar todas las diádicas en una lista
def sumlist(x):
    total=x[0]
    for xi in x[1:]:
        total=total+xi
    return total

Icuad=iaa+sumlist(ibbList)+sumlist(ibaList)
Icuad.express(a).simplify()
# Suponiendo que las hélices se mueven sincronizadamente (q1=q2=q3=q4)
Icuad.express(a).subs({q2:q1,q3:q1,q4:q1}).simplify()<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.15545179895633068, 'fraction_numerical': 0.042021422686075255, 'mean_word_length': 6.030888030888031, 'pattern_counts': {'":': 0, '<': 8, '<?xml version=': 0, '>': 8, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '2', 'dir': 'jupyter-structured-clean-dedup', 'id': '376223', 'license': 'MIT', 'n_tokens_mistral': 1750, 'n_tokens_neox': 1689, 'n_words': 387, 'path': 'Capitulo_4/.ipynb_checkpoints/Capitulo4-checkpoint.ipynb', 'repo_name': 'JonathanCamargo/Dinamica_Mecanica_Material_Interactivo', 'size': '3641'}