Exemplo n.º 1
0
def fig_fff2(Rpc, ds_sim, k, t):
    test_read_m16_ds()
    plt.plot(Rpc[:], ds_sim[k, t, :], '-*')
    nn = ds_sim[k, t, :].size  #求样本大小
    x_mean = np.mean(ds_sim[k, t, :])  #求算术平均值
    x_std = np.std(ds_sim[k, t, :])  #求标准偏差
    x_se = x_std / np.sqrt(nn)  #求标准误差
    dof = nn - 1  #自由度计算
    alpha = 1.0 - 0.95
    conf_region = st.ppf(1-alpha/2.,dof)*x_std*\
    np.sqrt(1.+1./nn)#设置置信区间
    plt.errorbar(Rpc[:], ds_sim[k, t, :], yerr=x_std, fmt='-', linewidth=0.5)
    plt.xlabel(r'$R-Mpc/h$')
    plt.ylabel(r'$\Delta\Sigma-hM_\odot/{pc^2}$')
    return ()
def c_fit_datar(x0r):
    # (mr,d_exr) = x0r
    rp,mr,mb,d_exr,d_exb,b,a_r,a_b = va_da(p=True)
    d_exr = x0r
    #lmr = len(mr)#质量数组的长度
    ldr = len(d_exr)#指数数组的长度
    #dssimr = np.zeros((lmr,ldr,b),dtype=np.float)
    dssimr = np.zeros((ldr,b),dtype=np.float)
    #for k in range(0,lmr):
    for t in range(0,ldr):
        #m_ = mr[k]
        m = mr
        xr = d_exr[t]
        #cRp = rp
        #dssimr[t,:] = c_deltaSigmar
        #c_Rp,c_Sigmar,c_deltaSigmar = calcu_sigma(cRp,m,xr)   
        #修正
        cRp = rp
        z_r = 0.230
        #z_r = 0.105
        #计算模型在对应的投射距离上的预测信号取值        
        #c_表示该变量做继续比较量
        #修正
        c_Rp,c_Sigmar,c_deltaSigmar = calcu_sigmaz(cRp,m,xr,z_r)
        dssimr[t,:] = c_deltaSigmar
    size_ds1 = np.shape(dssimr)   
    print(size_ds1)
    delta_r = np.zeros(ldr,dtype=np.float)
    rsa,dssa,ds_errsa = test_read_m16_ds()
    # for k in range(0,lmr):
    for t in range(0,ldr):
        d_r = 0
        for n in range(0,b):
            d_r = d_r+((dssimr[t,n]-dssa[0,n])/ds_errsa[0,n])**2
        delta_r[t] = d_r
    # print(delta_r)
    #下面用bestr和bestb记录最后比较结果
    '''
    #下面求取最小值及索引号
    aa = delta_r.tolist()
    xa = aa.index(min(delta_r))
    deltar = min(delta_r) 
    delta_r = deltar
    bestfr = d_exr[xa]    
    dexr = bestfr
    best_mr = mr*10**dexr
    print(delta_r)
    print('mr=',best_mr)
    print('dexr=',bestfr)
    '''
    return delta_r
