数値・図形プロセッサ活図

DLL数値計算関数ライブラリ集




目次

  Home




活図」DLL数値計算関数ライブラリ集 仕様・価格


 「活図」DLL数値計算関数ライブラリ集は、全関数を収録したフルパックの他、価格を抑えるため、用途の違いから、部分関数を収録した行列方程式関連の関数パック・補間近似関連の関数パック・波形関連の関数パックも用意されました。

関 数 種 類 等
ライブラリ集の関数パック名
フ ル 行列方程式 補間近似 波 形
価    格
\97,000
発売中止
発売中止
発売中止
対 応 O S
Windows95/98/Me/NT/2000/XP
合 計 個 数
356個
265個
148個
113個
1)三角関数 (14個)




2)平方根,指数,対数関数 (5個)




3)双曲線 (6個)




4)他の数学常用関数 (28個)




5)乱数関数 (11個)




6)特殊関数 (25個)


 
 
7)複素数演算 (17個)


 
 
8)多項式演算 (15個)


 
 
9)分数多項式演算 (10個)


 
 
10)関数値の計算 (9個)




11)Bode線図・
ベクトル軌跡図
(6個)


 
 
12)行列演算 (18個)


 
 
13)方程式解 (8個)


 
 
14)連立方程式解 (6個)


 
 
15)常微分方程式数値解 (4個)


 
 
16)数値微分 (4個)


 
 
17)数値積分 (9個)


 
 
18)ラプラス逆変換 (3個)


 
 
19)高速フーリエ変換・
ウインドウ
(19個)

 
 

20)スペクトル推定 (4個)

 
 

21)平面・空間補間 (18個)

 

 
22)近似・曲線当てはめ (33個)

 

 
23)相関・平滑 (7個)

 
 

24)統計演算 (22個)


 
 
25)データ形式変換 (24個)



 
26)ピーク(包絡線)検出 (10個)

 
 

27)等高線・交線演算 (4個)


 
 
28)点集の三角・四角分割 (8個)


 
 
29)他の曲線演算 (9個)


 
 

活図」DLL数値計算関数ライブラリ集   特  徴  
豊富な機能  136種常用曲線より最適当てはめ曲線の検出・滑らかな等高線表示を可能にした三次元補間等多くの独特な関数から、点集・曲線・交線演算等平凡で不思議なことに他のソフトではけっしてサポートされなかった関数まで、最多360種にも達する関数をサポートしてあります。
 更に、他社の数値関数ライブラリとは異なり、構文解析機能内蔵のため、"0.7*(1-cos(2*x)*exp(-x))"のように任意の F(x) の関数式表現のままでの扱いができる関数も多く含まれています。
 その他、結果数値列のDLL内部自動保持機能は、呼び出し側のバッファ領域確保の必要を無くして、DLL数値関数ライブラリの使い勝手を大幅に向上させました。
大量数値の高速処理 32ビット対応で扱える数値の個数は無限で、数百万個数値の高速フーリエ変換も可能です。Excel等のソフトでは処理可能な数値の個数に制限があり、しかもデータの内部保持方式の関係で計算速度が「活図」よりずいぶん遅いです。
コンパクト性 「活図」のコンパクト性をそのまま継承し、多機能にも関わらず、DLL ファイル cut32fun.dll のサイズを 420KB にまとめることができました。

ラ イ セ ン ス について
 「活図」DLL数値計算関数ライブラリ集を利用したソフトウェアを作成し、本DLLライブラリを添付して販売するまたは業務用に頒布する場合、別途本DLLライブラリの配布ライセンス契約が必要です。
 ライセンス費用は、ライセンスセット数によって変わりますが、詳しくはお問い合わせて下さい。
 更に、実際に使用される数値計算関数のみで構成されるmini版DLL関数ライブラリを特注して頂き、ライセンス費用を下げることもできます。

先頭に戻る    Home




