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

?lascl

对矩阵做scalar操作。

接口定义

C Interface:

void slascl_(const char *type, const int *kl, const int *ku, const float *cfrom, const float *cto, const int *m, const int *n, float *a, const int *lda, int *info);

void dlascl_(const char *type, const int *kl, const int *ku, const double *cfrom, const double *cto, const int *m, const int *n, double *a, const int *lda, int *info);

void clascl_(const char *type, const int *kl, const int *ku, const float *cfrom, const float *cto, const int *m, const int *n, float _Complex *a, const int *lda, int *info);

void zlascl_(const char *type, const int *kl, const int *ku, const double *cfrom, const double *cto, const int *m, const int *n, double _Complex *a, const int *lda, int *info);

Fortran Interface:

SLASCL(TYPE, KL, KU, CFROM, CTO, M, N, A, LDA, INFO);

DLASCL(TYPE, KL, KU, CFROM, CTO, M, N, A, LDA, INFO);

CLASCL(TYPE, KL, KU, CFROM, CTO, M, N, A, LDA, INFO);

ZLASCL(TYPE, KL, KU, CFROM, CTO, M, N, A, LDA, INFO);

参数

参数名

类型

描述

输入/输出

TYPE

字符型

  • 'G':矩阵A是全矩阵。
  • 'L':矩阵A是下三角矩阵。
  • 'U':矩阵A是上三角矩阵。
  • 'H':矩阵A是上Hessenberg矩阵。
  • 'B':矩阵A是对称带状矩阵,下带宽为KL,上带宽为KU,且只存对角线下部分。
  • 'Q':矩阵A是对称带状矩阵,下带宽为KL,上带宽为KU,且只存对角线上部分。
  • 'Z':矩阵A是带状矩阵,下带宽为KL,上带宽为KU。

输入

KL

整数型

矩阵A的下带宽,当TYPE='B','Q'或'Z'时,有效。

输入

KU

整数型

矩阵A的上带宽,当TYPE='B','Q'或'Z'时,有效。

输入

CFROM

  • 在slascl中为单精度浮点型。
  • 在dlascl中为双精度浮点型。
  • 在clascl中为单精度浮点型。
  • 在zlascl中为双精度浮点型。

非零值,为scalar值的分母部分,即:scalar=CTO/CFROM。

输入

CTO

  • 在slascl中为单精度浮点型。
  • 在dlascl中为双精度浮点型。
  • 在clascl中为单精度浮点型。
  • 在zlascl中为双精度浮点型。

scalar值的分子部分,即:scalar=CTO/CFROM。

输入

M

整数型

矩阵A的行数,M≥0。

输入

N

整数型

矩阵A的列数,N≥0。

输入

A

  • 在slascl中为单精度浮点型数组。
  • 在dlascl中为双精度浮点型数组。
  • 在clascl中为单精度复数型数组。
  • 在zlascl中为双精度复数型数组。

矩阵A,维度为(LDA, N)。

输入,输出

LDA

整数型

矩阵A的主维。

  • TYPE='G','L','U','H'时,LDA>=max(1, M)。
  • TYPE='B'时,LDA>=KL+1。
  • TYPE='Q'时,LDA>=KU+1。
  • TYPE='Z'时,LDA>=2*KL+KU+1。

输入

INFO

整数型

  • 等于0:运行成功。
  • 小于0:第-info个参数值不合法。

输出

依赖

#include "klapack.h"

示例

C Interface:

const char type = 'G';
const int n = 4;
const int m = 4;
const int kl = 2;
const int ku = 2;
const double cfrom = 2.0;
const double cto = 1.0;
const int lda = m;
int info = 0;

double a[] = {1.0, 1.0, 1.0, 1.0,
              2.0, 2.0, 2.0, 2.0,
              3.0, 3.0, 3.0, 3.0,
              4.0, 4.0, 4.0, 4.0};

dlascl_(&type, &kl, &ku, &cfrom, &cto, &m, &n, a, &lda, &info);
/* 
 * Output: 
 * a output
 *   
 *  0.500000        0.500000        0.500000        0.500000
 *  1.000000        1.000000        1.000000        1.000000
 *  1.500000        1.500000        1.500000        1.500000
 *  2.000000        2.000000        2.000000        2.000000

Fortran Interface:

CHARACTER :: type = "G"
PARAMETER (m = 4) 
PARAMETER (n = 4)
PARAMETER (kl = 2)
PARAMETER (ku = 2)
PARAMETER (lda = 4) 
REAL(8) :: cfrom
REAL(8) :: cto
REAL(8) :: a(lda, n)  
  
DATA cfrom / 2.0 / 
DATA cto / 1.0 /
DATA a / 1.0, 1.0, 1.0, 1.0,
         2.0, 2.0, 2.0, 2.0,
         3.0, 3.0, 3.0, 3.0,
         4.0, 4.0, 4.0, 4.0 /
 EXTERNAL DLASCL
 CALL DLASCL(type, kl, ku, cfrom, cto, m, n, a, lda, info);
* 
* Output: 
* a output
*  
*  0.500000        0.500000        0.500000        0.500000
*  1.000000        1.000000        1.000000        1.000000
*  1.500000        1.500000        1.500000        1.500000
*  2.000000        2.000000        2.000000        2.000000