Parameter Estimation of RIG Roll Experiments

Setup and descriptions

  • Without ACM model
  • Turn on wind tunnel
  • Only 1DoF for RIG roll movement
  • Use small-amplitude aileron command of CMP as inputs (in degrees) $$U = \delta_{a,cmp}(t)$$
  • Consider RIG roll angle and its derivative as States (in radians) $$X = \begin{pmatrix} \phi_{rig} \\ \dot{\phi}_{rig} \end{pmatrix}$$
  • Observe RIG roll angle and its derivative as Outputs (in degrees) $$Z = \begin{pmatrix} \phi_{rig} \\ \dot{\phi}_{rig} \end{pmatrix}$$
  • Use output error method based on most-likehood(ML) to estimate $$ \theta = \begin{pmatrix} C_{l,\delta_a,cmp} \\ C_{lp,cmp} \end{pmatrix} $$

Startup computation engines


In [1]:
%run matt_startup
%run -i matt_utils

button_qtconsole()

#import other needed modules in all used engines
#with dview.sync_imports():
#   import os


importing numpy on engine(s)
importing scipy on engine(s)
importing matplotlib on engine(s)
importing scipy.integrate on engine(s)
importing scipy.interpolate on engine(s)
importing math on engine(s)
importing time on engine(s)
importing itertools on engine(s)
importing random on engine(s)
:0: FutureWarning: IPython widgets are experimental and may change in the future.

Data preparation

Load raw data


In [27]:
filename = 'FIWT_Exp036_20150605144438.dat.npz'

def loadData():
    # Read and parse raw data
    global exp_data
    exp_data = np.load(filename)

    # Select colums
    global T_cmp, da_cmp
    T_cmp = exp_data['data33'][:,0]
    da_cmp = exp_data['data33'][:,3]

    global T_rig, phi_rig
    T_rig = exp_data['data44'][:,0]
    phi_rig = exp_data['data44'][:,2]

loadData()

In [28]:
text_loadData()

Check time sequence and inputs/outputs

Click 'Check data' button to show the raw data.

Click on curves to select time point and push into queue; click 'T/s' text to pop up last point in the queue; and click 'Output' text to print time sequence table.


In [29]:
def checkInputOutputData():

    #check inputs/outputs
    fig, ax = plt.subplots(2,1,True)
    ax[1].plot(T_cmp,da1_cmp,'r', picker=2)
    ax[0].plot(T_rig,phi_rig, 'b', picker=2)
    ax[1].set_ylabel('$\delta \/ / \/ ^o$')
    ax[0].set_ylabel('$\phi \/ / \/ ^o/s$')
    ax[1].set_xlabel('$T \/ / \/ s$', picker=True)
    ax[0].set_title('Output', picker=True)
    

    fig.canvas.mpl_connect('pick_event', onPickTime)
    fig.show()
    display(fig)

button_CheckData()

Input $\delta_T$ and focused time ranges


In [30]:
# Pick up focused time ranges
time_marks = [
[17.6940178696,117,"ramp u1"],
[118.7,230.395312673,"ramp d1"],
[258.807481992,357.486188688,"ramp u2"],
[359.463122988,459.817499014,"ramp d2"],
[461.067939262,558.784538108,"ramp d3"],
[555.553175853,658.648739191,"ramp u4"],
]

# Decide DT,U,Z and their processing method
DT=0.5
process_set = {
            'Z':[(T_cmp, da_cmp,1),],
            'U':[(T_rig, phi_rig,1),],
            'cutoff_freq': 1 #Hz
           }

U_names = ['$\phi_{a,rig} \, / \, ^o$']
Y_names = Z_names = ['$\delta_{a,cmp} \, / \, ^o$']

display_data_prepare()


