41、快速线性求解器:原理、选择与实践

快速线性求解器:原理、选择与实践

1. 回代求解系数

在求解线性方程组时,常常需要进行回代操作以获得系数。以下是一段实现回代过程的代码:

z.Initialize(0.0);
if(i>=(m-1)){
    nr = m;
    z(nr-1) = y(nr-1)/H(nr-1,nr-1);
}
for(k=nr-2;k>=0;k--){
    z(k) = y(k);
    for(ll=k+1;ll<nr;ll++)
        z(k) -= H(k,ll)*z(ll);
    z(k) = z(k)/H(k,k);
}

这段代码的主要作用是通过回代的方式,从已知的向量 y 和矩阵 H 中计算出向量 z 的各个元素。具体步骤如下:
1. 初始化向量 z 的所有元素为 0.0。
2. 如果 i 大于等于 m - 1 ,则将 nr 设为 m ,并计算 z 的最后一个元素。
3. 从 nr - 2 开始,逆向遍历到 0,对于每个 k ,先将 z(k) 初始化为 y(k) ,然后减去 H(k, ll) * z(ll) 的累加和,最后将结果除以 H(k, k) 。

2. Krylov 空间基向量的线性组合

计算出系数向量 z 后,需要进行 Krylov 空间基向量的线性组合,以得到最终的解向量 x 。代码如下:

for(i=0;i<nr;i++){
    V.GetColumn(i,r);
    x = x + z(i)*r;
}

这段代码的步骤如下:
1. 遍历从 0 到 nr - 1 的每个索引 i 。
2. 从矩阵 V 中获取第 i 列向量,存储在向量 r 中。
3. 将向量 r 乘以系数 z(i) ,并累加到向量 x 上。

3. 残差判断与更新

在得到解向量 x 后,需要判断残差是否满足要求,如果不满足则更新残差向量。代码如下:

if(rho<tol)
    break;
r = b - A*x;

步骤如下:
1. 检查残差 rho 是否小于容差 tol ,如果是,则跳出循环。
2. 计算新的残差向量 r ,即 b - A * x 。

4. 注意事项

在使用上述方法时,有两个重要的注意事项:
- 存储问题 :该函数需要存储矩阵 H 和 V ,它们的大小可能与原始矩阵 A 相同。这是引入重启参数的主要动机之一,以便使用更小的 Krylov 空间,从而减少存储需求。
- Givens 矩阵的处理 :可以利用矩阵的结构,避免显式地存储旋转矩阵,而是通过循环遍历适当的位置进行更新。

5. 预条件 GMRES

当矩阵 A 条件数不佳时,GMRES 方法通常会收敛缓慢,此时需要使用预条件器。这里使用不完全 LU(ILU)作为预条件器,具体形式为 M = LU ,其中 L 和 U 是对应于矩阵 A 的下三角和上三角矩阵,但在 aij = 0 的位置不进行填充。

预条件器不应显式构造,而应融入 Arnoldi 迭代过程。需要在修改后的 Arnoldi 迭代算法中插入以下代码:

...
My = v j
w = Ay
for i = 1, . . . , j
    hij = (w, vi)
    w = w − hijvi
...

GMRES 使用长向量来实现正交性,与对称系统的三项递推公式不同。对于非对称系统,也可以使用三项递推公式,如双共轭梯度(BiCG)方法,它使用两个相互正交的向量序列。BiCG 的更稳定版本是准最小残差(QMR)方法,它可以避免可能的崩溃,并且收敛速度与 GMRES 相当。

6. 并行 GMRES