活図」DLL数値計算関数ライブラリ集 使用法



 ここでは、任意の関数式 y=F(x) の指定範囲での一連の値を求めるDLL関数 F_val_fx() を例として、DLL数値計算関数ライブラリの使用法を説明します。

フ ァ イ ル 構 成
 フル関数パックの場合、次の4ファイルがあります。

   cut32fun.h   Visual C++用関数定義のヘッダーファイル
   cut32fun.lib  Visual C++用インポートライブラリファイル
   cut32fun.dll  DLL関数ライブラリの本体ファイル
   cut32dll.hlp  DLL関数ライブラリのオンラインヘルプファイル
   cut32dll.cnt  ヘルプファイルCUT32DLL.HLPの目次定義ファイル

 通常は、DLLファイルcut32fun.dllを、Windows\ディレクトリまたはWindows\System\ディレクトリにコピーして使うと便利です。

 なお、ファイル cut32fun.h には、DLL関数 F_val_fx() に関して、次のような記述があります。
   ....
   #define DllImport extern "C" __declspec( dllimport )
   ....
   DllImport int _stdcall F_val_fx(const char* Fx, double *o_x, double *o_y, double xs, double xe, double xstep);
   ....

関 数 名 指 定 方 式
 「活図」DLL数値計算関数ライブラリは、Visual C++ を使って作成されます。Visual C++ の固有の仕様により、DLLライブラリ中の関数を呼び出す時、関数名の指定は、次の二つの方式のいずれかを使うことになります。

関数呼び名方式1:
 製品版「活図」の関数名の先頭に半角F_ の2文字が追加されます。
 例えば、製品版「活図」の関数 val_fx が、呼び名方式1では F_val_fx となります。
 Visual C++ でインポートライブラリ法を使う場合に、この呼び名方式が使用されます。

関数呼び名方式2:
 「活図」の関数名の先頭に半角 _F_ の3文字が追加され、最後には半角文字 @ 及び数字(数字は引数の合計バイト数を示す)がつき加えられます。
 例えば、製品版「活図」の関数 val_fx が、呼び名方式2では _F_val_fx@36 となります。
 LoadLibrary(), GetProcAddress() 等のAPI関数による明示的な動的リンク法の場合に、この呼び名方式が使用されます。

DLL関数の結果数値列取得のポインタ型引数
 「活図」DLL数値計算関数ライブラリは、一回の関数呼び出しで複数列の大量の結果数値を返せるようになっています。これらの結果数値列を取得するため、DLL関数では、ポインタ型引数が設けられています。呼び出し側で用意したバッファ領域の先頭ポインタをDLL関数の結果数値列取得のポインタ型引数にセットすれば、DLL関数は求めた結果数値列をポインタ引数が指すバッファ領域に格納して返します。

 例えば、式y=F(x)の値を求む関数F_val_fxの場合、2番目o_xと3番目o_yがポインタ型引数で、この二つの引数の使用によって、求めたXとYの二つの結果数値列が呼び出し側に返されます。
  int F_val_fx(const char* Fx, double *o_x, double *o_y, double xs, double xe, double xstep);

バッファ渡し値取得法による結果数値列の取得
 バッファ渡し値取得法というのは、DLL呼び出し側が予め結果数値列の格納バッファ領域を用意し、にそのバッファの先頭ポインタをセットすることにより、結果数値列を渡したバッファ領域に格納してもらう方法のことです。
 DLL呼び出し側でバッファ領域を用意するときは、十分に格納できる領域を取るように注意して下さい。渡したバッファ領域が足りないと、プログラムが暴走します。

 結果数値列取得のポインタ型引数を持つDLL関数は、その結果数値の個数を取得する手段が用意されています。通常は、関数が戻り値として結果数値列の個数を返します。2種類の個数が異なる結果数値列を返す関数の場合に、その内の1種類は、引数として個数を格納してもらう整数ポインタを渡すことにより、結果数値の個数を得るようになっています。
 結果数値のバッファ領域の確保には、先ずその個数を知らなくては行けません。このため、2回呼び出し法の使用を勧めします。1回目の関数呼び出しは、DLL関数に結果数値列取得のポインタ型引数にNULLポインタを渡して結果数値の個数をまず返してもらい、それを使ってバッファ領域を確保します。続いて2回目の呼び出しで、確保できたバッファ領域の先頭ポインタを渡して結果数値列を受け取ります。

 なお、バッファ渡し値取得法を使用するプログラム例は例1、例3、例5を参照して下さい。

