計算ルーチン: 実対称行列の対称三重対角形への直交縮約 : (圧縮格納形式)

LAPACKサンプルソースコード : 使用ルーチン名:DSPTRD

ホーム > LAPACKサンプルプログラム目次 > 計算ルーチン > 実対称行列の対称三重対角形への直交縮約

概要

本サンプルはFortran言語によりLAPACKルーチンDSPTRDを利用するサンプルプログラムです。

入力データ

(本ルーチンの詳細はDSPTRD のマニュアルページを参照)

このデータをダウンロード
DSPTRD Example Program Data
  4                           :Value of N
  'L'                         :Value of UPLO
  2.07
  3.87  -0.21
  4.20   1.87   1.15
 -1.15   0.63   2.06  -1.81   :End of matrix A

出力結果

(本ルーチンの詳細はDSPTRD のマニュアルページを参照)

この出力例をダウンロード
 DSPTRD Example Program Results

 Diagonal and off-diagonal elements of tridiagonal form

     i         D            E
     1      2.07000      5.82575
     2      1.47409      2.62405
     3     -0.64916      0.91627
     4     -1.69493

ソースコード

(本ルーチンの詳細はDSPTRD のマニュアルページを参照)

※本サンプルソースコードのご利用手順は「サンプルのコンパイル及び実行方法」をご参照下さい。


このソースコードをダウンロード
    Program dsptrd_example

!     DSPTRD Example Program Text

!     Copyright 2017, Numerical Algorithms Group Ltd. http://www.nag.com

!     .. Use Statements ..
      Use lapack_interfaces, Only: dsptrd
      Use lapack_precision, Only: dp
!     .. Implicit None Statement ..
      Implicit None
!     .. Parameters ..
      Integer, Parameter :: nin = 5, nout = 6
!     .. Local Scalars ..
      Integer :: i, info, j, n
      Character (1) :: uplo
!     .. Local Arrays ..
      Real (Kind=dp), Allocatable :: ap(:), d(:), e(:), tau(:)
!     .. Intrinsic Procedures ..
      Intrinsic :: abs
!     .. Executable Statements ..
      Write (nout, *) 'DSPTRD Example Program Results'
!     Skip heading in data file
      Read (nin, *)
      Read (nin, *) n

      Allocate (ap(n*(n+1)/2), d(n), e(n-1), tau(n-1))

!     Read A from data file and copy A into AW

      Read (nin, *) uplo
      If (uplo=='U') Then
        Read (nin, *)((ap(i+j*(j-1)/2),j=i,n), i=1, n)
      Else If (uplo=='L') Then
        Read (nin, *)((ap(i+(2*n-j)*(j-1)/2),j=1,i), i=1, n)
      End If

!     Reduce A to tridiagonal form
      Call dsptrd(uplo, n, ap, d, e, tau, info)

      If (info==0) Then
!       Print the diagonal and off-diagonal of tridiagonal T.
!       The absolute value of E is printed since this can vary by a change of
!       sign (corresponding to multiplying through a column of Q by -1).

        Write (nout, *)
        Write (nout, *) &
          'Diagonal and off-diagonal elements of tridiagonal form'
        Write (nout, *)
        Write (nout, 100) 'i', 'D', 'E'
        Do i = 1, n - 1
          Write (nout, 110) i, d(i), abs(e(i))
        End Do
        Write (nout, 110) n, d(n)

      Else
        Write (nout, 120) info
      End If

100   Format (5X, A, 9X, A, 12X, A)
110   Format (1X, I5, 2(1X,F12.5))
120   Format (1X, '** DSPTRD retuned with INFO = ', I10)

    End Program


ご案内
関連情報
Privacy Policy  /  Trademarks