def c_fit_datab(x0b):
    # (mb,d_exb) = x0b
    rp,mr,mb,d_exr,d_exb,b,a_r,a_b = va_da(p=True)
    d_exb = x0b
    # lmb = len(mb)#质量数组的长度
    ldb = len(d_exb)
    dssimb = np.zeros((ldb,b),dtype=np.float)
    # for k in range(0,lmb):
    for t in range(0,ldb):
        #m_ = mb[k]
        m = mb
        xb = d_exb[t]
        #cRp = rp
        #计算模型在对应的投射距离上的预测信号取值
        #c_Rp,c_Sigmab,c_deltaSigmab = calcu_sigma(cRp,m,xb)
        #dssimb[t,:] = c_deltaSigmab
        #修正
        cRp = rp  
        z_b = 0.246 
        #z_b = 0.124
        #c_表示该变量做继续比较量
        #修正
        c_Rp,c_Sigmab,c_deltaSigmab = calcu_sigmaz(cRp,m,xb,z_b)
        dssimb[t,:] = c_deltaSigmab
    size_ds2 = np.shape(dssimb)   
    print(size_ds2)
    delta_b = np.zeros(ldb,dtype=np.float)
    rsa,dssa,ds_errsa = test_read_m16_ds()
    # for k in range(0,lmb):
    for t in range(0,ldb):
        d_b = 0
        for n in range(0,b):
            d_b = d_b+((dssimb[t,n]-dssa[1,n])/ds_errsa[1,n])**2
        delta_b[t] = d_b
    # print(delta_b)
    #下面用bestr和bestb记录最后比较结果
    #下面求取最小值及索引号
    '''
    bb = delta_b.tolist()
    xb = bb.index(min(delta_b))
    deltab = min(delta_b)  
    delta_b = deltab
    bestfb = d_exb[xb]    
    dexb = bestfb
    best_mb = mr*10**dexb
    print(delta_b)
    print('mb=',best_mb)
    print('dexb=',bestfb)
    '''
    return delta_b
Exemplo n.º 4
0
def fig_f(inm, Rp, r, rs, r_200, rho_R, sigma, deltasigma):
    #def fig_f(ff):
    #inm,Rs,r,rs,r_200,rho_R,sigma,deltasigma=semula_tion(m_,x)
    lm = len(inm)
    plt.figure()
    plt.subplot(121)
    # delta1 = np.zeros(lm,dtype=np.float)
    # delta2 = np.zeros(lm,dtype=np.float)
    for k in range(0, lm):
        plt.loglog(r[k, :], rho_R[k])
        '''
        delta1[k] = r_200[k]
        delta2[k] = rs[k]
        plt.axvline(delta1[k],ls='--',linewidth=0.5,color='red')
        plt.axvline(delta2[k],ls='--',linewidth=0.5,color='blue')
        '''
    plt.xlabel(r'$r-Mpc/h$')
    plt.ylabel(r'$\rho(R)-M_\odot/h$')
    plt.grid()
    print('mh_inte=', inm)
    plt.subplot(122)
    #下面引入具体的deltasigma数据的观测值,和所给质量比较
    test_read_m16_ds()
    delta1 = np.zeros(lm, dtype=np.float)
    delta2 = np.zeros(lm, dtype=np.float)
    for k in range(0, lm):
        plt.loglog(Rp[k, :], deltasigma[k, :])
        delta1[k] = r_200[k]
        delta2[k] = rs[k]
        plt.axvline(delta1[k], ls='--', linewidth=0.5, color='red')
        plt.axvline(delta2[k], ls='--', linewidth=0.5, color='blue')
    plt.xlabel(r'$R-Mpc/h$')
    plt.ylabel(r'$\Delta\Sigma-hM_\odot/{pc^2}$')
    plt.tight_layout()
    plt.show()
    out = [inm, rho_R, deltasigma, sigma]
    return (out)