尝试并行化串行的 GMRES 算法时,一个直接的问题是并行化修改后的 Arnoldi 组件。暴力实现的可扩展性很差。可以采用以下两种方法来提高效率和并行性:
- 块操作 :首先生成 Krylov 空间的基向量 v1, Av1, ..., Akv1 ,然后对整个集合进行正交化。与标准 GMRES 方法中每个新向量立即与所有先前向量正交化不同,这种方法显著提高了数据局部性。
- 使用 BLAS2 例程 :在 GMRES 中尽可能使用 BLAS2 例程,而不是效率最低的 BLAS1 例程。一种算法是用标准 Gram - Schmidt 方法替换修改后的 Gram - Schmidt 方法,并应用两次。双重正交化已被证明可以减少经典 Gram - Schmidt 方法的数值不稳定性,并且可以并行计算所有点积。

7. 求解器的选择

选择合适的求解器和预条件器是一个复杂的问题,需要考虑多个因素:
- 矩阵性质 :包括矩阵是否对称、是否正定、 A 和 AT 是否可用、矩阵是否稀疏、矩阵是否病态以及是否存在好的预条件器。
- 计算要求和资源 :如并行或串行计算、向量或标量处理器、多线程、缓存数据的重用、间接寻址和内存大小。

以下是一些迭代求解器的主要操作和存储需求的表格:
| 方法 | ddot | daxpy | dgemv | 存储 |
| ---- | ---- | ---- | ---- | ---- |
| Jacobi | 1 | 3n | | |
| SOR | 1 | 1 | | 2n |
| CGM | 2 | 3 | 1 | 6n |
| GMRES | j + 1 | j + 1 | 1 | (j + 5)n |
| QMR | 2 | 12 | 2 | 16n |

对于涉及微分方程的问题,所处理的微分方程类型和选择的离散化方法决定了要求解的线性系统。例如,对于 Poisson 和 Helmholtz 方程,会得到对称系统。以下是不同直接和迭代求解器在求解 Poisson 方程时的计算工作量和存储需求的表格:
| 方法 | 直接/迭代 | 工作量 | 存储 |
| ---- | ---- | ---- | ---- |
| 多重网格 | I | n | n |
| SSOR/Chebyshev | I | n5/4 | n |
| SOR | I | n3/2 | n |
| CGM | I | n3/2 | n |
| Gauss - Seidel | I | n2 | n |
| Jacobi | I | n2 | n |
| 高斯消元/稀疏 | D | n3/2 | n · log n |
| 高斯消元/稠密 | D | n3 | n2 |

对于大型问题,由于内存考虑,通常建议使用迭代求解器。以下是一个可能的决策树:

graph TD;
    A{矩阵 A 是否对称?} -->|是| B{矩阵 A 是否正定?};
    A -->|否| C{AT 是否可用?};
    B -->|是| D[预条件共轭梯度法];
    B -->|否| E[尝试 CGNR];
    C -->|是| F[GMRES 或 GMRES(k)];
    C -->|否| G[QMR 算法];
8. 可用的软件

基本的算法相对容易编程,但更复杂的版本,如预条件、重启、正交化和并行实现等,可以在免费软件 www.netlib.org 中找到。
- 直接求解器 :是 ScaLAPACK 和 LAPACK++ 的一部分。例如, SGETRF 例程基于 BLAS3 例程执行带主元的 LU 分解,非常高效; SPOTRF 和 SPOTRS 例程分别对对称正定矩阵进行 Cholesky 分解和求解线性系统。
- 迭代求解器 :是 Templates 包的一部分。例如, cg.h 和 cheby.h 例程分别实现了对称正定系统的共轭梯度法和预条件 Chebyshev 方法; cgs.h 、 gmres.h 、 qmr.h 和 bicg.h 适用于非对称系统。

9. 作业问题

