---
title: KmlMgSolverApply
description: "进行求解回代。"
url: https://www.hikunpeng.com/document/detail/zh/hpchistory/hpckit/develop2400/kunpengaccel_kml_0909.html
sourcePath: /source/zh/hpchistory/hpckit/develop2400/kunpengaccel_kml_0909.html
indexId: 19c785d94432fbec15dd2bad8c990214de9590727b8527eee8aef7b01e169ce867
---
# KmlMgSolverApply

进行求解回代。

#### 接口定义

C Interface：

KmlMgStatus KmlMgSolverApply(KmlMgSolverH solver, KmlMgMatrixH B, KmlMgMatrixH X, KmlMgApplyOptions* options);


#### 参数

| 参数名 | 类型 | 描述 | 输入/输出 |
| --- | --- | --- | --- |
| solver | KmlMgSolverH | 由KmlMgSolverCreate创建的求解器句柄 | 输入/输出 |
| B | KmlMgMatrix | 由KmlMgMatrixCreate函数创建的矩阵句柄，表示右端向量 | 输入 |
| X | KmlMgMatrix | 由KmlMgMatrixCreate函数创建的矩阵句柄，表示解空间，初始输入值可作为初次迭代初值 | 输入/输出 |
| options | KmlMgApplyOptions& | 回代配置信息 | 输入 |


#### 返回值

| 返回值 | 类型 | 描述 |
| --- | --- | --- |
| KML\_MG\_OK | int | 正常执行 |
| KML\_MG\_ERR\_INVALID\_PARAM | int | 参数无效 |
| KML\_MG\_ERR\_UNSUPPORTED | int | 暂不支持的功能 |
| KML\_MG\_ERR\_NO\_MEMORY | int | 分配内存失败 |
| KML\_MG\_ERR\_EXCEEDS\_LIMIT | int | 超过设置限制 |
| KML\_MG\_ERR\_INCOMPATIBLE | int | 版本不兼容 |
| KML\_MG\_ERR\_NO\_REQUIRED\_FIELD | int | 没设置必填字段 |
| KML\_MG\_ERR\_UNKNOWN\_TYPE | int | 未知的类型 |
| KML\_MG\_ERR\_THIRD\_PART | int | 内部调用第三方错误 |
| KML\_MG\_ERR\_INCONSISTENT | int | 传递信息不一致 |
| KML\_MG\_ERR\_UNEXPECTED\_CALL\_ORDER | int | 预期之外的调用顺序 |
| KML\_MG\_ERR\_MATRIX\_VALUE\_IS\_NULL | int | 矩阵值为空 |
| KML\_MG\_ERR\_NO\_RESOURCE | int | 资源未就绪 |


#### 结构体说明

KmlMgApplyOptions

| 字段名 | 字段类型 | 字段说明 |
| --- | --- | --- |
| fieldMask | uint64\_t | 配置生效的字段掩码。非0的位代表配置对应字段指定的值，0的位代表使用默认值，可配置的掩码位请参见具体字段的说明。 |
| useZeroGuess | bool | 是否以X=0为初值开始迭代，若为true则迭代初值为0，若为false则以参数X传入时的值为初值。 掩码位：KML\_MG\_APPLY\_OPTIONS\_USE\_ZERO\_GUESS |
| toleranceType | KmlMgToleranceType | 迭代收敛的阈值类型，有如下值 KML\_MG\_TOLERANCE\_ABS KML\_MG\_TOLERANCE\_REL 掩码位：KML\_MG\_APPLY\_OPTIONS\_TOLERANCE\_TYPE |
| tolerance | double | 迭代收敛的阈值，小于该阈值则停止迭代 掩码位：KML\_MG\_APPLY\_OPTIONS\_TOLERANCE |
| maxIteration | int64\_t | 最大迭代次数，迭代次数达到阈值则停止迭代 掩码位：KML\_MG\_APPLY\_OPTIONS\_MAX\_ITERATION |
| restartStep | int64\_t | 重启步数，仅当KmlMgSolverOptions.ksp为KML\_MG\_SOLVER\_GCR或KML\_MG\_SOLVER\_GMRES时生效。 掩码位：KML\_MG\_APPLY\_OPTIONS\_RESTART\_STEP |
| solveResi | bool | 是否转化成求解残差方程，精度优化选项。在给定初值X0时，若为true，则以将方程A\*X=B转化为A\*(X\-X0)=B\-A\*X0。当X0非常接近真实解时仅当KmlMgSolverOptions.ksp为KML\_MG\_SOLVER\_G 掩码位：KML\_MG\_APPLY\_OPTIONS\_SOLVE\_RESI |


#### 依赖

#include "mg.h"

示例代码请参见示例。