Exemplo n.º 5
0
def c_fit_datar(u):
    #(mr,mb,d_exr,d_exb) = arr
    # (mr,d_exr) = x0r
    rp, mr, mb, d_exr, d_exb, b, a_r, a_b = va_da(p=True)
    lmr = len(mr)  #质量数组的长度
    ldr = len(d_exr)  #指数数组的长度
    dssimr = np.zeros((lmr, ldr, b), dtype=np.float)
    for k in range(0, lmr):
        for t in range(0, ldr):
            m_ = mr[k]
            xr = d_exr[t]
            #c_表示该变量做继续比较量
            #cRp = rp
            #c_Rp,c_Sigmar,c_deltaSigmar = calcu_sigma(cRp,m_,xr)
            #dssimr[t,:] = c_deltaSigmar
            #修正
            cRp = rp
            z_r = 0.105
            #计算模型在对应的投射距离上的预测信号取值
            c_Rp, c_Sigmar, c_deltaSigmar = calcu_sigmaz(cRp, m_, xr, z_r)
            dssimr[k, t, :] = c_deltaSigmar
            #修正
    size_ds1 = np.shape(dssimr)
    print(size_ds1)
    fitr = np.zeros((lmr, 2), dtype=np.int)
    delta_rr = np.zeros((lmr, ldr), dtype=np.float)
    rsa, dssa, ds_errsa = test_read_m16_ds()
    for k in range(0, lmr):
        for t in range(0, ldr):
            d_r = 0
            for n in range(0, size_ds1[2]):
                d_r = d_r + (
                    (dssimr[k, t, n] - dssa[0, n]) / ds_errsa[0, n])**2
            delta_rr[k, t] = d_r
    print('size_x^2_r=', np.shape(delta_rr))
    #print(delta_rr)
    #下面这段求每个质量级对应的方差最小值
    for k in range(0, lmr):
        aa = delta_rr[k, :].tolist()
        #先把np的定义数组转为列表,再寻找索引号,tolist()表示内置函数调用
        xa = aa.index(min(delta_rr[k, :]))
        fitr[k, 0] = k
        fitr[k, 1] = xa
    # print(fitr)
    #比较提取出的五个最小值的最小值为最后结果
    deltar = np.zeros(lmr, dtype=np.float)
    xrr = np.zeros((lmr, 2), dtype=np.float)
    for k in range(0, lmr):
        deltar[k] = delta_rr[fitr[k, 0], fitr[k, 1]]
        xrr[k] = [mr[fitr[k, 0]], d_exr[fitr[k, 1]]]
    #下面用bestr和bestb记录最后比较结果
    bestfr = np.zeros(2, dtype=np.float)
    #下面求取最小值及索引号
    aa = deltar.tolist()
    xa = aa.index(min(deltar))
    delta_r = min(deltar)
    bestfr = fitr[xa, :]
    bestr = mr[bestfr[0]]
    d_ex_r = d_exr[bestfr[1]]
    dexr1 = d_ex_r
    ##对比文献修正指数如下
    h = 0.673
    dexr = d_ex_r + np.log10(bestr * h)
    best_mr = bestr
    #作图对比最佳情况
    plt.figure()
    # fig_ff(rp,dssimr,lmr,fitr)
    l1 = bestfr[0]
    l2 = bestfr[1]
    fig_fff2(rp, dssimr, l1, l2)
    plt.title('Red')
    plt.show()
    print(bestfr)
    print('mr=', best_mr)
    print('dexr=', dexr1)
    print('co_dex=', dexr)
    print('corr_mr=', 10**dexr)
    print('x^2=', delta_r)
    # return rp,best_mr,dexr,a,delta_r,a,b,yy
    return delta_r, lmr, dssimr, fitr, delta_rr, xrr, dexr1, ldr
