計算ルーチン: 実二重対角行列の特異値分解 : (オプショナルで特異ベクトル(divide-and-conquer))

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

ホーム > LAPACKサンプルプログラム目次 > 計算ルーチン > 実二重対角行列の特異値分解

概要

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

入力データ

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

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

  4                          :Value of N

  3.62  -2.41   1.92  -1.43  :End of diagonal elements
  1.26  -1.53   1.19         :End of off-diagonal elements

出力結果

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

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

 Singular values of B:
         4.0001        3.0006        1.9960        0.9998

ソースコード

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

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


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

!     DBDSDC Example Program Text

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

!     .. Use Statements ..
      Use lapack_interfaces, Only: dbdsdc
      Use lapack_precision, Only: dp
!     .. Implicit None Statement ..
      Implicit None
!     .. Parameters ..
      Integer, Parameter :: nin = 5, nout = 6
!     .. Local Scalars ..
      Integer :: info, ldb, ldu, ldvt, n
!     .. Local Arrays ..
      Real (Kind=dp), Allocatable :: b(:, :), d(:), e(:), u(:, :), vt(:, :), &
        work(:)
      Real (Kind=dp) :: q(1)
      Integer :: iq(1)
      Integer, Allocatable :: iwork(:)
!     .. Executable Statements ..
      Write (nout, *) 'DBDSDC Example Program Results'
      Write (nout, *)
      Flush (nout)
!     Skip heading in data file
      Read (nin, *)
      Read (nin, *) n
      ldb = n
      ldu = n
      ldvt = n
      Allocate (b(ldb,n), d(n), e(n-1), u(ldu,n), vt(ldvt,n), work(n*(3*n+ &
        4)), iwork(8*n))

!     Read the bidiagonal matrix B from data file, first
!     the diagonal elements, and then the off diagonal elements

      Read (nin, *) d(1:n)
      Read (nin, *) e(1:n-1)

!     Calculate the singular values and left and right singular
!     vectors of B.

      Call dbdsdc('Upper', 'I', n, d, e, u, ldu, vt, ldvt, q, iq, work, iwork, &
        info)

      If (info==0) Then
!       Print the singular values of B.

        Write (nout, *) 'Singular values of B:'
        Write (nout, 100) d(1:n)
      Else
        Write (nout, 110) '** DBDSDC failed with INFO = ', info
      End If

100   Format (1X, 4(3X,F11.4))
110   Format (1X, A, I10)
    End Program


ご案内
関連情報
Privacy Policy  /  Trademarks