EN
注册
我要评分
文档获取效率
文档正确性
内容完整性
文档易理解
在线提单
论坛求助

?trsm

三角矩阵方程求解,方程是以下一种形式:

,或

,或,或

alpha是乘法系数,X和B为m*n一般矩阵,A是三角矩阵。

接口定义

C interface:

void cblas_strsm(const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, const BLASINT M, const BLASINT N, const float alpha, const float *A, const BLASINT lda, float *B, const BLASINT ldb);

void cblas_dtrsm(const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, const BLASINT M, const BLASINT N, const double alpha, const double *A, const BLASINT lda, double *B, const BLASINT ldb);

void cblas_ctrsm(const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, const BLASINT M, const BLASINT N, const void *alpha, const void *A, const BLASINT lda, void *B, const BLASINT ldb);

void cblas_ztrsm(const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, const BLASINT M, const BLASINT N, const void *alpha, const void *A, const BLASINT lda, void *B, const BLASINT ldb);

Fortran interface:

CALL STRSM(SIDE, UPLO, TRANSA, DIAG, M, N, ALPHA, A, LDA, B, LDB)

CALL DTRSM(SIDE, UPLO, TRANSA, DIAG, M, N, ALPHA, A, LDA, B, LDB)

CALL CTRSM(SIDE, UPLO, TRANSA, DIAG, M, N, ALPHA, A, LDA, B, LDB)

CALL ZTRSM(SIDE, UPLO, TRANSA, DIAG, M, N, ALPHA, A, LDA, B, LDB)

参数

参数名

类型

描述

输入/输出

Order

枚举类型CBLAS_ORDER

表示矩阵是行主序或列主序。

输入

Side

枚举类型CBLAS_SIDE

表示op(A)在X的左边或右边。

  • 如果Side=CblasLeft,则
  • 如果Side=CblasRight,则

输入

Uplo

枚举类型CBLAS_UPLO

表示使用矩阵A的上三角或下三角。

  • 如果Uplo=CblasUpper,则使用A的上三角部分。
  • 如果Uplo=CblasLower,则使用A的下三角部分。

输入

TransA

枚举类型CBLAS_TRANSPOSE

矩阵A为常规矩阵,转置矩阵或共轭矩阵。

  • 如果trans=CblasNoTrans,则
  • 如果trans=CblasTrans,则
  • 如果trans=CblasConjTrans,则

输入

Diag

枚举类型CBLAS_DIAG

表示A是否是单元三角阵。

  • 如果Diag=CblasUnit,则A是单元三角矩阵。
  • 如果Diag=CblasNonUnit,则A不是单元三角矩阵。

输入

M

整型数

矩阵B的行。

输入

N

整型数

矩阵B的列。

输入

alpha

  • 在strsm中,alpha为单精度浮点类型。
  • 在dtrsm中,alpha为双精度浮点类型。
  • 在ctrsm中,alpha为单精度复数类型。
  • 在ztrsm中,alpha为双精度复数类型。

乘法系数。

输入

A

  • 在strsm中,A是单精度浮点类型。
  • 在dtrsm中,A是双精度浮点类型。
  • 在ctrsm中,A是单精度复数类型。
  • 在ztrsm中,A是双精度复数类型。

三角矩阵A(lda, N)。

输入

lda

整型数

矩阵A中每列存储的地址距离,要求lda大于或等于max(1, N)。

输入

B

  • 在strsm中,B为单精度浮点类型。
  • 在dtrsm中,B为双精度浮点类型。
  • 在ctrsm中,B为单精度复数类型。
  • 在ztrsm中,B为双精度复数类型。

矩阵B。

输入/输出

ldb

整型数

矩阵为列存,ldb至少max(1, m),否则至少max(1, n)。

输入

依赖

#include "kblas.h"

示例

C interface:

    int m = 3, n = 3, lda = 3, ldb = 3; 
    float alpha = 1.0;   
    /** 
     *             | 4.0   1.0  2.0 | 
     *     A    =  |  .    1.0  3.0 | 
     *             |  .     .   1.0 | 
     * 
     *     B    =  | 2.0   3.0  1.0| 
     *             | 11.0  -2.0 2.0| 
     *             | 1.0   1.0  6.0| 
     */ 
    float a[9] = {4.0, 0, 0, 1.0, 1.0, 0, 2.0, 3.0, 1.0}; 
    float b[9] = {2.0, 11.0, 1.0, 3.0, -2.0, 1.0, 1.0, 2.0, 6.0}; 
 
    cblas_strsm(CblasColMajor, CblasRight, CblasUpper, CblasNoTrans, CblasNonUnit, m, n, alpha, a, lda, b, ldb); 
    /** 
     * Output B 
     *         | 0.500000        2.500000        -7.500000| 
     *    B =  | 2.750000        -4.750000       10.750000| 
     *         | 0.250000        0.750000        3.250000 | 
     */

Fortran interface:

      INTEGER :: M=3, N=3 
      INTEGER :: LDA=3, LDB=3 
      REAL(4) :: ALPHA=1.0 
      REAL(4) :: A(3, 3), B(3, 3) 
      DATA A/4.0, 0, 0, 1.0, 1.0, 0, 2.0, 3.0, 1.0/ 
      DATA B/2.0, 11.0, 1.0, 3.0, -2.0, 1.0, 1.0, 2.0, 6.0/ 
      EXTERNAL STRSM 
      CALL STRSM('R', 'U', 'N', 'N', M, N, ALPHA, A, LDA, B, LDB) 
 
*     Output B 
*             | 0.500000        2.500000        -7.500000| 
*        B =  | 2.750000        -4.750000       10.750000| 
*             | 0.250000        0.750000        3.250000 |