---
title: ?lasr
description: "对矩阵A做平面旋转操作。"
url: https://www.hikunpeng.com/document/detail/zh/kunpengboostkithistory/2200/accel/kunpengaccel_kml_16_0341.html
sourcePath: /source/zh/kunpengboostkithistory/2200/accel/kunpengaccel_kml_16_0341.html
indexId: efd0b698f66e9350f82d85d304f5ab7656ba1351235d996800bea65f6fceffe074
---
# ?lasr

对矩阵A做平面旋转操作。

#### 接口定义

C Interface：

void slasr_(const char *SIDE, const char *PIVOT, const char *DIRECT, const int *M, const int *N, float *C, float *S, float *A, const int *LDA);

void dlasr_(const char *SIDE, const char *PIVOT, const char *DIRECT, const int *M, const int *N, double *C, double *S, double *A, const int *LDA);

void clasr_(const char *SIDE, const char *PIVOT, const char *DIRECT, const int *M, const int *N, float *C, float *S, float _Complex *A, const int *LDA);

void zlasr_(const char *SIDE, const char *PIVOT, const char *DIRECT, const int *M, const int *N, double *C, double *S, double _Complex *A, const int *LDA);

Fortran Interface：

SLASR(SIDE, PIVOT, DIRECT, M, N, C, S, A, LDA);

DLASR(SIDE, PIVOT, DIRECT, M, N, C, S, A, LDA);

CLASR(SIDE, PIVOT, DIRECT, M, N, C, S, A, LDA);

ZLASR(SIDE, PIVOT, DIRECT, M, N, C, S, A, LDA);


#### 参数

| 参数名 | 类型 | 描述 | 输入/输出 |
| --- | --- | --- | --- |
| SIDE | 字符型 | 'L'，A:=P\*A。 'R'，A:=A\*P\*\*T。 | 输入 |
| PIVOT | 字符型 | 'V'，Variable pivot, plane (k, k+1)。 'T'，Top pivot, plane(1, k+1)。 'B'，Bottom pivot, plane (k, z)。 | 输入 |
| DIRECT | 字符型 | 'F'，Forward, P=P(z\-1)\*…\*P(2)\*P(1)。 'B'，Backward, P=P(1)\*P(2)\*…\*P(z\-1)。 | 输入 |
| M | 整数型 | 矩阵A的行数。 | 输入 |
| N | 整数型 | 矩阵A的列数。 | 输入 |
| C | 在slasr/clasr中为单精度浮点型数组。 在dlasr/zlasr中为双精度浮点型数组。 | 平面旋转的cosine值。 | 输入 |
| S | 在slasr/clasr中为单精度浮点型数组。 在dlasr/zlasr中为双精度浮点型数组。 | 平面旋转的sine值。 | 输入 |
| A | 在slasr中为单精度浮点型数组。 在dlasr中为双精度浮点型数组。 在clasr中为单精度复数型数组。 在zlasr中为双精度复数型数组。 | 矩阵A，维度为（LDA,N）。 | 输入，输出 |
| LDA | 整数型 | 矩阵A的主维。 | 输入 |


#### 依赖

#include "klapack.h"


#### 示例

C Interface：

```
const char side = 'L';
const char pivot = 'V';
const char direct = 'F';
int m = 4;
int n = 4;
int lda = m;
double c[] = {0.000000, 0.900000, 1.100000};
double s[] = {0.181818, 0.545455, 0.000000};
double a[] = {0.600000,0.200000,0.900000,0.100000,
0.200000,0.700000,0.000000,0.900000,
0.300000,0.600000,0.000000,0.600000,
0.200000,0.600000,0.100000,0.800000};
dlasr_(&side, &pivot, &direct, &m, &n, c, s, a, &lda);
/*
* Output:
* a output (stored in column-major)
*   0.036364        0.392727        0.956455        0.110000
*   0.127273        -0.032727       0.021818        0.990000
*   0.109091        -0.049091       0.032727        0.660000
*   0.109091        0.021818        0.120818        0.880000
```

Fortran Interface：

```
CHARACTER :: side = "L"
CHARACTER :: pivot = "V"
CHARACTER :: direct = "F"
PARAMETER (m = 4)
PARAMETER (n = 4)
PARAMETER (lda = 4)
REAL(8) :: c(m-1)
REAL(8) :: s(m-1)
REAL(8) :: a(lda, n)
DATA c / 0.000000, 0.900000, 1.100000 /
DATA s / 0.181818, 0.545455, 0.000000 /
DATA a / 0.600000,0.200000,0.900000,0.100000,
$        0.200000,0.700000,0.000000,0.900000,
$        0.300000,0.600000,0.000000,0.600000,
$        0.200000,0.600000,0.100000,0.800000 /
EXTERNAL DLASR
CALL DLASR(side, pivot, direct, m, n, c, s, a, lda);
*
* Output:
* a output (stored in column-major)
*   0.036364        0.392727        0.956455        0.110000
*   0.127273        -0.032727       0.021818        0.990000
*   0.109091        -0.049091       0.032727        0.660000
*   0.109091        0.021818        0.120818        0.880000
```