結果数値列のDLL内部自動保持機能
 DLL数値関数ライブラリ集の関数呼び出しでは、結果数値列取得ためのポインタ型引数にNULLポインタを渡しますと、結果数値列が返せなくなり、自動的にDLLの内部バッファに保持されます。

 例えば、次の式F(x)値の計算関数F_val_fxの場合、本来では2番目と3番目の引数に結果のXとYの式値列の格納バッファの先頭ポインタを渡すことになっていますが、かわりに2個のNULLポインタを渡すと、本来返すべきのXとYの結果数値列がDLL内部のバッファに倍精度(C言語のdouble)小数型で保持されます。
    F_val_fx("0.7*(1-cos(2*x)*exp(-x))",NULL,NULL,0.0,5.0,0.01);

特徴
 この結果数値列のDLL内部自動保持機能を活用することにより、結果数値列取得ためのバッファ領域確保の必要が無くなり、Visual Basicのようなサイズ不定な変数領域が取得しにくい開発環境では特に便利です。
 DLL内部保持結果数値列の個数と順番は、NULLポインタが渡された引数の数及び順番と一致します。

 このようなDLL内部で保持されている結果数値の取得は、呼び出した直後に、後述の4個の専用補助関数を用いた値直後取得法を使って下さい。

 次のDLL数値関数(補助関数は除く)が呼び出されると、内部保持数値は全てクリアされますので、その前に補助関数による必要な結果数値列の取得を完了して下さい。また、FreeLibrary()等でDLLライブラリの使用が終了された場合、内部保持数値は無くなります。

結果数値列取得ためのDLL用補助関数
 DLL内部保持結果数値列のデータをアクセスするために、次の4個の専用補助関数が用意されています。
  F_result_types(): DLL内部保持結果数値の列数の取得
  F_result_type_num(No): 指定のDLL内部保持結果数値列の数値個数の取得
  F_result_data(No,nIndex): 指定のDLL内部保持結果数値列中の指定番号数値の値の取得
  F_result_buf(No): 指定のDLL内部保持結果数値列バッファの先頭ポインタの取得

値直後取得法による結果数値列の取得
 値直後取得法というのは、 DLL関数の結果数値列取得ためのポインタ型引数にNULLポインタを渡して求めた結果数値列をDLL内部バッファに保持させた直後に、上記の専用の補助関数を使ってこれらの内部保持数値を取り出す方法のことです。
 呼び出し側では特に結果数値列を取得するためのバッファ領域を用意しなくて済むことが、この方法の最大の特徴です。

 なお、値直後取得法を使用するプログラム例は例2、例4、例6を参照して下さい。

インポートライブラリ法によるDLL関数の呼び出し
 Visual C++などの開発言語の場合、付属のヘッダーファイル cut32fun.h 及びインポートライブラリ cut32fun.libを使うと、簡単にDLL関数を呼び出せます。インポートライブラリ法は、プログラムのリンクの段階で、DLL数値関数ライブラリ集に関する情報を(静的に)組み込みます。この方法は、便利で使いやすいですが、Visual C++など一部限られた開発環境しか使用ないことが難点です。

 インポートライブラリ法でのDLL関数名の書式は、呼び名方式1を使用します。この方式では、製品版「活図」の関数名の先頭に半角 F_ の2文字を追加したものを使用します。
 例えば、製品版「活図」の関数 val_fx の場合、インポートライブラリ法では、関数名 F_val_fxで呼び出します。

