行列の固有値・固有ベクトル計算

Namespace: fvalgcli
Assembly: fvalgcli (in fvalgcli.dll) Version: 3.1.0.0 (3.1.0.11)

Syntax

C#
public static int fnFIE_mat_eig(
	FMATRIX_PTR a,
	FCOMPLEX_PTR lambda,
	FCOMPLEX_PTR vr,
	FCOMPLEX_PTR vl
)
Visual Basic
Public Shared Function fnFIE_mat_eig ( 
	a As FMATRIX_PTR,
	lambda As FCOMPLEX_PTR,
	vr As FCOMPLEX_PTR,
	vl As FCOMPLEX_PTR
) As Integer

Parameters

a
Type: fvalgcli..::..FMATRIX_PTR
固有値を計算するNxN正方行列A
lambda
Type: fvalgcli..::..FCOMPLEX_PTR
固有値配列。 N個分の領域が必要。
vr
Type: fvalgcli..::..FCOMPLEX_PTR
Aの右固有ベクトル。
N*N個の領域が必要。
計算不要な場合は IntPtr.Zero を指定。
vl
Type: fvalgcli..::..FCOMPLEX_PTR
Aの左固有ベクトル。
N*N個の領域が必要。
計算不要な場合は IntPtr.Zero を指定。

Return Value

Type: Int32
以下のエラーコードを返します。

エラーコード:
f_err内容
F_ERR_NONE正常終了
F_ERR_NOMEMORYメモリ不足エラー
F_ERR_CALC_IMPOSSIBLE計算不能エラー
F_ERR_INVALID_PARAMパラメータ異常
F_ERR_NO_LICENCEライセンスエラー、または未初期化エラー

Examples

C# Copy imageCopy
//    $Revision: 1.2 $

using System;
using System.Collections.Generic;
using System.Text;
using fvalgcli;

namespace TC
{
    public partial class FIE
    {
        [FvPluginExecute]
        public void fnFIE_mat_eig()
        {
            FMATRIX_PTR a = FMATRIX_PTR.Zero;
            FCOMPLEX_PTR lambda = FCOMPLEX_PTR.Zero;
            FCOMPLEX_PTR vr = FCOMPLEX_PTR.Zero;
            FCOMPLEX_PTR vl = FCOMPLEX_PTR.Zero;

            const int size = 10;
            try
            {
                lambda = FCOMPLEX_PTR.alloc(size);
                vr = FCOMPLEX_PTR.alloc(size);
                vl = FCOMPLEX_PTR.alloc(size);

                for (int i = 0; i < size; i++)
                {
                    lambda[i] = FCOMPLEX.init( (double)i * 10 + 0.2, (double)i * 10 + 0.1);
                }

                int status = (int)f_err.F_ERR_NONE;
                a = api.fnFIE_mat_aalloc(2, 2);

                a[0, 0] = +1.0; a[0, 1] = 2.0;
                a[1, 0] = -2.0; a[1, 1] = 2.0;

                Assert.IsTrue(a != FMATRIX_PTR.Zero, "エラーが発生しました。");
                status = api.fnFIE_mat_eig( a, lambda, vr, vl );
                Assert.IsTrue(status == (int)f_err.F_ERR_NONE, "エラーが発生しました。({0})", (f_err)status);
                for (int i = 0; i < size; i++)
                {
                    Console.WriteLine("[{0}] image ={1}, real={2}", i, lambda[i].image, lambda[i].real);
                }
            }
            finally
            {
                a.Dispose();
                lambda.Dispose();
                vr.Dispose();
                vl.Dispose();
            }
        }
    }
}


Visual Basic Copy imageCopy
'    $Revision: 1.2 $

Imports System.Collections.Generic
Imports System.Text
Imports fvalgcli

Public Partial Class FIE
    <FvPluginExecute> _
    Public Sub fnFIE_mat_eig()
        Dim a As FMATRIX_PTR = FMATRIX_PTR.Zero
        Dim lambda As FCOMPLEX_PTR = FCOMPLEX_PTR.Zero
        Dim vr As FCOMPLEX_PTR = FCOMPLEX_PTR.Zero
        Dim vl As FCOMPLEX_PTR = FCOMPLEX_PTR.Zero

        Const  size As Integer = 10
        Try
            lambda = FCOMPLEX_PTR.alloc(size)
            vr = FCOMPLEX_PTR.alloc(size)
            vl = FCOMPLEX_PTR.alloc(size)

            For i As Integer = 0 To size - 1
                lambda(i) = FCOMPLEX.init(CDbl(i) * 10 + 0.2, CDbl(i) * 10 + 0.1)
            Next

            Dim status As Integer = CInt(f_err.F_ERR_NONE)
            a = api.fnFIE_mat_aalloc(2, 2)

            a(0, 0) = +1.0
            a(0, 1) = 2.0
            a(1, 0) = -2.0
            a(1, 1) = 2.0

            Assert.IsTrue(a <> FMATRIX_PTR.Zero, "エラーが発生しました。")
            status = api.fnFIE_mat_eig(a, lambda, vr, vl)
            Assert.IsTrue(status = CInt(f_err.F_ERR_NONE), "エラーが発生しました。({0})", CType(status, f_err))
            For i As Integer = 0 To size - 1
                Console.WriteLine("[{0}] image ={1}, real={2}", i, lambda(i).image, lambda(i).real)
            Next
        Finally
            a.Dispose()
            lambda.Dispose()
            vr.Dispose()
            vl.Dispose()
        End Try
    End Sub
End Class

See Also