Cholesky 분해 중간점 방법 분해를 기반으로 하는 매개변수 임의 필드, 임의 매개변수 생성 파이썬 코드

저는 파이썬을 많이 사용하지만 matlib는 거의 사용하지 않아서 이 소프트웨어에는 설치되어 있지 않아서 파이썬 언어를 사용하여 재현하고 씁니다. 그 안에 실제 단위 좌표가 없습니다. 오류가 있으면 제 시간에 저에게 연락하십시오. 참조를 위해 해당 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))

매트립
여기에 이미지 설명 삽입
여기에 이미지 설명 삽입
여기에 이미지 설명 삽입

참고 부탁드립니다 조언 부탁드립니다 최근에는 슬로프의 토양 랜덤 필드에 대한 코드를 연구하여 공개하고 리소스를 공유합니다.

추천

출처blog.csdn.net/self_Name_/article/details/127433113