• 検索結果がありません。

A LL T 分解 含 大 さ n × n 配列へ インタ ア 戻 必要 領域が imsl_f_lin_sol_posdef によ 割 当 ます こ 配列 下 角部分 L 角部分 LT 含 ます 一般的に float *p_factor が宣言さ &p_factor が引数 し 使用さ ます

IMSL_FACTOR_USER, float factor[] 。入力/出力)

A LL T 分解 含 大 さ n × n ー 割 当 配列 こ 配列 下 角部分

L 含 角部分 LT 含 ます A が必要 け a factor 同

領域 共有 ます IMSL_SOLVE が指定さ こ パ ータ 入力 す

そ 他 場合 出力に ます

IMSL_FAC_COL_DIM, int fac_col_dim 。入力)

A LL T 分解 含 配列 列次元

フ : fac_col_dim = n IMSL_INVERSE, float **p_inva 。出力)

A 逆行列 含 大 さ n × n 配列へ インタ ア 戻 必要 領域

imsl_f_lin_sol_posdef によ 割 当 ます 一般に float *p_inva が宣言 さ &p_inva が引数 し 使用さ ます

IMSL_INVERSE_USER, float inva[] 。出力)

A 逆行列 含 大 さ n × n ー 割 当 配列

IMSL_INV_COL_DIM, int inva_col_dim 。入力)

A 逆行列 含 配列 列次元

フ : inva_col_dim = n IMSL_CONDITION, float *cond 。出力)

行列 A L1 条件数 推定値 含 インタ こ プ ン

IMSL_SOLVE_ONLY 共に使用す こ ませ

IMSL_FACTOR_ONLY

A コ キー分解 LL T 計算します IMSL_FACTOR_ONLY が使用さ 場合 IMSL_FACTOR 又 IMSL_FACTOR_USER い が必要に ます 引数 b こ 時 無視さ imsl_f_lin_sol_posdef 戻 値 NULL に ます

IMSL_SOLVE_ONLY

前に imsl_f_lin_sol_posdef によ 計算さ た LL T が与え Ax = b

ます フ Ax = b imsl_f_lin_sol_posdef によ 指定さ

います IMSL_SOLVE_ONLY が使用さ 引数 IMSL_FACTOR_USER が必要に 引数 a 無視さ ます

IMSL_INVERSE_ONLY

A 逆行列 計算します IMSL_INVERSE_ONLY 使用す IMSL_INVERSE 又 IMSL_INVERSE_USER が必要に ます 引数 b 無視さ

imsl_f_lin_sol_posdef 戻 値 NULL に ます

説明

関数 imsl_f_lin_sol_posdef 対称正定値係数行列 A 持 線形方程式 解 ます こ 関数 最 初に A コ キー分解 LLT 計算します 線形方程式 解 そ 単純 方程式 y = L-1 b x

= L

-T y 解くこ によ ます 線形方程式 解 あ 逆行列 A L1 条件数

Dongarraそ 他。1979年) 同 ア 使用し 計算さ ます 推定さ た条件数が 1/εよ

も大 い場合 ここ ε ン精度 警告 ッ ージが出ます こ A 非常に小さい変化が解 x 大 い変化 生 こ 意味します

関数 imsl_f_lin_sol_posdef 分解 下 角行列 L が ロ 対角要素 持 場合 ー ま

例題 1

ここ 対称正定値係数行列 持 次 3元連立方程式 解 ます x1

- 3x

2

+ 2x

3

= 27

-3x

1

+ 10x

2

- 5x

3

= -78 2x

1

- 5x

2

+ 6x

3

= 64

#include <imsl.h>

int main() {

int n = 3;

float *x;

float a[] = {1.0, -3.0, 2.0, -3.0, 10.0, -5.0, 2.0, -5.0, 6.0};

float b[] = {27.0, -78.0, 64.0};

/* Solve Ax = b for x */

x = imsl_f_lin_sol_posdef (n, a, b, 0);

/* Print x */

imsl_f_write_matrix ("Solution, x, of Ax = b", 1, n, x, 0);

}

出力

Solution, x, of Ax = b

1 2 3

1 –4 7

例題 2

こ 例題 最初 例題 同 3元線形方程式 解 ますが 今回 A LL T 分解 求 ます そ 解x 主プログ に割 当 た配列に返さ ます

#include <imsl.h>

int main() {

int n = 3;

float x[3], *p_factor;

float a[] = {1.0, -3.0, 2.0, -3.0, 10.0, -5.0, 2.0, -5.0, 6.0};

float b[] = {27.0, -78.0, 64.0};

/* Solve Ax = b for x */

imsl_f_lin_sol_posdef (n, a, b, IMSL_RETURN_USER, x, IMSL_FACTOR, &p_factor, 0);

/* Print x */

imsl_f_write_matrix ("Solution, x, of Ax = b", 1, n, x, 0);

/* Print Cholesky factor of A */

imsl_f_write_matrix ("Cholesky factor L, and trans(L), of A", n, n, p_factor, 0);

}

出力

Solution, x, of Ax = b

1 2 3

1 -4 7

Cholesky factor L, and trans(L), of A

1 2 3

1 1 -3 2

2 -3 1 1

3 2 1 1

例題 3

こ 例題 最初 同 方程式 解 ますが A コ キー因子が与え ます

#include <imsl.h>

int main() {

int n = 3;

float *x, *a;

float factor[ ] = {1.0, -3.0, 2.0, -3.0, 1.0, 1.0, 2.0, 1.0, 1.0};

float b[ ] = {27.0, -78.0, 64.0};

/* Solve Ax = b for x */

x = imsl_f_lin_sol_posdef (n, a, b, IMSL_FACTOR_USER, factor, IMSL_SOLVE_ONLY,

0);

/* Print x */

imsl_f_write_matrix ("Solution, x, of Ax = b", 1, n, x, 0);

}

出力

Solution, x, of Ax = b

1 2 3

1 –4 7

警告 ー

IMSL_ILL_CONDITIONED 入力行列 非常に悪条件 す L1 条件数 逆数 推定値

"rcond" = # す 解 恐 く正確 あ ませ

重大 ー

IMSL_NONPOSITIVE_MATRIX 入力行列 先 # × # 小行列 正定値 あ ませ IMSL_SINGULAR_MATRIX 入力行列 特異 す

IMSL_SINGULAR_TRI_MATRIX 入力 角行列 特異 す 最 初 ロ 対角要素 指標 # す