为了更好地理解和掌握上述内容,以下是一些作业问题:
1. 求矩阵 A = [[0.001, 1], [1, 1]] 和 B = [[7, 6.990], [4, 4]] 的条件数。
2. 设 A = L DLT 是对称正定矩阵, D = diag (dii) ,证明 κ2(A) ≥ max(dii) / min(dii) 。
3. 对于矩阵 [[1, ϵ], [ϵ, 1]] ,当 ϵ 取何值时矩阵病态?单精度或双精度计算会对结果产生什么影响?
4. 假设矩阵 A 是严格对角占优的,证明对 A 应用带部分主元的 LU 分解过程时,不会发生行交换。
5. 估计几乎三角矩阵(Hessenberg 矩阵)的 LU 分解和回代求解的运算次数。
6. 考虑矩阵 A 以 2×2 块形式表示,证明 Schur 补 S ≡ A22 - A21A−111 A12 在无主元高斯消元 m 步后会覆盖矩阵 A22 。
7. 手动计算一个 3×3 矩阵( ri = i + j - 1 )的 Hager 算法,并计算其在 L1 范数下的精确条件数,比较两个值。
8. 对 Hilbert 矩阵( hij = 1 / (i + j - 2) ),当 n = 4, 16, 32 时,应用 Hager 算法估计条件数,观察结果。
9. 修改并行 LU 程序以实现行主元。
10. 以并行 LU 程序为指导,实现一个 MPI 程序来完成 Cholesky 分解。
11. 对三对角矩阵 (-1, 4, -1) 应用不完全 Cholesky 分解,并与标准 Cholesky 分解结果进行比较,判断结论是否适用于任何带状矩阵。
12. 修改循环约简代码,使存储三对角矩阵 A 只使用必要的内存。
13. 手动使用循环约简方法求解系统 {-2x1 + x2 = F1, x1 - 2x2 + 2x3 = F2, ..., x6 - 2x7 = F7} ,确定系统终止的级别和方程,判断是否有足够信息获得解,如有则进行回代求解。
14. 使用 Householder 变换证明,如果 He 是 Hessenberg 矩阵且 He = Q R ,则矩阵 H∗e = RQ 也是 Hessenberg 矩阵。
15. 求解超定系统 Ax = b ( A 为 m×n 矩阵)的浮点运算次数选择:
- (a) 正规方程为 mn2/2 + n3/6 ,Householder QR 方法为 mn2/2 - n3/6 。
- (b) 与 (a) 相反。
- (c) 以上都不是。
16. 使用 Householder 方法对 n×n 矩阵进行带列主元的 QR 分解的浮点运算次数选择:
- (a) 5/3n3 。
- (b) 5/4n3 。
- (c) 4/5n2 。
17. Cholesky 分解的加法和乘法次数大约是 LU 分解的一半,判断对错。
18. QR 方法是否总是、有时或从不保留矩阵的带宽,选择正确答案。
19. 矩阵 A 的 QR 分解是否总是唯一、当 A 非奇异时唯一或不唯一,选择正确答案。
20. 在并行机器上分配矩阵最有效的方式是按行、按列还是取决于要解决的问题,选择正确答案。
21. 定义 h = 1 / N , µ = h2 , q[i][j] = (8π2 + 1)h2sin(2πhi)sin(2πhj) ,使用以下方法求解矩阵系统 Au = q :
- (a) 串行 Jacobi 方法。
- (b) 并行 Jacobi 方法。
- (c) 串行共轭梯度法。
- (d) 串行预条件共轭梯度法(使用不完全 Cholesky 预条件)。
- (e) 并行共轭梯度法。
- (f) 并行预条件共轭梯度法(使用不完全 Cholesky 预条件)。
分别对 N = 4 和 N = 20 进行求解,对于串行算法,绘制解 u[i][j] 的图形;对于并行算法,展示不同处理器数量下的并行加速比。
22. 使用二阶有限差分离散化,在三维网格 N×N×N 上求解 Poisson 方程,采用以下串行算法:
- (a) 共轭梯度法。
- (b) 带不完全 Cholesky 预条件的共轭梯度法。
- (c) 带 Chebyshev 加速的 SSOR 方法。
- (d) Jacobi 方法。
估计计算工作量的阶数 O(nα) ,并通过求解 n = N3 = 643 验证估计结果。
23. 根据文本中的 QR 分解示例,从找到的 w 值计算矩阵 Q ,并证明 A = QR 。
24. 修改文本中的 QR 例程,使其计算矩阵 Q 的值。
25. 编写一个串行函数,使用 Givens 旋转对三对角矩阵进行 QR 分解,函数应接受矩阵 A 作为输入,矩阵 Q 和 R 作为输出。
26. 创建一个函数,使用前面编写的 QR 代码求解三对角矩阵系统 Ax = b ,并说明如何利用 Q 和 R 的性质高效求解。
27. 编写一个并行程序,使用 Givens 旋转对三对角矩阵进行 QR 分解,按行将矩阵 A 分配到各个处理器上,确保每个处理器拥有与 A 对应行的 Q 和 R 行。
28. 考虑五个对称 Toeplitz 矩阵 A ( a(1)k = 1/k , a(2)k = 1/√k , a(3)k = 1/k2 , a(4)k = k , a(5)k = cos k/k )和任意非零向量 b ,使用 PCGM 方法,采用循环预条件器求解系统 Ax = b ,并尝试不同类型的预条件器,比较无 CG 预条件时的迭代次数。
29. 估计固定 k 时 GMRES(k) 的运算次数,并与 GMRES 进行比较,假设矩阵 A 的阶数 n 很大,判断 GMRES(k) 是否对任何 k 值都收敛。
30. 对于文本中的 GMRES 示例问题,尝试使用 GMRES(2),添加输出语句报告残差,尝试不同的初始猜测 x0 ,绘制每种情况下残差与迭代次数的关系图,判断收敛速度是否相同。
31. 考虑线性对流 - 扩散方程 ∂u/∂t + ∂u/∂x = ν ∂2u/∂x2 ,在 x ∈ [0, 10] 和 t ∈ [0, 5] 区域内,采用二阶迎风格式处理对流项,中心有限差分格式处理扩散项(时间上采用 Crank - Nicolson 方法)进行离散化,使用 GMRES(k) 求解得到的系统,尝试不同的 k 值以最小化求解时间,使用 n = 128 个点进行离散化,判断最优 k 值是否依赖于时间步长 Δt ,以及该方法是否无条件稳定。