Exemplo n.º 6
0
def c_fit_datab(v):
    #(mr,mb,d_exr,d_exb) = arr
    # (mb,d_exb) = x0b
    rp, mr, mb, d_exr, d_exb, b, a_r, a_b = va_da(p=True)
    lmb = len(mb)  #质量数组的长度
    ldb = len(d_exb)
    dssimb = np.zeros((lmb, ldb, b), dtype=np.float)
    for k in range(0, lmb):
        for t in range(0, ldb):
            m_ = mb[k]
            xb = d_exb[t]
            #c_表示该变量做继续比较量
            #cRp = rp
            #c_Rp,c_Sigmab,c_deltaSigmab = calcu_sigma(cRp,m_,xb)
            #dssimb[t,:] = c_deltaSigmab
            #修正
            cRp = rp
            z_b = 0.124
            #计算模型在对应的投射距离上的预测信号取值
            c_Rp, c_Sigmab, c_deltaSigmab = calcu_sigmaz(cRp, m_, xb, z_b)
            dssimb[k, t, :] = c_deltaSigmab
    size_ds2 = np.shape(dssimb)
    print(size_ds2)
    fitb = np.zeros((lmb, 2), dtype=np.int)
    delta_bb = np.zeros((lmb, ldb), dtype=np.float)
    rsa, dssa, ds_errsa = test_read_m16_ds()
    for k in range(0, lmb):
        for t in range(0, ldb):
            d_b = 0
            for n in range(0, size_ds2[2]):
                d_b = d_b + (
                    (dssimb[k, t, n] - dssa[1, n]) / ds_errsa[1, n])**2
            delta_bb[k, t] = d_b
    print('size_x^2_b=', np.shape(delta_bb))
    #print(delta_bb)
    #下面这段求每个质量级对应的方差最小值
    for k in range(0, lmb):
        bb = delta_bb[k, :].tolist()
        #先把np的定义数组转为列表,再寻找索引号,tolist()表示内置函数调用
        xb = bb.index(min(delta_bb[k, :]))
        fitb[k, 0] = k
        fitb[k, 1] = xb
    # print(fitr)
    # print(fitb)
    #比较提取出的五个最小值的最小值为最后结果
    xbb = np.zeros((lmb, 2), dtype=np.float)
    deltab = np.zeros(lmb, dtype=np.float)
    for k in range(0, lmb):
        deltab[k] = delta_bb[fitb[k, 0], fitb[k, 1]]
        xbb[k] = [mb[fitb[k, 0]], d_exb[fitb[k, 1]]]
    #下面用bestr和bestb记录最后比较结果
    bestfb = np.zeros(2, dtype=np.float)
    #下面求取最小值及索引号
    bb = deltab.tolist()
    xb = bb.index(min(deltab))
    delta_b = min(deltab)
    bestfb = fitb[xb, :]
    bestb = mb[bestfb[0]]
    d_ex_b = d_exb[bestfb[1]]
    dexb1 = d_ex_b
    ##对比文献,修正指数如下
    dexb = d_ex_b + np.log10(bestb)
    best_mb = bestb
    #作图对比最佳情况
    plt.figure()
    # fig_ff(rp,dssimr,lmr,fitr)
    l1 = bestfb[0]
    l2 = bestfb[1]
    fig_fff2(rp, dssimb, l1, l2)
    plt.title('blue')
    plt.show()
    print(bestfb)
    print('co_dex=', dexb)
    print('dex=', dexb1)
    print('mb=', best_mb)
    print('corr_mb=', 10**dexb)
    print('x^2=', delta_b)
    # return rp,best_mb,,dexb,a,b,yy,delta_b
    return delta_b, lmb, dssimb, fitb, delta_bb, xbb, dexb1, ldb