◆Visual C++でのDLL関数呼び出しの一般手順
 手順@:インポートライブラリ cut32fun.lib をVisual C++のプロジェクト中に組み込んで、リンクの時に使用させます。
 手順A:プログラム中で DLL関数定義ヘッダーファイル cut32fun.h をインクルードします。
 手順B:通常のように、C言語でDLL数値関数呼び出しなどのプログラムコードを記述します。 DLL数値関数は、必ず呼び名方式1で指定して下さい。
 手順C:プロジェクトのコンパイルとリンクを行い、得た実行ファイルを実行させます。DLLファイル cut32fun.dll は、実行ファイルのディレクトリまたはWindowsのディレクトリにおいておけば、必要な時に自動的に使用されます。

 なお、インポートライブラリ法を使用するプログラム例は例1、例2を参照して下さい。

明示的リンク法によるDLL関数の呼び出し
(loadLibrary, GetProcAddress 等のAPI関数使用)
 WindowsのLoadLibrary(), GetProcAddress() 等のAPI関数の使用により、ほとんどのプログラム開発環境で、 DLL数値関数ライブラリ集の関数を呼び出し使用できます。

 明示的リンク法では、プログラム実行の中で、必要な時にLoadLibrary()とGetProcAddress()等のWindows標準サポートのAPI関数を使い、(動的に)DLLライブラリから使用したい関数を選び出して動作させます。なお、Visual Basicの場合も、システム内部で暗黙的にこの呼び出し方法を使用しています。

 明示的リンク法でのDLL関数名の書式は、呼び名方式2を使用します。この方式では、製品版「活図」の関数名の先頭に半角 _F_ の3文字を追加し、更に関数名の後に半角文字 @ 及び数字(数字はその関数の引数の合計バイト数を示す)がつき加えたものを使用します。
 例えば、製品版「活図」の関数 val_fx の場合、DLL数値関数ライブラリ集では、引数の合計バイト数が36バイトのため、GetProcAddress()に渡す関数名の書式が _F_val_fx@36となります。

◆明示的リンク法によるDLL関数呼び出しの一般手順
 手順@:まず、Windows API 関数 LoadLibrary() を使って cut32fun.dll をロードします。
 手順A: Windows API 関数 GetProcAddress() を使ってDLL数値関数、例えば_F_val_fx@36、のアドレスポインタ情報を取得します。
 手順B:取得したDLL関数のアドレスポインタ情報を使ってその関数を実行させます。
 手順C:最後では、 Windows API 関数 FreeLibrary() を使って cut32fun.dll を解放します。

 なお、明示的リンク法を使用するプログラム例は例3〜例6を参照して下さい。


Visual Basic & Excel VBAでの使用法
 Visual Basic & Excel VBAでDLL数値関数ライブラリ集を使用する場合、まず Declare 文で呼び出したいDLL数値関数を宣言する必要があります。この時の関数名の指定は、必ず呼び名方式2を使って下さい。Visual Basicのシステムは、 Declare 文の宣言に従い、必要に応じて内部でWindowsのLoadLibrary(), GetProcAddress() 等を使ってDLL関数を呼び出します。

次の式は、製品版「活図」の関数 val_fx場合のDeclare文の宣言例です。
  Declare Function F_val_fx Lib "cut32fun.dll" Alias "_F_val_fx@36" (
     ByVal fx As String,
     ByRef xp As Double,
     ByRef yp As Double,
     ByVal sx As Double,
     ByVal ex As Double,
     ByVal xstep As Double
  ) As Long

 Declare文中の個々の関数引数宣言は、オンラインヘルプやcut32fun.hファイルを調べたうえ、次の表に従ってC言語の変数宣言からVisual Basicの変数宣言に変換する必要があります。
 特に、 DLL数値関数のポインタ型引数にNULLポインタを渡すときは、Visual BasicのDeclare文では ByVal X As Long ( ByVal X As Doubleのままでは、64Bit長の誤りNULLデータを渡してしまうから)を、 VBプログラム中の記述は ByVal 0& を使用するように注意して下さい(例6を参照)。

 なお、プログラム例は例5、例6を参照して下さい。