快速线性求解器:原理、选择与实践

10. 问题分析与解答示例

下面针对部分作业问题进行详细分析与解答,帮助大家更好地理解相关概念和方法。

10.1 矩阵条件数的计算

对于矩阵 (A = \begin{bmatrix}0.001 & 1\1 & 1\end{bmatrix}) 和 (B = \begin{bmatrix}7 & 6.990\4 & 4\end{bmatrix}),矩阵的条件数可以通过计算矩阵的最大奇异值与最小奇异值的比值来得到。在实际计算中,可以使用数值计算库(如 Python 的 numpy 库)来完成。以下是 Python 代码示例:

import numpy as np

A = np.array([[0.001, 1], [1, 1]])
B = np.array([[7, 6.990], [4, 4]])

cond_A = np.linalg.cond(A)
cond_B = np.linalg.cond(B)

print(f"矩阵 A 的条件数: {cond_A}")
print(f"矩阵 B 的条件数: {cond_B}")

通过上述代码,可以方便地计算出矩阵 (A) 和 (B) 的条件数。

10.2 对称正定矩阵条件数的证明

设 (A = L D L^T) 是对称正定矩阵,(D = diag (d_{ii}))。根据条件数的定义,(\kappa_2(A) = \frac{\lambda_{max}(A)}{\lambda_{min}(A)}),其中 (\lambda_{max}(A)) 和 (\lambda_{min}(A)) 分别是矩阵 (A) 的最大和最小特征值。

由于 (A) 是对称正定矩阵,其特征值都是正的。又因为 (A = L D L^T),可以证明 (\lambda_{max}(A) \geq \max(d_{ii})) 且 (\lambda_{min}(A) \leq \min(d_{ii})),所以 (\kappa_2(A) \geq \frac{\max(d_{ii})}{\min(d_{ii})})。

