Domain Decomposition计算公式备忘

本文介绍Domain Decomposition方法的并行计算流程与核心计算公式。该方法通过将问题分解到不同子域中,利用并行计算提高效率。文中详细介绍了如何进行并行分解、并行求解关键矩阵运算,并更新H矩阵。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Domain Decompostion 计算公式

示意图

在这里插入图片描述

推导

  • 基本公式: { s = S − 1 F s − S − 1 W R h h = ( H − W L S − 1 W R ) − 1 ( F h − W L S − 1 F s ) \begin{cases} s=\bold{S}^{-1}F_s-\bold{S}^{-1}\bold{W}_Rh \\ h=(\bold{H}-\bold{W}_L\bold{S}^{-1}\bold{W}_R)^{-1}(F_h-\bold{W}_L\bold{S}^{-1}F_s) \end{cases} {s=S1FsS1WRhh=(HWLS1WR)1(FhWLS1Fs)对正定对称阵有 S = L L t \bold{S}=\bold{L}\bold{L}^t S=LLt, W L = W R t \bold{W}_L=\bold{W}_R^t WL=WRt, 因而上面公式可化为:
    { s = L − t ( L − 1 F s − L − 1 W R h ) h = ( H − ( L − 1 W R ) t ( L − 1 W R ) ) − 1 ( F h − ( L − 1 W R ) t ( L − 1 F s ) ) \begin{cases} s=\bold{L}^{-t}(\bold{L}^{-1}F_s-\bold{L}^{-1}\bold{W}_Rh)\\ h=(\bold{H}-(\bold{L^{-1}W}_R)^{t}(\bold{L^{-1}W}_R))^{-1}(F_h-(\bold{L^{-1}W}_R)^{t}(\bold{L}^{-1}F_s)) \end{cases} {s=Lt(L1FsL1WRh)h=(H(L1WR)t(L1WR))1(Fh(L1WR)t(L1Fs))所以仅需要计算 L − 1 W R \bold{L^{-1}W}_R L1WR L − 1 F s \bold{L}^{-1}F_s L1Fs

计算步骤

  • 并行分解 S = L L t \bold{S}=\bold{L}\bold{L}^t S=LLt
  • 并行求解 L − 1 F s \bold{L}^{-1}F_s L1Fs
  • 并行求解 L − 1 W R \bold{L^{-1}W}_R L1WR, 同时更新 H \bold{H} H矩阵。此处注意 W R \bold{W}_R WR的非零稀疏性,可以利用加速计算。更新 H \bold{H} H矩阵需要考虑多个线程对 H \bold{H} H相同块的更新,需要锁和同步机制
  • 更新后的 H \bold{H} H也是对称正定块状三对角阵,可以用块状分解计算LLT
  • 先计算 h h h,之后计算 s s s
### Kernel PCA 方差计算 在Kernel PCA中,方差的计算方式与标准PCA有所不同。由于Kernel PCA通过核函数映射数据到高维空间,在这个过程中并不显式执行特征值分解来获取协方差矩阵的特征向量和特征值。因此,直接应用传统PCA中的方差解释比例方法变得不可行。 然而,为了评估每个主成分的重要性,仍然可以利用重构误差作为衡量指标之一。对于给定的数据点\( \mathbf{x}_i \),其经过Kernel PCA变换后的低维表示为\( \mathbf{z}_i \),再由该低维表示重建回原始输入空间得到近似值\( \hat{\mathbf{x}}_i \)[^3]。此时,可以通过比较原数据与其重建版本之间的差异来间接反映各主成分所携带的信息量: \[ \text{Reconstruction Error} = ||\mathbf{x}_i - \hat{\mathbf{x}}_i||^2 \] 尽管如此,当提到具体如何量化各个主成分对方差的贡献度时,通常还是依赖于`explained_variance_ratio_`属性提供的信息。这表明即使是在Kernel PCA的情况下,也可以获得类似于线性PCA中方差解释比率的结果[^2]。 值得注意的是,实际操作层面,scikit-learn库并没有直接提供针对Kernel PCA的方差解释率接口。这是因为内核技巧使得我们无法像在线性情况下那样简单地访问这些统计特性。不过,用户依然能够基于模型对象调用`.eigenvalues_`(如果可用的话),并通过它们手动推导出相应的方差占比。 ```python import numpy as np from sklearn.decomposition import KernelPCA # 假设df_z_components已经定义好并标准化处理过 kernel_pca = KernelPCA(n_components=5, fit_inverse_transform=True).fit(df_z_components) # 获取特征值 eigenvalues = kernel_pca.eigenvalues_ # 计算总方差以及单个主成分对应的方差百分比 total_variance = sum(eigenvalues) variance_ratios = eigenvalues / total_variance * 100 print(f"Individual Component Variance Ratios (%): {np.round(variance_ratios, decimals=2)}") ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值