C言語と VB Declare 文での関数引数宣言の対応関係
Cでの関数引数宣言VB Declare文での関数引数宣言
char * XByVal X As String
int XByVal X As Long
int * XByRef X As Long
double XByVal X As Double
double * XByRef X As Double
double * X (X=NULL時)ByVal X As Long
(X=NULL時、VBプログラム中の記述は ByVal 0& とすること)

例1: C言語、インポートライブラリ法 & バッファ渡し値取得法
#include "cut32fun.h"  // DLL数値関数のヘッダー定義ファイル
.....
void DllCallSamp1_val_fx()  // F_val_fx() 呼出例
{
  int n = F_val_fx("0.7*(1-cos(2*x)*exp(-x))", NULL, NULL, 0.0, 5.0, 0.01);
    // 先ず、引数o_xとo_yにNULLを渡して、XとY結果数値の個数nを取得
  double *xp = new double[n], *yp = new double[n];
    // 次に、XとY結果数値の格納バッファを確保
  F_val_fx("0.7*(1-cos(2*x)*exp(-x))", xp, yp, 0.0, 5.0, 0.01);
    // 最後に、xpとypをDLL関数に渡して、XとYの結果数値をそこに格納してもらう
  .....
  delete xp; delete yp;  // xpとypの解放
}

例2: C言語、インポートライブラリ法 & 値直後取得法
#include "cut32fun.h"  // DLL数値関数のヘッダー定義ファイル
.....
void DllCallSamp2_val_fx()  // F_val_fx() 呼出例
{
  int n = F_val_fx("0.7*(1-cos(2*x)*exp(-x))", NULL, NULL, 0.0, 5.0, 0.01);
    // 引数o_xとo_yにNULLを渡すと、XとY結果数値はDLL内部バッファに保持される
  int nType = F_result_types();
    // 内部保持数値列数の取得(2であることが明白のため、本行は省略可能)

  int nNum = F_result_type_num(0);
    // 内部保持1列目X結果数値の個数取得(nと同じのため、本行は省略可能)
  double *xp = new double[nNum];  // X結果数値の格納バッファを確保
  for(int i = 0; i < nNum; i++) *(xp+i) = F_result_data(0, i);
    // F_result_data()によるX結果数値の順次取得(値直後取得法:その1)

  nNum = F_result_type_num(1);
    // 内部保持2列目Y結果数値の個数取得(nと同じのため、本行は省略可能)
  double *yp = new double[nNum];  // Y結果数値の格納バッファを確保
  double *dp = F_result_buf(1);
    // F_result_buf()によるY結果数値内部保持バッファの先頭ポインタの取得(値直後取得法:その2)
  if(dp != NULL) memcopy(yp, dp, nNum*sizeof(double));
    // Y結果数値をバッファypにコピーする

  .....
  delete xp; delete yp;  // xpとypの解放
}

例3: C言語、明示的リンク法 & バッファ渡し値取得法
void DllCallSamp3_val_fx()  // F_val_fx() 関数の呼出例
{
  HINSTANCE hinstLib = LoadLibrary("cut32fun.dll"); // cut32fun.dll ロード
  if(hinstLib == NULL) return -1;

  typedef int (_stdcall *P_VAL_FX)(const char *,double *,double *,double,double,double);
  P_VAL_FX P_val_fx = (P_VAL_FX)GetProcAddress(hinstLib, "_F_val_fx@36");
    // F_val_fx() 関数のアドレスを取得

  if(P_val_fx != NULL) {  // F_val_fx() 関数を実行
    int n =(P_val_fx)("0.7*(1-cos(2*x)*exp(-x))",NULL,NULL,0.0,5.0,0.01);
      // 先ず、引数o_xとo_yにNULLを渡して、XとY結果数値の個数を取得
    double *xp = new double[n], *yp = new double[n];
      // 次に、XとY結果数値の収納バッファを確保
    (P_val_fx)("0.7*(1-cos(2*x)*exp(-x))", xp, yp, 0.0, 5.0, 0.01);
      // 最後に、xpとypをDLL関数に渡して、XとYの結果数値をそこに格納してもらう

    .....
    delete xp; delete yp;  // xpとypの解放
  }

  .....
  FreeLibrary(hinstLib);  // cut32fun.dll を解放
}