10.3 矩阵病态性的判断

对于矩阵 (C = \begin{bmatrix}1 & \epsilon\\epsilon & 1\end{bmatrix}),其条件数为 (\kappa_2(C) = \frac{1 + |\epsilon|}{1 - |\epsilon|})。当 (\epsilon) 接近 (\pm1) 时,条件数会变得很大,矩阵就会变得病态。

在单精度或双精度计算中,由于浮点数的精度限制,当矩阵病态时,计算结果的误差会显著增大。双精度计算的精度更高,相对来说能在一定程度上减少误差,但对于病态矩阵,仍然可能会出现较大的误差。

11. 不同求解方法的比较与应用

在实际应用中,需要根据具体问题的特点选择合适的求解方法。以下是几种常见求解方法的比较:

方法 适用矩阵类型 收敛速度 存储需求 并行性
Jacobi 对角占优矩阵 较慢 较小 较好
SOR 对角占优矩阵 比 Jacobi 快 较小 较好
CGM 对称正定矩阵 较快 适中 较好
GMRES 非对称矩阵 适中 较大 较难并行化
QMR 非对称矩阵 较快 较大 较难并行化

对于不同类型的问题,可以参考上述表格选择合适的求解方法。例如,对于对称正定矩阵的问题,CGM 是一个不错的选择;对于非对称矩阵的问题,可以考虑 GMRES 或 QMR 方法。

12. 并行计算的优化策略

在并行计算中,为了提高计算效率,需要采用一些优化策略。以下是一些常见的优化策略:

  • 数据划分 :根据问题的特点,合理地划分矩阵和向量,使得每个处理器能够独立地进行计算。常见的数据划分方式有按行划分、按列划分和分块划分。
  • 通信优化 :减少处理器之间的通信量,避免频繁的数据传输。可以采用局部计算和全局同步的方式,减少通信开销。
  • 算法选择 :选择适合并行计算的算法,如并行 GMRES 中采用的块操作和使用 BLAS2 例程的方法。
13. 总结

快速线性求解器在科学计算和工程应用中具有重要的作用。通过选择合适的求解器和预条件器,可以显著提高计算效率和精度。在实际应用中,需要综合考虑矩阵的性质、计算要求和资源等因素,选择最适合的求解方法。

同时,并行计算是提高计算效率的重要手段,但并行化过程中也会遇到一些挑战,如数据通信和负载均衡等问题。需要采用合适的优化策略,提高并行计算的性能。

通过完成作业问题,可以加深对快速线性求解器的理解和掌握,提高解决实际问题的能力。希望大家在学习和实践中不断探索,更好地应用这些方法解决各种问题。

graph LR;
    A[问题分析] --> B[选择求解方法];
    B --> C[串行或并行计算];
    C --> D[结果验证与优化];
    D --> E[应用到实际问题];

以上流程图展示了使用快速线性求解器解决问题的一般流程,从问题分析开始,选择合适的求解方法,进行计算,然后验证和优化结果,最后将结果应用到实际问题中。这个流程可以帮助大家系统地解决各种线性方程组问题。

相关推荐

整数规划实战:从线性规划松弛到分枝定界法详解

整数规划是运筹学中处理离散决策问题的核心方法,广泛应用于资源分配、排班调度和路径规划等场景。其基本原理是在线性规划的基础上,对决策变量施加整数约束,从而解决实际中无法分割的决策问题。与连续优化相比,整数规划的解空间是离散且非凸的,导致求解难度呈指数级增长。分枝定界法作为其主流求解算法,通过系统性的搜索与剪枝思想,在保证最优性的同时大幅提升计算效率。该算法首先求解线性规划松弛问题以获得初始界限,然后通过选择分枝变量将问题分解为子问题,并利用界限比较进行剪枝,避免无效搜索。在工程实践中,结合Gurobi、CPL

weixin_33910385的博客 445

