def params_to_chi2(params_modelo,Mabs):
    '''Dados los parámetros del modelo devuelve un chi2'''

    [b,c,d,r_0,n] = params_modelo

    def dX_dz(z, variables):
        x = variables[0]
        y = variables[1]
        v = variables[2]
        w = variables[3]
        r = variables[4]

        G = gamma(r,b,c,d,n)

        s0 = (-w + x**2 + (1+v)*x - 2*v + 4*y) / (z+1)
        s1 = - (v*x*G - x*y + 4*y - 2*y*v) / (z+1)
        s2 = -v * (x*G + 4 - 2*v) / (z+1)
        s3 = w * (-1 + x+ 2*v) / (z+1)
        s4 = -x*r*G/(1+z)
        return [s0,s1,s2,s3,s4]

    z,E = integrador(dX_dz,ci, params_modelo)
    os.chdir(path_git+'/Software/Estadística/')
    zcmb,zhel, Cinv, mb = leer_data_pantheon('lcparam_full_long_zhel.txt')
    muth = magn_aparente_teorica(z,E,zhel,zcmb)

    if isinstance(Mabs,list):
        chis_M = np.zeros(len(Mabs))
        for i,M_0 in enumerate(Mabs):
            chis_M[i] = chi_2(muth,mb,M_0,Cinv)
        return chis_M
    else:
        chi2 = chi_2(muth,mb,Mabs,Cinv)
        return chi2
omega_m = 0.1
H0 = 73.48
eps = 10**(-41)
mstep = 8*10**(-8)
params_fisicos = [omega_m,b,H0]

#Integramos con RK45
#zs_ode, H_HS = integrador(params_fisicos, verbose=True, model='HS')
#_, H_ST = integrador(params_fisicos, verbose=True, model='ST')
#_, H_EXP = integrador(params_fisicos, epsilon=eps, verbose=True, model='EXP',max_step=10**(-6))

#Integramos con LSODA
#zs_ode, H_HS_1 = integrador(params_fisicos, verbose=True, model='HS',method='LSODA')
#_, H_ST_1 = integrador(params_fisicos, verbose=True, model='ST',method='LSODA')
zs_ode, H_EXP_1 = integrador(params_fisicos, epsilon=eps,
                verbose=True, model='EXP',method='LSODA'
                ,max_step=mstep)
plt.plot(zs_ode,H_EXP_1)
#%%
def porcentual_error(vec_ref,vec_compare):
    error = 100 * (1 - (vec_compare/vec_ref))
    return error

#error_HS = porcentual_error(H_HS,H_HS_1)
#error_ST = porcentual_error(H_ST,H_ST_1)
error_EXP = porcentual_error(H_EXP,H_EXP_1)

%matplotlib qt5
plt.figure()
plt.title('Error en integracion comparando distintos métodos')
plt.xlabel('z (redshift)')
    return H

#%%
omega_m = 0.24
H0 = 73.48

#bs = np.linspace(0.1, 5, 3)
bs = [3, 6]
cantidad_zs = int(10**3)
max_steps = 10**(-4)

Hs = np.zeros((len(bs),cantidad_zs))

for i, b in enumerate(bs):
    params_fisicos = [omega_m,b,H0]
    zs, H_ode = integrador(params_fisicos, n=2, cantidad_zs=cantidad_zs,
                max_step=max_steps)
    Hs[i,:] = H_ode

#%%
H_lcdm = H_LCDM(zs, omega_m, H0)
Da_lcdm = (c_luz_km/(1 +zs)) * cumtrapz(H_lcdm**(-1), zs, initial=0)
Dl_lcdm = (c_luz_km*(1 +zs)) * cumtrapz(H_lcdm**(-1), zs, initial=0)

#%%
%matplotlib qt5
plt.close()
plt.figure()
plt.grid(True)

#plt.title('Modelo de Hu-Sawicki con $n=1$', fontsize=15)
plt.title('Modelo de Starobinsky con $n=1$', fontsize=15)
import sys
import os
from os.path import join as osjoin
from pc_path import definir_path
path_git, path_datos_global = definir_path()
os.chdir(path_git)
sys.path.append('./Software/Funcionales/')
from funciones_int import integrador
from funciones_taylor import Taylor_HS

b = 0.15
omega_m = 0.3
H0 = 73.48
params_fisicos=[omega_m,b,H0]
zs, H_RK45 = integrador(params_fisicos, cantidad_zs=int(10**5),
                        max_step=10**(-5), model='HS',method='RK45')
_, H_LSODA = integrador(params_fisicos, cantidad_zs=int(10**5),
                        max_step=10**(-5), model='HS',method='LSODA')
error = 100*np.abs(1-(H_LSODA/H_RK45))

#%%
%matplotlib qt5
plt.close()
plt.figure()
plt.grid(True)
plt.title('Error Porcentual para Hu-Sawicki',fontsize=15)

plt.xlabel('z',fontsize=13)
plt.ylabel('Error Porcentual',fontsize=13)
plt.xticks(fontsize=14)
plt.yticks(fontsize=14)
from scipy.interpolate import interp1d
from scipy.constants import c as c_luz #metros/segundos
c_luz_km = c_luz/1000 #km/seg
#ORDEN DE PRESENTACION DE LOS PARAMETROS: Mabs,omega_m,b,H_0,n

z_final = 30
cantidad_zs = int(10**5)
max_step = 10**(-5)

b = 0.5
omega_m = 0.24
H0 = 73.48
params_fisicos = [omega_m,b,H0]

zs_ref, H_ref = integrador(params_fisicos, n=2, cantidad_zs=cantidad_zs,
            max_step=max_step, z_inicial=z_final, z_final=0,
            model='HS')

