非対称実スパースソルバー (Nonsymmetric Sparse Solver)

nAG Toolbox for MATLAB®用のサンプルコード

ホーム > 製品 > nAG Toolbox for MATLAB® > サンプルコード集 > 非対称実スパースソルバー

Keyword: スパースソルバー, sparse solver, RGMRES, 疎行列, SSOR

概要

本サンプルは以下に示す非対称実スパース連立方程式を解くC言語によるプログラムです。 連立方程式は係数行列と右辺ベクトルとして与えます。 

係数行列(スパース)  右辺ベクトル

以下のプログラム例ではRGMRES法 (restarted generalized minimal residual method) を用いていますが、その他にCGS法 (conjugate gradient squared method)、及びBICGSTAB法 (bi-conjugate gradient stabilised method) に対応しています。(入力データの method = 'RGMRES' の部分を method = 'CGS'、method = 'BICGSTAB' にそれぞれ置き換える事で手法を選ぶことが可能です)

またプリコンディショナーにはSSOR (symmetric successive-over-relaxation) を用いていますが、その他にJacobi の指定及びプリコンディショナーを使用しない設定が可能です。(入力データの precon = 'S' の部分をそれぞれ precon = 'J'、precon = 'N' に置き換えることで指定可能です)

※本サンプルはnAG Toolbox for MATLAB®が提供する関数 f11de()のExampleコードです。実行にはMATLAB®本体(他社製品)とnAG Toolbox for MATLAB®が必要です。
本サンプル及び関数の詳細情報はf11de のマニュアルページをご参照ください。

入力データ

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36

method = 'RGMRES  ';
precon = 'S';
a = [2;
     1;
     -1;
     -3;
     -2;
     1;
     1;
     5;
     3;
     1;
     -2;
     -3;
     -1;
     4;
     -2;
     -6];
irow = [int32(1);1;1;2;2;2;3;3;3;3;4;4;4;5;5;5];
icol = [int32(1);2;4;2;3;5;1;3;4;5;1;4;5;2;3;5];
omega = 1.05;
b = [0;
     -7;
     33;
     -19;
     -28];
m = int32(1);
tol = 1e-10;
maxitn = int32(1000);
x = [0;
     0;
     0;
     0;
     0];
[xOut, rnorm, itn, ifail] = ...
    f11de(method, precon, a, irow, icol, omega, b, m, tol, maxitn, x)

  • method には用いる計算手法 (=RGMRES) を指定しています。
  • precon にはプリコンディショナーを指定しています。"S"はSSOR(Symmetric successive-over-relaxation)を意味します。
  • irow には非ゼロ要素の行番号を指定しています。
  • icol には非ゼロ要素の列番号を指定しています。
  • omega にはSSORプリコンディショナーのリラックスパラメータであるω (=1.05) を与えています。SSOR以外のプリコンディショナーを用いる場合にはこの数値は無視されます。
  • b には右辺ベクトルの値を指定しています。全部で5個の数値が指定されています。
  • m には RGMRES法の再開サブスペース空間の次元 m (=1)を与えています。
  • tol には計算精度 tol (=1.e-10)を与えています。
  • maxitn には最大反復数 maxitn (=1000) を与えています。
  • x には解の初期値を与えています。 全部で5個の数値が指定されています。 ここでは初期値として全て 0 を与えています。
  • 最後に本関数を呼び出す構文を指定しています。

出力結果

1
2
3
4
5
6
7
8
9
10
11
12

xOut =
    1.0000
    2.0000
    3.0000
    4.0000
    5.0000
rnorm =
   5.0871e-09
itn =
          13
ifail =
           0

  • xOut は求まった解を示しています。
  • rnorm は求まった解の残差ノルムを示しています。
  • itn は解を求める際の反復数を示しています。(この例では13回)
  • ifail は関数がエラーを検知しなければ"0"が出力されます。

関連情報
© 日本ニューメリカルアルゴリズムズグループ株式会社 2025
Privacy Policy  /  Trademarks