遗传算法第二部分:选择-交叉-变异的协同设计原理与工业实践

遗传算法(GA)作为经典启发式优化方法,其核心价值不在于模拟自然进化,而在于构建可控、鲁棒、可解释的演化过程。理解选择机制如何调控多样性、交叉算子如何适配问题结构、变异策略如何动态平衡探索与开发,是突破局部最优、实现工程落地的关键。本文聚焦GA三大算子的耦合逻辑与参数协同标定,结合TSP、车间调度、热管理等真实场景,解析轮盘赌陷阱、锦标赛k值设定、顺序交叉防错、自适应变异等关键技术点,强调编码语义建模、边界约束处理与噪声适应等工业级设计原则,为算法从教学Demo迈向产线部署提供可迁移的调试思维框架。

duiker 522

机器人运动学模型:从DH参数到IKFast求解的底层原理与工程实践

运动学模型是机器人理解自身结构、实现空间定位与路径规划的核心数学基础,涵盖正向运动学(FK)与逆向运动学(IK)两大核心能力。其本质是将机械臂的物理构型(如URDF描述)转化为可计算、可微分、实时响应的坐标系变换关系,直接决定MoveIt!等框架的规划成功率、实时性与稳定性。IKFast解析法凭借零迭代、确定性求解和微秒级响应,成为工业级六轴机械臂(如UR5、Franka)的性能基石;而DH参数作为连接设计图纸与运动学代码的‘数学翻译官’,其准确性直接影响FK精度与IK收敛性。本文深入解析Kinematic

weixin_33701294的博客 335

遗传算法实战进阶:选择策略、交叉算子与自适应变异设计

遗传算法是一种基于自然选择与遗传机制的全局优化方法,其核心在于模拟生物进化过程中的选择、交叉与变异操作。原理上,它不依赖目标函数可导性或连续性,通过种群迭代在复杂、高维、多峰解空间中平衡探索与开发。技术价值体现在对工业场景中‘不可导、不连续、计算昂贵’黑箱问题的强鲁棒性,显著优于传统梯度类方法。典型应用场景包括工艺参数寻优、拓扑配置、调度优化等产线级决策任务。本文聚焦选择策略(如线性排名替代轮盘赌)、交叉算子(如SBX处理连续变量)与变异率动态调控等关键工程细节,深入解析早熟收敛防控与收敛性分析等实战痛点。

weixin_30788239的博客 489

遗传算法工程实践:选择压力、交叉变异与自适应调参

遗传算法(GA)是一种模拟自然进化过程的全局优化方法,其核心在于选择、交叉与变异三大操作的协同机制。理解选择压力如何影响收敛与多样性、区分单点交叉与均匀交叉对模式保留的能力、掌握变异率动态衰减对防早熟的关键作用,是将GA从理论推向工业落地的基础。在调度优化、参数寻优、结构设计等黑箱强约束问题中,GA的价值不在于数学最优性证明,而在于鲁棒性、可解释性与工程可调性。本文聚焦真实场景下的参数配置逻辑、编码适配原则与故障诊断路径,提供一套面向实践者的GA调试框架。

weixin_30387799的博客 416

C++实现非线性方程求解:二分法、迭代法、牛顿法与弦截法详解

非线性方程求解是数值计算领域的核心基础,其目标是在无法获得解析解时,通过迭代算法逼近方程的根。其基本原理是利用函数的局部性质(如连续性、可导性)构造迭代序列,逐步缩小解的搜索范围。掌握这些算法对于理解更复杂的数值优化、机器学习和科学计算问题至关重要。在工程实践中,不同的算法在收敛速度、稳定性以及对函数性质的要求上各有优劣。例如,二分法基于介值定理,虽然收敛速度较慢,但稳定性最高;而牛顿法利用局部导数信息,具有平方收敛速度,但对初始值敏感。本文将以C++工程实践为例,深入探讨二分法、简单迭代法、牛顿法和弦截法