Exemplo n.º 7
0
def fit_datab(y):
    h = 0.673
    #先找出观测值对应的rp
    rsa, dssa, ds_errsa = test_read_m16_ds()
    # print('ds=',dssa)
    # print('ds_err=',ds_errsa)
    #print('rp=',rsa)
    a = np.shape(dssa)
    print('size a=', a)
    ##注意到观测数值选取的是物理坐标,需要靠里尺度银子修正,修正如下
    z_b = 0.246
    #z_b = 0.124
    a_b = 1 / (1 + z_b)
    ##此时对于预测的R也要做修正
    rp = np.array(
        [rsa[0, k] for k in range(0, len(rsa[0, :])) if rsa[0, k] * h <= 2])
    # rp = [rsa[0,k] for k in range(0,len(rsa[0,:])) if rsa[0,k]*h<=2]
    # rp = rsa[0,:]
    #该句直接对数组筛选,计算2Mpc以内(保证NFW模型适用的情况下)信号
    print(rp)
    b = len(rp)
    m, m_dex, lmw, lml = dolad_data(m=True, hz=True)
    #下面做两组数据的方差比较,注意不能对观测数据进行插值
    #比较方法,找出观测的sigma数值对应的Rp,再根据模型计算此时的模型数值Sigma(该步以完成)
    ds_simb = np.zeros((lmw, lml, b), dtype=np.float)
    rb = np.zeros((lmw, lml), dtype=np.float)
    for k in range(0, lmw):
        for t in range(0, lml):
            m_ = m[k, t]
            x = m_dex[k]
            #Rpc = rp
            #Rpc,Sigma,deltaSigma = calcu_sigma(Rpc,m_,x,z_b)
            #ds_simb[k,t,:] = deltaSigma
            #对比文献,把物理距离转为共动距离
            Rpc = rp
            #计算模型在对应的投射距离上的预测信号取值
            Rpc, Sigma, deltaSigma, rs = calcu_sigmaz(Rpc, m_, x, z_b)
            #预测信号也做修正
            ds_simb[k, t, :] = deltaSigma
            rb[k, t] = rs
    yy = np.shape(ds_simb)
    #print('rb=',rb)#输出查看ds_sim的维度,即模型预测下的透镜信号
    #比较观测的sigma和预测的Sigma,比较结果用fitr和fitb记录比较结果
    fitb = np.zeros((lmw, 2), dtype=np.int)
    delta_b = np.zeros((lmw, lml), dtype=np.float)
    for k in range(0, lmw):
        for t in range(0, lml):
            d_b = 0
            for n in range(0, yy[2]):
                d_b = d_b + (
                    (ds_simb[k, t, n] - dssa[1, n]) / ds_errsa[1, n])**2
            delta_b[k, t] = d_b
    #print(delta_b)
    #下面这段求每个质量级对应的方差最小值
    for k in range(0, lmw):
        #先把np的定义数组转为列表,再寻找索引号,tolist()表示内置函数调用
        bb = delta_b[k, :].tolist()
        xb = bb.index(min(delta_b[k, :]))
        fitb[k, 0] = k
        fitb[k, 1] = xb
    print(fitb)
    #下面做图比较几个最佳预测值与观测的对比情况
    Rpc = rp
    fig_ff(Rpc, ds_simb, lmw, fitb)
    plt.title('B-galaxy')
    plt.show()
    #比较提取出的五个最小值的最小值为最后结果
    deltab = np.zeros(lmw, dtype=np.float)
    for k in range(0, lmw):
        deltab[k] = delta_b[fitb[k, 0], fitb[k, 1]]
    #下面用bestr和bestb记录最后比较结果
    bestfb = np.zeros(2, dtype=np.float)
    bb = deltab.tolist()
    xb = bb.index(min(deltab))
    bestfb = fitb[xb, :]
    bestb = m[bestfb[0], bestfb[1]]
    best_mb = bestb
    dexb1 = m_dex[bestfb[0]]
    #下面是与文献对比做的修正
    dexb = m_dex[bestfb[0]] + np.log10(bestb * h)
    #作图对比最佳情况
    plt.figure()
    k = bestfb[0]
    t = bestfb[1]
    fig_fff2(rp, ds_simb, k, t)
    plt.title('Blue')
    #plt.savefig('fit_b.png',dpi=600)
    plt.show()
    print('x^2=', min(deltab))
    print('mb=', best_mb)  #此句质量计算正常
    print('positionb=', bestfb)
    print('dexb=', dexb1)
    print('co_dexb=', dexb)
    print('corr_mb=', 10**dexb)
    return rp, best_mb, dexb1, a, b, yy, dexb, a_b, delta_b
