関連情報

next up previous
次へ: DGESVXの例題 上へ: 実線形方程式ルーチン 前へ: DGBSVXの例題

※以下のサンプルの実行方法についてはイントロダクションをご参照下さい。

DGESVの例題

DGESVのマニュアルページ

以下の式を解きます。

\begin{displaymath}
A x = b,
\end{displaymath}

$ A$は一般行列です。

\begin{displaymath}
A = \left(
\begin{array}{rrrr}
1.80 & 2.88 & 2.05 & -0.89...
...r}
9.52 \\
24.35 \\
0.77 \\
-6.22
\end{array} \right).
\end{displaymath}

$ A$$ LU$ 分解についてに詳細も合わせて出力されます。

出力結果


この出力結果をダウンロード
 DGESV Example Program Results

 Solution
        1.0000    -1.0000     3.0000    -5.0000

 Details of factorization
             1          2          3          4
 1      5.2500    -2.9500    -0.9500    -3.8000
 2      0.3429     3.8914     2.3757     0.4129
 3      0.3010    -0.4631    -1.5139     0.2948
 4     -0.2114    -0.3299     0.0047     0.1314

 Pivot indices
             2          2          3          4


入力データ


このデータをダウンロード
DGESV Example Program Data

  4                          :Value of N

  1.80   2.88   2.05  -0.89
  5.25  -2.95  -0.95  -3.80
  1.58  -2.69  -2.90  -1.04
 -1.11  -0.66  -0.59   0.80  :End of matrix A

  9.52  24.35   0.77  -6.22  :End of vector b


ソースコード


このソースコードをダウンロード
!     DGESV Example Program Text
!     NAG Copyright 2005.
!     .. Parameters ..
  Integer nin, nout
  Parameter (nin=5, nout=6)
  Integer nmax
  Parameter (nmax=8)
  Integer lda
  Parameter (lda=nmax)
!     .. Local Scalars ..
  Integer i, ifail, info, j, n
!     .. Local Arrays ..
  Double Precision a(lda, nmax), b(nmax)
  Integer ipiv(nmax)
!     .. External Subroutines ..
  External dgesv, x04caf
!     .. Executable Statements ..
  Write (nout, *) 'DGESV Example Program Results'
  Write (nout, *)
!     Skip heading in data file
  Read (nin, *)
  Read (nin, *) n
  If (n<=nmax) Then
!
!        Read A and B from data file
!
    Read (nin, *)((a(i,j),j=1,n), i=1, n)
    Read (nin, *)(b(i), i=1, n)
!
!        Solve the equations Ax = b for x
!
    Call dgesv(n, 1, a, lda, ipiv, b, n, info)
!
    If (info==0) Then
!
!           Print solution
!
      Write (nout, *) 'Solution'
      Write (nout, 100)(b(i), i=1, n)
!
!           Print details of factorization
!
      Write (nout, *)
      ifail = 0
      Call x04caf('General', ' ', n, n, a, lda, 'Details of factorization', &
        ifail)
!
!           Print pivot indices
!
      Write (nout, *)
      Write (nout, *) 'Pivot indices'
      Write (nout, 110)(ipiv(i), i=1, n)
!
    Else
      Write (nout, 120) 'The (', info, ',', info, ')', &
        ' element of the factor U is zero'
    End If
  Else
    Write (nout, *) 'NMAX too small'
  End If
  Stop
!
100 Format ((3X,7F11.4))
110 Format ((3X,7I11))
120 Format (1X, A, I3, A, I3, A, A)
End Program



Sven Hammarling 2005-11-14

Results matter. Trust NAG.
Privacy Policy | Trademarks