---
title: KmlDssSolve
description: "对矩阵做回代求解，需先使用KmlDssFactorize进行分解。"
url: https://www.hikunpeng.com/document/detail/zh/kunpengboostkithistory/240RC1/accel/kunpengaccel_kml_16_0772.html
sourcePath: /source/zh/kunpengboostkithistory/240RC1/accel/kunpengaccel_kml_16_0772.html
indexId: 558f9c4201309754b5591a09e2e307e0f959ac0c35ebb4a7e596668d1a6c9eb876
---
# KmlDssSolve

对矩阵做回代求解，需先使用KmlDssFactorize进行分解。

#### 接口定义

C Interface：

int KmlDssSolve(KmlDssSolver *solver, const KmlSolverMatrix *b, KmlSolverMatrix *x, const KmlDssSolveOption *option);


#### 参数

| 参数名 | 类型 | 描述 | 输入/输出 |
| --- | --- | --- | --- |
| solver | KmlDssSolver \* | 由KmlDssInit创建的求解器句柄。 | 输入 |
| b | KmlSolverMatrix \* | 右端向量结构体指针，本质是矩阵，由KmlSolverMatrixCreate函数创建，不可为空指针。 | 输入 |
| x | KmlSolverMatrix \* | 解空间结构体指针，本质是矩阵，由KmlSolverMatrixCreate函数创建，输入不可为空指针，输出为包含求解出的x的数值数组。 | 输出 |
| option | KmlDssSolveOption \* | 分解阶段配置选项，不可为空指针，具体内容如表1所示。 | 输入 |


**表1 KmlDssSolveOption结构体字段描述**

| 字段名 | 类型 | 描述 |
| --- | --- | --- |
| fieldMask | uint64\_t | 配置生效的字段掩码。非0的位代表配置对应字段指定的值，0的位代表使用默认值，可配置的掩码位见具体字段的说明。 |
| stage | KmlDssSolveStage | 设置回代阶段，有如下值。 KMLDSS\_SOLVE\_ALL表示全阶段回代，包括迭代修正，默认选项。 KMLDSS\_SOLVE\_FORWARD表示只做前向回代。 KMLDSS\_SOLVE\_DIAGONAL表示只做对角块求解。 KMLDSS\_SOLVE\_BACKWARD表示只做后向回代。 KMLDSS\_SOLVE\_REFINE表示只做迭代修正。 掩码位：KMLDSS\_SOLVE\_OPTION\_SOLVE\_STAGE |
| refineMethod | KmlDssRefineMethod | 迭代修正方法，有如下值。 KMLDSS\_REFINE\_OFF表示关闭迭代修正，默认选项。 KMLDSS\_REFINE\_CLASSICAL表示常规迭代修正。 掩码位：KMLDSS\_SOLVE\_OPTION\_REFINE\_METHOD |
| refineMaxSteps | int32\_t | 最大迭代修正步数，有如下值。 等于0表示由求解器自动决定，默认数值。 大于0表示用户设置最大迭代修正步数。 掩码位：KMLDSS\_SOLVE\_OPTION\_REFINE\_MAX\_STEP |
| refineTolerance | double | 迭代修正残差阈值，该字段有如下值。 等于0表示由求解器自动决定，默认数值。 大于0表示用户设置迭代修正残差阈值。 掩码位：KMLDSS\_SOLVE\_OPTION\_REFINE\_TOLERANCE 迭代满足如下任一条件则立即结束迭代修正。 达到refineMaxSteps步数 其中，berr的计算方式为 |


#### 返回值

| 返回值 | 类型 | 描述 |
| --- | --- | --- |
| KMLSS\_NO\_ERROR | int | 正常执行。 |
| KMLSS\_INTERNAL\_ERROR | int | 内部错误。 |
| KMLSS\_NULL\_ARGUMENT | int | solver，b，x，option存在空参数。 |


#### 依赖

#include "kml_dss.h"