Exemplo n.º 8
0
def fit_datar(y):
    h = 0.673
    #先找出观测值对应的rp
    rsa, dssa, ds_errsa = test_read_m16_ds()
    # print('ds=',dssa)
    # print('ds_err=',ds_errsa)
    #print('rp=',rsa)
    a = np.shape(dssa)
    print('size a=', a)
    ##注意到观测数值选取的是物理坐标,需要靠里尺度银子修正,修正如下
    z_r = 0.230
    #z_r = 0.105
    a_r = 1 / (1 + z_r)
    ##此时对于预测的R也要做修正
    rp = np.array(
        [rsa[0, k] for k in range(0, len(rsa[0, :])) if rsa[0, k] * h <= 2])
    #rp = np.array([rsa[0,k] for k in range(0,len(rsa[0,:])) if rsa[0,k]*h<=5])
    #rp = rsa[0,:]
    #该句直接对数组筛选,计算2Mpc以内(保证NFW模型适用的情况下)信号
    print(rp)
    b = len(rp)
    m, m_dex, lmw, lml = dolad_data(m=True, hz=True)
    #下面做两组数据的方差比较,注意不能对观测数据进行插值
    #比较方法,找出观测的sigma数值对应的Rp,再根据模型计算此时的模型数值Sigma(该步以完成)
    ds_simr = np.zeros((lmw, lml, b), dtype=np.float)
    rr = np.zeros((lmw, lml), dtype=np.float)
    for k in range(0, lmw):
        for t in range(0, lml):
            m_ = m[k, t]
            x = m_dex[k]
            #Rpc = rp
            #Rpc,Sigma,deltaSigma = calcu_sigma(Rpc,m_,x)
            #ds_simr[k,t,:] = deltaSigma
            #对比文献,加入尺度因子修正如下,把物理的距离转为共动的距离
            #计算模型在对应的投射距离上的预测信号取值
            Rpc = rp
            Rpc, Sigma, deltaSigma, rs = calcu_sigmaz(Rpc, m_, x, z_r)
            #对预测信号做相应的变化,把共动的转为物理的
            ds_simr[k, t, :] = deltaSigma
            rr[k, t] = rs
    yy = np.shape(ds_simr)
    #print('rr=',rr)#输出查看ds_sim的维度,即模型预测下的透镜信号
    #比较观测的sigma和预测的Sigma,比较结果用fitr和fitb记录比较结果
    fitr = np.zeros((lmw, 2), dtype=np.int)
    delta_r = np.zeros((lmw, lml), dtype=np.float)
    for k in range(0, lmw):
        for t in range(0, lml):
            d_r = 0
            for n in range(0, yy[2]):
                d_r = d_r + (
                    (ds_simr[k, t, n] - dssa[0, n]) / ds_errsa[0, n])**2
            delta_r[k, t] = d_r
    #print(delta_r)
    #下面这段求每个质量级对应的方差最小值
    for k in range(0, lmw):
        #先把np的定义数组转为列表,再寻找索引号,tolist()表示内置函数调用
        aa = delta_r[k, :].tolist()
        xa = aa.index(min(delta_r[k, :]))
        fitr[k, 0] = k
        fitr[k, 1] = xa
    print(fitr)
    #下面做图比较几个最佳预测值与观测的对比情况
    Rpc = rp
    fig_ff(Rpc, ds_simr, lmw, fitr)
    plt.title('R-galaxy')
    plt.show()
    #比较提取出的五个最小值的最小值为最后结果
    deltar = np.zeros(lmw, dtype=np.float)
    for k in range(0, lmw):
        deltar[k] = delta_r[fitr[k, 0], fitr[k, 1]]
    #下面用bestr和bestb记录最后比较结果
    bestfr = np.zeros(2, dtype=np.float)
    aa = deltar.tolist()
    xa = aa.index(min(deltar))
    bestfr = fitr[xa, :]
    bestr = m[bestfr[0], bestfr[1]]
    best_mr = bestr
    dexr1 = m_dex[bestfr[0]]
    #下面两句是为与文献对比做的修正
    dexr = m_dex[bestfr[0]] + np.log10(bestr * h)
    #作图对比最佳情况
    plt.figure()
    k = bestfr[0]
    t = bestfr[1]
    fig_fff2(rp, ds_simr, k, t)
    plt.title('Red')
    #plt.savefig('fit_r.png',dpi=600)
    plt.show()
    print('x^2=', min(deltar))
    print('mr=', best_mr)  #此句质量计算正常
    print('positionr=', bestfr)
    print('dexr=', dexr1)
    print('co_dexr=', dexr)
    print('corr_mr=', 10**dexr)
    return rp, best_mr, dexr1, a, b, yy, dexr, a_r, delta_r
