XLPack API: Pascal 使用例

PascalからXLPackを呼び出す

Pascal (Delphi または Free Pascal) からXLPackを呼び出すためにはDLLを直接使う必要があります.
SDKにはDLLインターフェースプログラムxlpack.pasが入っています. これを使うと, 呼び出しプログラムは “uses XLPack;” と宣言するだけでDLLインターフェースの詳細を気にせず組込み関数のように簡単にXLPackを呼び出すことができます.
係数行列a, 右辺行列bともに1次元配列を使います.

Pascalプログラム例 (例題(1))

program test_xlpack_1;

uses XLPack;

procedure test_dgesv;
const
    n = 3; lda = n; ldb = n;
    a: array[1..n*n] of Double =
        (0.2,  -0.32, -0.8,
         -0.11, 0.81, -0.92,
         -0.93, 0.37, -0.29);
    b: array[1..n] of Double =
        (-0.3727, 0.4319, -1.4247);
var
    ipiv: array[1..n] of Integer;
    info: Integer;
begin
    Dgesv(n, lda, a, ipiv, ldb, b, info);
    Writeln('x =');
    Writeln(b[1], '  ', b[2], '  ', b[3]);
    Writeln('info = ', info);
end;

begin
    test_dgesv;
end.

実行結果

x =
 8.60000000000000E-0001   6.40000000000000E-0001   5.10000000000000E-0001
info = 0

Pascalプログラム例 (例題(2))

例題(2)ではf(x)の積分をqk15を使って求めます. qk15はf(x)を定義する外部関数を必要とします. 外部関数はDelphiで作成することができ, qk15は必要なときにそれを呼び出します.

program test_xlpack_2;

uses XLPack;

function f(x: Double): Double;
begin
    f := 1/(1 + x*x);
end;

procedure test_qk15;
var
    a, b, result, abserr: Double;
begin
    a := 0; b := 4;
    Qk15(f, a, b, result, abserr);
    Writeln('result = ', result, ', abserr = ', abserr);
end;

begin
    test_qk15;
end.

実行結果

result =  1.32581766136379E+0000, abserr =  1.48272394121622E-0003