Ejercicio: 3Eva2021PAOI_T2 Tensiones mínimas en cables por carga variable
El ejercicio usa el resultado del tema anterior, planteando una función de Python como la solución para valores dados. Se requiere una función, para disponer de los valores solución en cada llamada para el intervalo de análisis.
Por lo que básicamente lo que se pide es usar algún algoritmo de búsqueda de raíces. Para simplicidad en la explicación se toma el algoritmo de la bisección.
Los resultados se grafican como theta vs Tensiones, y el punto a buscar es cuando las tensiones en los cables son de igual magnitud, es decir:
TCA = TCB

Resultando en :
Resultado: [TCA, TCB], diferencia
[array([3.46965006e-14, 4.00000000e+02]), -399.99999999999994]
tetha, TCA, TCB
[[-2.61799388e-01 3.46965006e-14 4.00000000e+02]
[-1.74532925e-01 3.70996817e+01 3.85789041e+02]
[-8.72664626e-02 7.39170124e+01 3.68641994e+02]
[ 8.32667268e-17 1.10171790e+02 3.48689359e+02]
[ 8.72664626e-02 1.45588094e+02 3.26082988e+02]
[ 1.74532925e-01 1.79896384e+02 3.00994928e+02]
[ 2.61799388e-01 2.12835554e+02 2.73616115e+02]
[ 3.49065850e-01 2.44154918e+02 2.44154918e+02]
[ 4.36332313e-01 2.73616115e+02 2.12835554e+02]
[ 5.23598776e-01 3.00994928e+02 1.79896384e+02]
[ 6.10865238e-01 3.26082988e+02 1.45588094e+02]
[ 6.98131701e-01 3.48689359e+02 1.10171790e+02]
[ 7.85398163e-01 3.68641994e+02 7.39170124e+01]
[ 8.72664626e-01 3.85789041e+02 3.70996817e+01]]
raiz en: 0.34898062924398343 radianes
raiz en: 19.995117187500004 grados
error en tramo: 8.522115488257542e-05
>>>
Instrucciones en Python
se añaden las instrucciones de la bisección al algoritmo del tema anterior, para encontrar el punto de intersección,
import numpy as np
import matplotlib.pyplot as plt
# Tema 1
def funcion(P,theta,alfa,beta):
# ecuaciones
A = np.array([[np.cos(alfa), -np.cos(beta)],
[np.sin(alfa), np.sin(beta)]])
B = np.array([P*np.sin(theta), P*np.cos(theta)])
# usar un algoritmo directo
X = np.linalg.solve(A,B)
diferencia = X[0]-X[1]
return([X,diferencia])
# INGRESO
alfa = np.radians(35)
beta = np.radians(75)
P = 400
# PROCEDIMIENTO
theta = beta-np.radians(90)
resultado = funcion(P,theta,alfa, beta)
# SALIDA
print("Resultado: [TCA, TCB], diferencia")
print(resultado)
# Tema 1b --------------
# PROCEDIMIENTO
dtheta = np.radians(5)
theta1 = beta-np.radians(90)
theta2 = np.radians(90)-alfa
tabla = []
theta = theta1
while not(theta>=theta2):
X = funcion(P,theta,alfa,beta)[0] # usa vector X
tabla.append([theta,X[0],X[1]])
theta = theta + dtheta
tabla = np.array(tabla)
thetai = np.degrees(tabla[:,0])
Tca = tabla[:,1]
Tcb = tabla[:,2]
# SALIDA
print('tetha, TCA, TCB')
print(tabla)
# Grafica
plt.plot(thetai,Tca, label='Tca')
plt.plot(thetai,Tcb, label='Tcb')
# plt.axvline(np.degrees(c))
plt.legend()
plt.xlabel('theta')
plt.ylabel('Tensión')
plt.show()
# Tema 2 -------------------------
# busca intersección con Bisección
diferencia = Tca-Tcb
donde_min = np.argmin(np.abs(diferencia))
a = tabla[donde_min-1,0]
b = tabla[donde_min+1,0]
tolera = 0.0001
tramo = b-a
while not(tramo<tolera):
c = (a+b)/2
fa = funcion(P,a,alfa,beta)[1] # usa delta
fb = funcion(P,b,alfa,beta)[1]
fc = funcion(P,c,alfa,beta)[1]
cambia = np.sign(fa)*np.sign(fc)
if cambia < 0:
a = a
b = c
if cambia > 0:
a = c
b = b
tramo = b-a
# SALIDA
print(' raiz en: ', c,"radianes")
print(' raiz en: ', np.degrees(c),"grados")
print('error en tramo: ', tramo)
# Grafica
plt.plot(thetai,Tca, label='Tca')
plt.plot(thetai,Tcb, label='Tcb')
plt.axvline(np.degrees(c))
plt.legend()
plt.xlabel('theta')
plt.ylabel('Tensión')
plt.show()