Ejercicio: 3Eva_2021PAOI_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:
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()