例4: C言語、明示的リンク法 & 値直後取得法
void DllCallSamp4_val_fx()  // F_val_fx() 関数の呼出例
{
  HINSTANCE hinstLib = LoadLibrary("cut32fun.dll"); // cut32fun.dllロード
  if(hinstLib == NULL) return -1;

  typedef int (_stdcall *P_VAL_FX)(const char *,double *,double *,double, double, double);
  P_VAL_FX P_val_fx = (P_VAL_FX)GetProcAddress(hinstLib, "_F_val_fx@36");
    // F_val_fx() 関数のアドレスを取得
  if(P_val_fx != NULL) {  // F_val_fx() 関数を実行
    int n =(P_val_fx)("0.7*(1-cos(2*x)*exp(-x))",NULL,NULL,0.0,5.0,0.01);
      // 引数o_xとo_yにNULLを渡すと、XとY結果数値はDLL内部バッファに保持される

    typedef int (_stdcall *P_RESULT_TYPES)();
    P_RESULT_TYPES P_result_types = (P_RESULT_TYPES)GetProcAddress(hinstLib, "_F_result_types@0");  // F_result_types() 関数のアドレスを取得
    typedef int (_stdcall *P_RESULT_TYPE_NUM)(int);
    P_RESULT_TYPE_NUM P_result_type_num = (P_RESULT_TYPE_NUM)GetProcAddress(hinstLib, "_F_result_type_num@4");
      // F_result_type_num() 関数のアドレスを取得
    typedef double (_stdcall *P_RESULT_DATA)(int, int);
    P_RESULT_DATA P_result_data = (P_RESULT_DATA)GetProcAddress(hinstLib, "_F_result_data@8");  // F_result_data() 関数のアドレスを取得
    typedef double * (_stdcall *P_RESULT_BUF)(int);
    P_RESULT_BUF P_result_buf = (P_RESULT_BUF)GetProcAddress(hinstLib, "_F_result_buf@4");
      // F_result_buf() 関数のアドレスを取得
    if(P_result_types == NULL || P_result_type_num == NULL || P_result_data == NULL || P_result_buf == NULL) return;

    int nType = (P_result_types)();
      // 内部保持数値列数の取得(2であることが明白のため、この関数の呼び出しは省略可能)
    int nNum = (P_result_type_num)(0);       // 内部保持1列目X結果数値の個数取得(nと同じのため、この関数の呼び出しは省略可能)
    double *xp = new double[nNum];
      // X結果数値の格納バッファを確保
    for(int i = 0; i < nNum; i++) *(xp+i) = (P_result_data)(0, i);
      // F_result_data()によるX結果数値の順次取得(値直後取得法:その1)

    nNum = (P_result_type_num)(1);
      // 内部保持2列目Y結果数値の個数取得(nと同じのため、本行は省略可能)
    double *yp = new double[nNum];
      // Y結果数値の格納バッファを確保
    double *dp = (P_result_buf)(1);       // F_result_buf()によるY結果数値内部保持バッファの先頭ポインタの取得(値直後取得法:その2)
    if(dp != NULL) memcopy(yp, dp, nNum*sizeof(double));
      // Y結果数値をバッファypにコピーする

    .....
    delete xp; delete yp;  // xpとypの解放
  }

  .....
  FreeLibrary(hinstLib);  // cut32fun.dll を解放
}