weixin_30664615的博客 419

机器人中的数值优化(二十一)—— 伴随灵敏度分析、线性方程组求解器的分类和特点、优化软件

本系列文章主要是我在学习《数值优化》过程中的一些笔记和相关思考,主要的学习资料是深蓝学院的课程《机器人中的数值优化》和高立编著的《数值最优化方法》等,本系列文章篇数较多,不定期更新,上半部分介绍无约束优化,下半部分介绍带约束的优化,中间会穿插一些路径规划方面的应用实例

慕羽★的博客 4205

结构力学仿真软件:ADINA:动力学分析与地震响应技术教程_2024-08-10_18-47-41.Tex

在模型树中选择“材料”节点。- 点击工具栏的“添加”按钮,定义材料属性,如弹性模量、泊松比等。

800

线性规划求解器 lp_solve

线性规划求解器 lp_solve,免费版式本,不受变量限,计算速度一般.

智能车八邻域图像算法

智能车八邻域图像算法

技术缝合怪的博客 4万+

zynq+ad9361 petalinux使用官方IIO示波器调试记录

1ad9361 iio示波器

Yetob的博客 7991

高分7(GF7)卫星数据制作平原地区DSM/DEM(三)——可信度分割

李国春(接上)

副组长的博客 1713

【UOJ170】Picks loves segment tree VIII

【题目链接】 点击打开链接 【前置阅读】 【BZOJ4695】最假女选手 【BZOJ3064】【TYVJ1518】CPU监控【UOJ169】【UR #11】元旦老人与数列 【思路要点】 前置阅读中的前两题中,我们分别对线段树的区间取最大/最小值和线段树的历史最大/最小值进行了研究。本题中,两类问题同时出现,因此我们

cz_xuyixuan的博客 1243

EDA虚拟机分享2020版本(Synopsys2020)

EDA虚拟机分享

亦安的数字小站 9175

配电网可靠性评估(一)—最小路法和非序贯蒙特卡洛模拟法的matlab实现

电力系统的可靠性研究是相关领域的热点问题。根据研究对象的不同,又可分为发电系统的可靠性,输电系统的可靠性和配电系统的可靠性。配电网在电力系统中处于最末端的位置,直接和用户相连,一旦出现故障情况,就会在用户侧表现为停电事故。因此对配电网的可靠性评估有着重大意义。......

配电网和matlab的博客 1万+

在 ABAP 平台配置 OAuth 2.0 Client(OA2C_CONFIG):一份可落地的全景实践

本文详细介绍了在ABAP平台中配置OAuth 2.0客户端的完整流程。重点讲解了四种授权类型(Client Credentials、Authorization Code、SAML 2.0 Bearer Assertion、Resource Owner Password Credentials)的适用场景和配置要点,以及客户端认证的三种方式(Client Secret、Client Certificate、mTLS)。文章提供了操作步骤、排错建议和工程实践指导,包括端点配置、回调地址管理、scopes设置等关

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 354

Unreal5从入门到精通之一文搞懂Unreal的C++代码编译之谜

我们在开发Unreal项目时,如果时蓝图模板的项目,一般问题不大,因为当你修改完蓝图,点击编译Compile+保存Save,就可以继续开发了。这对于开发者来说也非常友好。但是,如果你使用的C++模板开发项目,代码编译一切都变得魔幻起来,IDE(VS/Rider)里面有编译,编辑器里面也有编译,有什么区别呢?我们来列举几个新手常碰到的问题。1.代码我明明新建了,编辑器里怎么看不到?2.昨天我新家的功能运行的好好的,今天怎么感觉还是老逻辑。或者昨天加的新代码,新蓝图不见了。

TxNet 1601

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

上一篇: 35、SQL查询与脚本编写实战解析
下一篇: 36、Oracle SQL 实践:对象关系特性与表操作
生活碎片
博客等级 码龄2年 51粉丝 1780原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值