参数随机场,随机参数生成python代码,基于乔列斯基分解中点法分解

本人用python较多,但是matlib使用很少,没装在这个软件,故采用python语言重现编写,里面没有真实的单元坐标,只能假设三个单元进行测试,如存在错误请及时和我联系,平附上对应matlib代码共供参考。
话不多说,直接上代码

'''#假设均值、变异系数、相关距离'''
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
参数随机场,随机参数生成python代码,基于乔列斯基分解中点法分解_第1张图片
参数随机场,随机参数生成python代码,基于乔列斯基分解中点法分解_第2张图片
参数随机场,随机参数生成python代码,基于乔列斯基分解中点法分解_第3张图片

感谢大家参考,请大家多多指教,最近会针对边坡的土体随机场进行代码的研究及公开,资源共享。

你可能感兴趣的:(随机场,python,numpy,机器学习)