例5: Visual Basic、バッファ渡し値取得法
Declare Function F_val_fx Lib "cut32fun.dll" Alias "_F_val_fx@36" (
    ByVal fx As String,
    ByRef x As Double,
    ByRef y As Double,
    ByVal sx As Double,
    ByVal ex As Double,
    ByVal xstep As Double
  ) As Long

Declare Function F_val_fx_null Lib "cut32fun.dll" Alias "_F_val_fx@36" (
    ByVal fx As String,
    ByVal x As Long,
    ByVal y As Long,
    ByVal sx As Double,
    ByVal ex As Double,
    ByVal xstep As Double
  ) As Long


Sub calc1_val_fx()
  Dim x(400) As Double
  Dim y(400) As Double
  Dim n As Integer
  n = F_val_fx_null("0.7*(1-cos(2*x)*exp(-x))",ByVal 0&,ByVal 0&,0,360, 1)
  If n<400 Then n = F_val_fx("0.7*(1-cos(2*x)*exp(-x))",x(0),y(0),0,360,1)

  .....
End Sub

例6: Visual Basic、値直後取得法
Declare Function F_val_fx_null Lib "cut32fun.dll" Alias "_F_val_fx@36" (
    ByVal fx As String,
    ByVal x As Long,
    ByVal y As Long,
    ByVal sx As Double,
    ByVal ex As Double,
    ByVal xstep As Double
  ) As Long
Declare Function F_result_types Lib "cut32fun.dll" Alias "_F_result_types@0" () As Long
Declare Function F_result_type_num Lib "cut32fun.dll" Alias "_F_result_type_num@4" (
    ByVal No As Long
  ) As Long
Declare Function F_result_data Lib "cut32fun.dll" Alias "_F_result_data@8" (
    ByVal No As Long,
    ByVal nIndex As Long
  ) As Double


Sub calc2_val_fx()
  Dim n As Integer
  n = F_val_fx_null("0.7*(1-cos(2*x)*exp(-x))",ByVal 0&,ByVal 0&,0,360,1)
  Dim No As Integer
  No = F_result_types()

  Dim x(400) As Double
  Dim nNum As Integer
  nNum = F_result_type_num(0)
  If nNum > 400 Then nNum = 400
  For i = 1 To nNum
    x(i) = F_result_data(0,i-1)
  Next i

  Dim y(400) As Double
  nNum = F_result_type_num(1)
  If nNum > 400 Then nNum = 400
  For i = 1 To nNum
    y(i) = F_result_data(1,i-1)
  Next i

  .....
End Sub

Delphi での 使用法
 DelphiでDLL数値計算関数ライブラリを使用したい場合、先ず、DLLを輸入するためのユニットを定義しなくてはいけません。

  unit

  interface

  function F_val_fx(var fx:PChar; xp:^double; yp:^double; sx:double; ex:double; xstep:double):longint;stdcall;

  implementation

  function F_val_fx(var fx:PChar; xp:^double; yp:^double; sx:double; ex:double; xstep:double):longint;
     external 'cut32fun.dll' name '_F_val_fx@36'
  end.


複素数行列について
DLL数値関数ライブラリ集では、(m行×n列)行列aik(i=1,2,・・m;k=1,2, ・・n)を次のように、(2m×n+2)個の倍精度型小数の数値列で表現します。

  ┌ 2×行数m
  │ 列数n
  │ a11実
  │ a12実
  │ ...  1行目実数部
  │ a1n実
  │ a11虚
  │ a12虚
  │ ...  1行目虚数部
  │ a1n虚
  │ a21実
  │ a22実
  │ ...  2行目実数部
  │ a2n実
  │ a21虚
  │ a22虚
  │ ...  2行目虚数部
  │ a2n虚
  │ ...
  │ ...
  │ am1実
  │ am2実
  │ ...  m行目実数部
  │ amn実
  │ am1虚
  │ am2虚
  │ ...  m行目虚数部
  └ amn虚

   計(2m×n+2)個数値


先頭に戻る    Home