def fit_datab(y):
#def fit_datab(mass_bin):
    h = 0.7
    #先找出观测值对应的rp
    rsa,dssa,ds_errsa = test_read_m16_ds()
    #rsa,dssa,ds_errsa = test_read_m16_ds(mass_bin=mass_bin)
    # print('ds=',dssa)
    # print('ds_err=',ds_errsa)
    #print('rp=',rsa)  
    a = np.shape(dssa)
    print('size a=',a)
    ##注意到观测数值选取的是物理坐标,需要靠里尺度银子修正,修正如下
    z_b = 0.1
    #z_b = 0.124
    a_b = 1/(1+z_b)
    ##此时对于预测的R也要做修正
    rp = np.array([rsa[0,k] for k in range(0,len(rsa[0,:])) if rsa[0,k]*h<=5]) 
    # rp = [rsa[0,k] for k in range(0,len(rsa[0,:])) if rsa[0,k]*h<=2]
    # rp = rsa[0,:]
    #该句直接对数组筛选,计算2Mpc以内(保证NFW模型适用的情况下)信号
    print(rp)
    b = len(rp)
    mr,mb,N = input_mass_bin(v=True)
    #m,N = input_mass_bin(v=True)
    #下面做两组数据的方差比较,注意不能对观测数据进行插值
    #比较方法,找出观测的sigma数值对应的Rp,再根据模型计算此时的模型数值Sigma(该步以完成)    
    ds_simb = np.zeros((N,b),dtype=np.float)
    rb = np.zeros(N,dtype=np.float)
    for t in range(0,N):
        m_ = 1
        x = mb[t]
        #x = m[t]
        #Rpc = rp
        #Rpc,Sigma,deltaSigma = calcu_sigma(Rpc,m_,x)    
        #ds_simr[k,t,:] = deltaSigma
        #对比文献,加入尺度因子修正如下,把物理的距离转为共动的距离
        #计算模型在对应的投射距离上的预测信号取值
        Rpc = rp
        Rpc,Sigma,deltaSigma,rs = calcu_sigmaz(Rpc,m_,x,z_b)
        #对预测信号做相应的变化,把共动的转为物理的
        ds_simb[t,:] = deltaSigma
        rb[t] = rs
        fig_fff1(rp,ds_simb,t)
    plt.title('Blue')
    #plt.legend(m[:],bbox_to_anchor=(1,1))   
    plt.legend(mb[:])   
    #plt.savefig('Fit-blue.png',dpi=600)
    #plt.savefig('compare_2_bl.png',dpi=600)
    plt.show()
    yy = np.shape(ds_simb)
    #print('rr=',rr)#输出查看ds_sim的维度,即模型预测下的透镜信号    
    #比较观测的sigma和预测的Sigma,比较结果用fitr和fitb记录比较结果
    delta_b = np.zeros(N,dtype=np.float)
    for t in range(0,N):
        d_b = 0
        for n in range(0,yy[1]):
            d_b = d_b+((ds_simb[t,n]-dssa[1,n])/ds_errsa[1,n])**2
        delta_b[t] = d_b
    #print(delta_r)
    #下面这段求每个质量级对应的方差最小值
    deltab = delta_b.tolist()
    xb = deltab.index(min(deltab))
    bestfmb = mb[xb]
    #bestfmb = m[xb]
    best_mb = bestfmb+np.log10(h)
    #作图对比最佳情况
    '''
    plt.figure()
    k = xb
    fig_fff1(rp,ds_simb,k)
    plt.title('Blue')
    #plt.savefig('fit_r.png',dpi=600)
    plt.show()
    '''
    print('x^2=',min(deltab))
    print('co_mb=',best_mb)
    print('mb=',bestfmb)
    print('positionr=',xb)
    return rp,best_mb,delta_b,bestfmb