f = interp1d(zs_ref,H_ref)


z_inicial = np.linspace(3,z_final,5)
error_porcentual = np.zeros(len(z_inicial))
for i,z0 in enumerate(z_inicial):

    zs, H_ode = integrador(params_fisicos, n=2, cantidad_zs=cantidad_zs,
                max_step=max_step, z_inicial=z0, z_final=0,
                model='HS')
    H_ref = f(zs)

    error_porcentual[i] = 100*np.abs(np.mean(1-(H_ode/H_ref)))
os.chdir(path_git)
sys.path.append('./Software/Funcionales/')
from funciones_int import integrador

#%%
b = 0.1
omega_m = 0.24
H0 = 73.48
params_fisicos=[omega_m,b,H0]

#%%
archivo_math = '/Software/Sandbox/Integracion numérica/chequeos_ODE/chequeo_otros_lenguajes/Mathematica'
os.chdir(path_git+archivo_math)
z_math,E_math=np.loadtxt('mfile_ODE_{}.csv'.format(b),unpack=True,delimiter = ',')

zs, H_ode=integrador(params_fisicos,max_step=0.003,cantidad_zs=int(10**5))
f = interp1d(zs,H_ode)
H_int = f(z_math)
E_int = H_int/H0

#%%
%matplotlib qt5
plt.figure()
plt.grid(True)
plt.xlabel('z(redshift)')
plt.ylabel('Error porcentual')
plt.plot(z_math,100*(1-E_int/E_math),label='Error porcentual')
plt.legend(loc='best')
np.mean(100*(1-(E_int/E_math)))

#%%
bs=np.linspace(0.01,0.5,500)
#bs=np.array([0.01, 0.02, 0.05, 0.1, 0.12, 0.15, 0.2, 0.3, 0.4, 0.5, 1, 2]) #HS

error_b = np.zeros(len(bs))
omega_m = 0.3
H0 = 73.48


#%% Hu-Sawicki n=2
for i, b in enumerate(bs):
    print(i)
    params_fisicos = [omega_m,b,H0]

    zs, H_ode = integrador(params_fisicos, cantidad_zs=int(10**5), max_step=10**(-5), model='HS')
    H_taylor = Taylor_HS(zs,omega_m,b,H0)

    error_b[i] = 100*np.abs(np.mean(1-(H_taylor/H_ode)))

#%%
%matplotlib qt5
plt.close()
plt.figure()
plt.grid(True)
plt.title('Error Porcentual para Hu-Sawicki n=1',fontsize=15)

plt.xlabel('b',fontsize=13)
plt.ylabel('Error Porcentual',fontsize=13)
plt.xticks(fontsize=14)
plt.yticks(fontsize=14)
params_fisicos = [omega_m,b,H0]

z_inicial = 30
z_final = 0
cantidad_zs = int(10**6)

zs_patron  = np.linspace(z_inicial,z_final,10000)
cantidad_zs = np.linspace(10,10000,10)

cant_zs = np.array([int(i) for i in cantidad_zs])
print(cant_zs)
Hs = []

for i,cant in enumerate(cant_zs):

    zs, H_ode = integrador(params_fisicos, n=1, cantidad_zs=cant,
    max_step=0.003)

    f = interp1d(zs,H_ode)
    Hs.append(f(zs_patron))

final = []
for j in range(1,len(Hs)):
    aux = np.mean((Hs[j]-Hs[j-1])/Hs[j]);
    final.append(aux);
#%%
%matplotlib qt5
plt.close()
plt.figure()
plt.grid(True)
plt.xlabel('cantidad_zs')
plt.ylabel('%Hs')
if __name__ == '__main__':
    from matplotlib import pyplot as plt

    b = 0.6
    omega_m = 0.24
    H0 = 73.48
    params_fisicos = [omega_m,b,H0]

    z_inicial = 10
    z_final = 0

    cantidad_zs = int(10**5)
    max_step = 10**(-4)

    zs, H_ode = integrador(params_fisicos, n=1, cantidad_zs=cantidad_zs,
                max_step=max_step, z_inicial=z_inicial, z_final=z_final,
                verbose=True,
                model='EXP')
    plt.plot(zs,H_ode)

    #%%
    zs_LCDM = np.linspace(z_final,z_inicial,cantidad_zs)
    Hs_LCDM = H0 * np.sqrt(omega_m * (1+zs_LCDM)**3 + (1-omega_m))

    from matplotlib import pyplot as plt
    %matplotlib qt5
    plt.plot(zs_ode,H_ode)
    plt.plot(zs_LCDM,Hs_LCDM)
    #%%
    #out= np.zeros((len(zs),2))
    #out[:,0] = zs
    #out[:,1] = H_ode/H0
Beispiel #10
0
from pc_path import definir_path
path_git, path_datos_global = definir_path()
os.chdir(path_git)
sys.path.append('./Software/Funcionales/')
from funciones_condiciones_iniciales import condiciones_iniciales
from funciones_cambio_parametros import params_fisicos_to_modelo
from funciones_int import integrador
from funciones_taylor import Taylor_HS
#%%

b = 0.01
omega_m = 0.24
H0 = 73.48
params_fisicos = [omega_m, b, H0]

zs, H_ode = integrador(params_fisicos)
H_taylor = Taylor_HS(zs, omega_m, b, H0)

#%%
#%matplotlib qt5
plt.close()
plt.figure()
plt.grid(True)
plt.xlabel('z(redshift)')
plt.ylabel('E(z)')
plt.plot(zs, H_taylor / H0, label='Taylor')
plt.plot(zs, H_ode / H0, label='ODE')
plt.legend(loc='best')

#%% Calculo el error porcentual entre la ODE y el taylor a b fijo.
plt.figure()