Campo aleatorio de parámetros, código Python de generación de parámetros aleatorios, basado en la descomposición del método de punto medio de descomposición de Cholesky

Uso mucho python, pero rara vez se usa matlib, por lo que no está instalado en este software, así que uso el lenguaje python para reproducir y escribir, no hay coordenadas de unidades reales en él, solo puedo asumir tres unidades para la prueba, si hay algún error, contácteme a tiempo, adjunte el código matlib correspondiente como referencia.
No hay mucho que decir, solo ve al código

'''#假设均值、变异系数、相关距离'''
mu=np.array([20,24])
cov=np.array([0.3,0.2])
dh=np.array([40,40])
dv=np.array([1,4])
'''    end   '''
#考虑自相关函数影响的边坡可靠度分析,李典庆
sigma=mu*cov
print(sigma)
# % rxy=0;
# % rou=[1 rxy
# %  rxy 1];
'''生成对角矩阵'''
co_1_norm=0
co_mat1=[[1,co_1_norm],[co_1_norm,1]]	#生成相关系数矩阵
'''乔布斯及分解'''
L1=np.linalg.cholesky(co_mat1)
print(L1)
'''假设Coord'''
# Coord=xlsread('Coord.xls',1);
Coord=np.array([[1,1], [1,2], [1,3]])
# print(np.array(Coord).shape)
mLem=np.max(Coord.shape)#单元数量
# print(mLem)
pxy=np.zeros((mLem,mLem))
# print(pxy)
PXY=[]
for k in range(len(mu)):
    # print(k)
    for i in range(mLem):
        for j in range(mLem):
            dx = np.abs(Coord[i,0] - Coord[j,0])#单元之间的距离
            dy = np.abs(Coord[i,1] - Coord[j,1])#
            # print(dx,dy)
            '''选择自相关系数'''
            case=2
            if case == 1:
                # 1 % 指数型自相关函数(SNX)
                pxy[i,j] = np.exp(-2 * (dx / dh[k] + dy / dv[k]))
            elif case==2:
                # 2 % 高斯型自相关函数(SQX)
                pxy[i,j] = np.exp(-np.pi * ((dx / dh[k]) ** 2 + (dy / dv[k]) ** 2))
            elif case==3:
                # 3 % 二阶自回归型自相关函数(CSX)
                pxy[i,j] = np.exp(-4 * (dx / dh[k] + dy / dv[k])) * (1 + 4 * dx / dh[k]) * (1 + 4 * dy / dv[k])
            elif case==4:
                4 % 指数余弦型自相关函数(SMK)
                pxy[i,j] = np.exp(-(dx / dh[k] + dy / dv[k])) * cos(dx / dh[k]) * cos(dy / dv[k])
            elif case==5:
                # 5 % 三角型自相关函数(BIN)
                if dx < dh[k] and dy < dv[k]:
                    pxy[i,j] = (1 - dx / dh[k]) * (1 - dy / dv[k])
                else:
                    pxy[i,j] = 0
    PXY.append(pxy)
PXY=np.array(PXY)
# print(PXY.shape)
L2=PXY
# print(L2)
for k in range(len(mu)):
    L2[k,:,:]=np.linalg.cholesky(PXY[k,:,:]).T
    print( L2[k,:,:])
# randn('state',0)
# rand('state',0)
Nsim=1000#生成多少个样本
snum=len(mu)*mLem#每个样本的列数
lhd = lhs(snum, samples=Nsim)
#
# print(np.eye(len(mu)*mLem))
# print(np.eye(len(mu)*mLem))
# print(np.zeros((len(mu)*mLem,1)))
UU = norm(np.zeros((len(mu)*mLem)),np.ones(len(mu)*mLem)).ppf(lhd).T  # this applies to both factors here
print(lhd.shape)
# Nsim=10
# UU=lhsnorm(zeros(len(nu)*mlem,1),np.eye(len(nu)*mlem), Nsim).T#这里T是转置
sLn=np.sqrt(np.log(1+(sigma/mu)**2)) #标准差
mLn=np.log(mu)-sLn**2/2  #均值
print('sln,mln',sLn,mLn)
c=np.zeros((mLem,Nsim))
phi=np.zeros((mLem,Nsim))
for imod in range(Nsim):
    U=np.array([UU[0:mLem,imod], UU[mLem:2*mLem,imod]])

    U_=np.dot(U.T,L1)
    print(U_)
    H0 = np.array([np.dot(L2[0, :, :], U_[:, 0]),np.dot(L2[1, :, :], U_[:, 1])])
    print(H0,H0.shape)#2x3
    # print(sLn[0] * H0[1, :])

    c[:, imod]=np.exp(mLn[0] + sLn[0] * H0[0, :])
    phi[:, imod]=np.exp(mLn[1] + sLn[1] * H0[1, :])

# print('c,phi',np.mean(c),np.std(c))

matlib
inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí

Gracias por su referencia. Por favor, dame tu consejo. Recientemente, investigaré y divulgaré el código para el campo aleatorio del suelo de la pendiente y compartiré recursos.

Supongo que te gusta

Origin blog.csdn.net/self_Name_/article/details/127433113
Recomendado
Clasificación