$$\delta_T=500.0(ms)$$
Time ranges
IdxStart(s)Spam(s)Description
017.6999.31ramp u1
1118.70111.70ramp d1
2258.8198.68ramp u2
3359.46100.35ramp d2
4461.0797.72ramp d3
5555.55103.10ramp u4
$U$
$\phi_{a,rig} \, / \, ^o$
$Z$
$\delta_{a,cmp} \, / \, ^o$

Resample and filter data in sections

For each section,

  • Select time range and shift it to start from zero;
  • Resample Time, Inputs, Outputs in unique $\delta_T$;
  • Smooth Input/Observe data if flag bit0 is set;
  • Take derivatives of observe data if flag bit1 is set.

In [31]:
resample(True);

Define dynamic model to be estimated

$$\left\{\begin{matrix}\begin{align} M_{x,rig} &= M_{x,a} + M_{x,f} + M_{x,cg} = 0 \\ M_{x,a} &= \frac{1}{2} \rho V^2S_cb_c C_{la,cmp}\delta_{a,cmp} \\ M_{x,f} &= -F_c \, sign(\dot{\phi}_{rig}) \\ M_{x,cg} &= -m_T g l_{zT} \sin \left ( \phi - \phi_0 \right ) \end{align}\end{matrix}\right.$$

In [68]:
%%px --local
#update common const parameters in all engines

angles = range(-170,171,10)
angles_num = len(angles)

#problem size
Nx = 0
Nu = 1
Ny = 1
Npar = 2*angles_num

#reference
S_c = 0.1254   #S_c(m2) 
b_c = 0.7      #b_c(m)
g = 9.81       #g(m/s2)

#static measurement
m_T = 9.585   #m_T(kg)
l_z_T = 0.0416 #l_z_T(m)
V = 30         #V(m/s)

#previous estimations
F_c = 0.06 #F_c(N*m)

#for short
qbarSb = 0.5*1.225*V*V*S_c*b_c
_m_T_l_z_T_g = -(m_T*l_z_T)*g

angles_cmpx = [-41, -35, -30, -25, -20, -15, -10, -5, 5, 10, 15, 20, 25, 30, 35, 41]
Clda_cmpx = np.array([[ 0.0565249,   0.05387389,  0.04652094,  0.03865756,  0.03113176,  0.02383392,
   0.01576805,  0.00682421, -0.00514735, -0.01570602, -0.02364258, -0.02733501,
  -0.0334053,  -0.03834931, -0.04546589, -0.05275809],
 [ 0.04793643,  0.04133362,  0.03510728,  0.02872704,  0.02349928,  0.01987537,
   0.01354014,  0.00666756, -0.00498937, -0.01074795, -0.01714402, -0.02095374,
  -0.02588346, -0.03155207, -0.03824692, -0.04752196],
 [ 0.04250404,  0.03700739,  0.03057273,  0.02586595,  0.01989991,  0.01626642,
   0.01237347,  0.00642308, -0.00551828, -0.01030141, -0.01654802, -0.02143956,
  -0.0268223,  -0.03110662, -0.03565326, -0.04001201,],
 [ 0.03448653,  0.03160534,  0.02700394,  0.02388641,  0.01988023,  0.01532191,
   0.01052986,  0.00572438, -0.00556645, -0.0101715,  -0.01388348, -0.01619465,
  -0.02044906, -0.02510722, -0.03134562, -0.0355593 ]])

Clda_cmp = np.sum(Clda_cmpx, axis=0)
Lda_cmp = qbarSb*Clda_cmp
Da_cmp = scipy.interpolate.interp1d(Lda_cmp, angles_cmpx)

hdr = int(1/DT)

def obs(Z,T,U,params):
    s = T.size
    
    unk_moment = scipy.interpolate.interp1d(angles, params[0:angles_num])
    col_fric   = scipy.interpolate.interp1d(angles, params[angles_num:angles_num*2])
    
    phi = U[:s,0]

    phi_diff = np.copysign(-1,phi[hdr:]-phi[:-hdr])
    phi_diff = np.concatenate((np.ones(hdr-1)*phi_diff[0], phi_diff, np.ones(hdr-1)*phi_diff[-1]))
    
    Da = Da_cmp(-unk_moment(phi)-col_fric(phi_diff))
  
    return Da.reshape((-1,1))

In [69]:
display(HTML('<b>Constant Parameters</b>'))
table = ListTable()
table.append(['Name','Value','unit'])
table.append(['$S_c$',S_c,'$m^2$'])
table.append(['$b_c$',b_c,'$m$'])
table.append(['$g$',g,'$m/s^2$'])
table.append(['$m_T$',m_T,'$kg$'])
table.append(['$l_{zT}$',l_z_T,'$m$'])
table.append(['$V$',V,'$m/s$'])
display(table)


Constant Parameters
NameValueunit
$S_c$0.1254$m^2$
$b_c$0.7$m$
$g$9.81$m/s^2$
$m_T$9.585$kg$
$l_{zT}$0.0416$m$
$V$30$m/s$

Initial guess

  • Input default values and ranges for parameters
  • Select sections for trainning
  • Adjust parameters based on simulation results
  • Decide start values of parameters for optimization

In [61]:
#initial guess
param0 = [_m_T_l_z_T_g*math.sin(a/57.3) for a in angles]+[F_c]*angles_num

param_name = ['Mu_{}'.format(angles[i]) for i in range(angles_num)] \
           + ['Fc_{}'.format(angles[i]) for i in range(angles_num)]
param_unit = ['Nm']*(2*angles_num)

NparID = Npar
opt_idx = range(Npar)
opt_param0 = [param0[i] for i in opt_idx]
par_del = [0.01]*(2*angles_num)
bounds =  [(-4,4)]*(angles_num) + [(0,0.4)]*(angles_num)
display_default_params()

#select sections for training
section_idx = range(len(time_marks))
display_data_for_train()

#push parameters to engines
push_opt_param()


Default Parameters for optimization
IdxDescription$x_0$unitopt$\delta_{par}$minmax
0Mu_-1700.680084083831Nm*0.01-44
1Mu_-1601.33860206042Nm*0.01-44
2Mu_-1501.95645326691Nm*0.01-44
3Mu_-1402.51486736542Nm*0.01-44
4Mu_-1302.99687971916Nm*0.01-44
5Mu_-1203.3878467786Nm*0.01-44
6Mu_-1103.67589095295Nm*0.01-44
7Mu_-1003.85226145167Nm*0.01-44
8Mu_-903.91160013382Nm*0.01-44
9Mu_-803.85210428848Nm*0.01-44
10Mu_-703.67558140119Nm*0.01-44
11Mu_-603.38739424248Nm*0.01-44
12Mu_-502.99629794672Nm*0.01-44
13Mu_-402.51417403093Nm*0.01-44
14Mu_-301.95566943389Nm*0.01-44
15Mu_-201.33775154174Nm*0.01-44
16Mu_-100.679192718283Nm*0.01-44
17Mu_0-0.0Nm*0.01-44
18Mu_10-0.679192718283Nm*0.01-44
19Mu_20-1.33775154174Nm*0.01-44
20Mu_30-1.95566943389Nm*0.01-44
21Mu_40-2.51417403093Nm*0.01-44
22Mu_50-2.99629794672Nm*0.01-44
23Mu_60-3.38739424248Nm*0.01-44
24Mu_70-3.67558140119Nm*0.01-44
25Mu_80-3.85210428848Nm*0.01-44
26Mu_90-3.91160013382Nm*0.01-44
27Mu_100-3.85226145167Nm*0.01-44
28Mu_110-3.67589095295Nm*0.01-44
29Mu_120-3.3878467786Nm*0.01-44
30Mu_130-2.99687971916Nm*0.01-44
31Mu_140-2.51486736542Nm*0.01-44
32Mu_150-1.95645326691Nm*0.01-44
33Mu_160-1.33860206042Nm*0.01-44
34Mu_170-0.680084083831Nm*0.01-44
35Fc_-1700.06Nm*0.0100.4
36Fc_-1600.06Nm*0.0100.4
37Fc_-1500.06Nm*0.0100.4
38Fc_-1400.06Nm*0.0100.4
39Fc_-1300.06Nm*0.0100.4
40Fc_-1200.06Nm*0.0100.4
41Fc_-1100.06Nm*0.0100.4
42Fc_-1000.06Nm*0.0100.4
43Fc_-900.06Nm*0.0100.4
44Fc_-800.06Nm*0.0100.4
45Fc_-700.06Nm*0.0100.4
46Fc_-600.06Nm*0.0100.4
47Fc_-500.06Nm*0.0100.4
48Fc_-400.06Nm*0.0100.4
49Fc_-300.06Nm*0.0100.4
50Fc_-200.06Nm*0.0100.4
51Fc_-100.06Nm*0.0100.4
52Fc_00.06Nm*0.0100.4
53Fc_100.06Nm*0.0100.4
54Fc_200.06Nm*0.0100.4
55Fc_300.06Nm*0.0100.4
56Fc_400.06Nm*0.0100.4
57Fc_500.06Nm*0.0100.4
58Fc_600.06Nm*0.0100.4
59Fc_700.06Nm*0.0100.4
60Fc_800.06Nm*0.0100.4
61Fc_900.06Nm*0.0100.4
62Fc_1000.06Nm*0.0100.4
63Fc_1100.06Nm*0.0100.4
64Fc_1200.06Nm*0.0100.4
65Fc_1300.06Nm*0.0100.4
66Fc_1400.06Nm*0.0100.4
67Fc_1500.06Nm*0.0100.4
68Fc_1600.06Nm*0.0100.4
69Fc_1700.06Nm*0.0100.4
Training Data
IdxStart(s)Spam(s)Description
017.6999.31ramp u1
1118.70111.70ramp d1
2258.8198.68ramp u2
3359.46100.35ramp d2
4461.0797.72ramp d3
5555.55103.10ramp u4

In [62]:
# select 4 section from training data
#idx = random.sample(section_idx, 4)
idx = section_idx[:]

# interact_guess();
update_guess();


Optimize using ML


In [63]:
display_preopt_params()

if False:
    InfoMat = None
    method = 'trust-ncg'
    def hessian(opt_params, index):
        global InfoMat
        return InfoMat
    dview['enable_infomat']=True
    options={'gtol':1}
    opt_bounds = None
else:
    method = 'L-BFGS-B'
    hessian = None
    dview['enable_infomat']=False
    options={'ftol':1e-6,'maxfun':400}
    opt_bounds = bounds

cnt = 0
tmp_rslt = None
T0 = time.time()
print('#cnt,     Time,      |R|')

%time res =  sp.optimize.minimize(fun=costfunc, x0=opt_param0, \
        args=(opt_idx,), method=method, jac=True, hess=hessian, \
        bounds=opt_bounds, options=options)


Parameters for optimization
IdxDescription$x_0$unitopt$\delta_{par}$minmax
0Mu_-1700.680084083831Nm*0.01-44
1Mu_-1601.33860206042Nm*0.01-44
2Mu_-1501.95645326691Nm*0.01-44
3Mu_-1402.51486736542Nm*0.01-44
4Mu_-1302.99687971916Nm*0.01-44
5Mu_-1203.3878467786Nm*0.01-44
6Mu_-1103.67589095295Nm*0.01-44
7Mu_-1003.85226145167Nm*0.01-44
8Mu_-903.91160013382Nm*0.01-44
9Mu_-803.85210428848Nm*0.01-44
10Mu_-703.67558140119Nm*0.01-44
11Mu_-603.38739424248Nm*0.01-44
12Mu_-502.99629794672Nm*0.01-44
13Mu_-402.51417403093Nm*0.01-44
14Mu_-301.95566943389Nm*0.01-44
15Mu_-201.33775154174Nm*0.01-44
16Mu_-100.679192718283Nm*0.01-44
17Mu_0-0.0Nm*0.01-44
18Mu_10-0.679192718283Nm*0.01-44
19Mu_20-1.33775154174Nm*0.01-44
20Mu_30-1.95566943389Nm*0.01-44
21Mu_40-2.51417403093Nm*0.01-44
22Mu_50-2.99629794672Nm*0.01-44
23Mu_60-3.38739424248Nm*0.01-44
24Mu_70-3.67558140119Nm*0.01-44
25Mu_80-3.85210428848Nm*0.01-44
26Mu_90-3.91160013382Nm*0.01-44
27Mu_100-3.85226145167Nm*0.01-44
28Mu_110-3.67589095295Nm*0.01-44
29Mu_120-3.3878467786Nm*0.01-44
30Mu_130-2.99687971916Nm*0.01-44
31Mu_140-2.51486736542Nm*0.01-44
32Mu_150-1.95645326691Nm*0.01-44
33Mu_160-1.33860206042Nm*0.01-44
34Mu_170-0.680084083831Nm*0.01-44
35Fc_-1700.06Nm*0.0100.4
36Fc_-1600.06Nm*0.0100.4
37Fc_-1500.06Nm*0.0100.4
38Fc_-1400.06Nm*0.0100.4
39Fc_-1300.06Nm*0.0100.4
40Fc_-1200.06Nm*0.0100.4
41Fc_-1100.06Nm*0.0100.4
42Fc_-1000.06Nm*0.0100.4
43Fc_-900.06Nm*0.0100.4
44Fc_-800.06Nm*0.0100.4
45Fc_-700.06Nm*0.0100.4
46Fc_-600.06Nm*0.0100.4
47Fc_-500.06Nm*0.0100.4
48Fc_-400.06Nm*0.0100.4
49Fc_-300.06Nm*0.0100.4
50Fc_-200.06Nm*0.0100.4
51Fc_-100.06Nm*0.0100.4
52Fc_00.06Nm*0.0100.4
53Fc_100.06Nm*0.0100.4
54Fc_200.06Nm*0.0100.4
55Fc_300.06Nm*0.0100.4
56Fc_400.06Nm*0.0100.4
57Fc_500.06Nm*0.0100.4
58Fc_600.06Nm*0.0100.4
59Fc_700.06Nm*0.0100.4
60Fc_800.06Nm*0.0100.4
61Fc_900.06Nm*0.0100.4
62Fc_1000.06Nm*0.0100.4
63Fc_1100.06Nm*0.0100.4
64Fc_1200.06Nm*0.0100.4
65Fc_1300.06Nm*0.0100.4
66Fc_1400.06Nm*0.0100.4
67Fc_1500.06Nm*0.0100.4
68Fc_1600.06Nm*0.0100.4
69Fc_1700.06Nm*0.0100.4
#cnt,     Time,      |R|
0001,    0.622,       10.0
0002,    1.006,      594.0
0003,    1.520,        9.2
0004,    2.003,        0.5
0005,    2.583,       14.6
0006,    3.007,        1.2
0007,    3.410,        0.3
0008,    3.716,        1.0
0009,    4.039,        0.4
0010,    4.358,        0.3
0011,    4.710,        0.2
0012,    5.163,        0.3
0013,    5.484,        0.2
0014,    5.826,        0.2
0015,    6.139,        0.2
0016,    6.478,        0.2
0017,    6.805,        0.3
0018,    7.140,        0.2
0019,    7.480,        0.2
0020,    7.803,        0.2
0021,    8.123,        0.2
0022,    8.423,        0.2
0023,    8.729,        0.2
0024,    9.043,        0.2
0025,    9.414,        0.2
0026,    9.820,        0.2
0027,   10.253,        0.2
0028,   10.618,        0.2
0029,   11.113,        0.2
0030,   11.420,        0.2
0031,   11.737,        0.2
0032,   12.057,        0.2
0033,   12.486,        0.2
0034,   12.857,        0.2
0035,   13.159,        0.2
0036,   13.462,        0.2
0037,   13.816,      364.0
0038,   14.119,       21.3
0039,   14.428,        2.8
0040,   14.785,        0.7
0041,   15.101,        0.3
0042,   15.457,        0.2
0043,   15.787,        0.2
0044,   16.092,        0.2
0045,   16.554,        0.2
0046,   16.875,        0.2
0047,   17.172,        0.2
0048,   17.541,        0.2
0049,   17.831,        0.2
0050,   18.136,        0.2
0051,   18.510,        0.2
0052,   18.813,        0.2
0053,   19.116,        0.2
0054,   19.454,        0.2
0055,   19.864,        0.2
0056,   20.197,        0.2
0057,   20.498,        0.2
0058,   20.832,        0.1
0059,   21.214,        0.1
0060,   21.525,        0.1
0061,   21.851,        0.1
0062,   22.268,        0.1
0063,   22.661,        0.1
0064,   23.034,        0.1
0065,   23.346,        0.1
0066,   23.651,        0.1
0067,   23.970,        0.1
0068,   24.359,        0.1
0069,   24.742,        0.1
0070,   25.096,        0.1
0071,   25.413,        0.1
0072,   25.744,        0.1
0073,   26.084,        0.1
0074,   26.500,        0.1
0075,   26.865,        0.1
0076,   27.185,        0.1
0077,   27.498,        0.1
0078,   27.943,        0.1
0079,   28.395,        0.1
0080,   28.695,        0.1
0081,   29.019,        0.1
0082,   29.350,        0.1
0083,   29.638,        0.1
0084,   29.958,        0.1
0085,   30.305,        0.1
0086,   30.646,        0.1
0087,   30.964,        0.1
0088,   31.271,        0.1
0089,   31.627,        0.1
0090,   31.929,        0.1
0091,   32.248,        0.1
0092,   32.612,        0.1
0093,   32.915,        0.1
0094,   33.264,        0.1
0095,   33.590,        0.1
0096,   33.931,        0.1
0097,   34.246,        0.1
0098,   34.704,        0.1
0099,   35.027,        0.1
0100,   35.370,        0.1
0101,   35.661,      163.8
0102,   35.977,       10.5
0103,   36.354,        2.3
0104,   36.643,        0.8
0105,   36.965,        0.3
0106,   37.298,        0.2
0107,   37.597,        0.1
0108,   37.899,        0.1
0109,   38.197,        0.1
0110,   38.513,        0.1
0111,   38.936,        0.1
0112,   39.349,        0.1
0113,   39.697,        0.1
0114,   40.061,        0.1
0115,   40.377,        0.1
0116,   40.676,        0.1
0117,   40.993,        0.1
0118,   41.334,        0.1
0119,   41.636,        0.1
0120,   41.928,        0.1
Wall time: 41.9 s

Show and test results


In [64]:
display_opt_params()

# show result
idx = range(len(time_marks))
display_data_for_test();

update_guess();


Parameters from optimization
IdxDescription$x$
0Mu_-1700.662927864745
1Mu_-1601.02495697393
2Mu_-1501.50155537121
3Mu_-1402.11479230196
4Mu_-1302.62096826149
5Mu_-1202.88561124751
6Mu_-1103.10052920572
7Mu_-1003.17920809804
8Mu_-903.02787759785
9Mu_-802.83733114296
10Mu_-702.64511226392
11Mu_-602.55396114985
12Mu_-502.41080176853
13Mu_-402.08821718749
14Mu_-301.69336983029
15Mu_-201.33704658572
16Mu_-100.786124470153
17Mu_00.139630363921
18Mu_10-0.502404303052
19Mu_20-1.06067095416
20Mu_30-1.55388357326
21Mu_40-1.97687800236
22Mu_50-2.22694733306
23Mu_60-2.40065976571
24Mu_70-2.58289702002
25Mu_80-2.69317701172
26Mu_90-2.84181215556
27Mu_100-2.89146634773
28Mu_110-2.934887953
29Mu_120-2.79056578426
30Mu_130-2.55945471641
31Mu_140-1.89558536214
32Mu_150-1.26825577494
33Mu_160-0.713354250566
34Mu_170-0.656151848094
35Fc_-1700.06
36Fc_-1600.06
37Fc_-1500.06
38Fc_-1400.06
39Fc_-1300.06
40Fc_-1200.06
41Fc_-1100.06
42Fc_-1000.06
43Fc_-900.06
44Fc_-800.06
45Fc_-700.06
46Fc_-600.06
47Fc_-500.06
48Fc_-400.06
49Fc_-300.06
50Fc_-200.06
51Fc_-100.294259404074
52Fc_00.00411286437817
53Fc_100.0
54Fc_200.06
55Fc_300.06
56Fc_400.06
57Fc_500.06
58Fc_600.06
59Fc_700.06
60Fc_800.06
61Fc_900.06
62Fc_1000.06
63Fc_1100.06
64Fc_1200.06
65Fc_1300.06
66Fc_1400.06
67Fc_1500.06
68Fc_1600.06
69Fc_1700.06
Test Data
IdxStart(s)Spam(s)Description
017.6999.31ramp u1
1118.70111.70ramp d1
2258.8198.68ramp u2
3359.46100.35ramp d2
4461.0797.72ramp d3
5555.55103.10ramp u4

In [67]:
res_params = res['x']
params = param0[:]
for i,j in enumerate(opt_idx):
    params[j] = res_params[i]

k1 = np.array(params[0:angles_num])
k2 = np.array(params[angles_num:angles_num*2])

print('angeles = ')
print(angles)
print('L_unk = ')
print(k1)
print('F_c = ')
print(k2)

%matplotlib inline
plt.figure(figsize=(12,12),dpi=300)
plt.subplot(211)
plt.plot(angles,  k1, 'r')
plt.ylabel('$L_{unk} \, / \, Nm$')
plt.subplot(212)
plt.plot(angles,  k2, 'g')
plt.ylabel('$F_c  \, / \, Nm$')
plt.xlabel('$\phi \, / \, ^o/s$')
plt.show()


angeles = 
[-170, -160, -150, -140, -130, -120, -110, -100, -90, -80, -70, -60, -50, -40, -30, -20, -10, 0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120, 130, 140, 150, 160, 170]
L_unk = 
[ 0.66292786  1.02495697  1.50155537  2.1147923   2.62096826  2.88561125
  3.10052921  3.1792081   3.0278776   2.83733114  2.64511226  2.55396115
  2.41080177  2.08821719  1.69336983  1.33704659  0.78612447  0.13963036
 -0.5024043  -1.06067095 -1.55388357 -1.976878   -2.22694733 -2.40065977
 -2.58289702 -2.69317701 -2.84181216 -2.89146635 -2.93488795 -2.79056578
 -2.55945472 -1.89558536 -1.26825577 -0.71335425 -0.65615185]
F_c = 
[ 0.06        0.06        0.06        0.06        0.06        0.06        0.06
  0.06        0.06        0.06        0.06        0.06        0.06        0.06
  0.06        0.06        0.2942594   0.00411286  0.          0.06        0.06
  0.06        0.06        0.06        0.06        0.06        0.06        0.06
  0.06        0.06        0.06        0.06        0.06        0.06        0.06      ]

In [14]:
toggle_inputs()
button_qtconsole()



In [15]:
(-0.05-0.05)/(80/57.3)


Out[15]:
-0.07162500000000001

In [16]:
Clda_cmp/4


Out[16]:
-0.075975

In [ ]: