Xファンクションのレポートデータサンプル

内容

  1. 1 サマリー
  2. 2 学習する項目
  3. 3 ステップ
  4. 4 Xファンクションを実行する

サマリー

このサンプルでは、複数XYデータセットを取得し、それぞれについて線形フィットを実行してフィットデータを新しい結果シートに出力します。

出力データ型はReportTreeのとき、ダイアログには、再計算コンボボックスが表示され、レポートシートの再計算モードを「手動」、「自動」、「なし」にセットできます。

学習する項目

  1. 複数XYデータセットで動作する方法
  2. 再計算の鍵付きの新しい結果シートにデータをレポートする方法

ステップ

  1. F10キーをおして、Xファンクションビルダを開き、Xファンクションの名前と変数を下図のように入力して、保存Ocguide xfdialog savebutton.pngをクリックします。
    OCguide xf example FitLinearReport.png
  2. このXファンクションをコードビルダで開き、ソースコードを編集します。まず、以下のように必要なヘッダファイルを含めます。
    #include <ReportTree.h> // ReportTableクラスに必要
            
  3. //put your own support static functions hereという行の下に、必要なマクロを追加します。このマクロは、Xファンクションのメイン関数で使用されます。
    // ID はどの値でも良いが、固有である必要がある
    #define TABLE_ID                        1
    #define SUBNODE_ID_BEGIN        1000
            
  4. Xファンクションのメイン関数FitLinearReportに以下のコードを追加し、指定したデータ範囲からXYデータを取得し、それぞれ線形フィットしてレポートシートを作成します。
    // レポート表を作成
    ReportTable     rt;     
    rt = rd.CreateTable("ReportData", "Fitted Data", TABLE_ID);   
    int nSubID = SUBNODE_ID_BEGIN;
     
    DWORD dwRules = DRR_GET_DEPENDENT | DRR_NO_FACTORS;
    int nNumData = iy.GetNumData(dwRules);
     
    for(int nRange = 0; nRange < nNumData; nRange++)
    {
            DataRange drOne;
            iy.GetSubRange(drOne, dwRules, nRange);
     
            vector vx, vy;
            drOne.GetData(dwRules, 0, NULL, NULL, &vy, &vx);
     
            // 線形フィットには、2つのパラメータが存在
            FitParameter sFitParameter[2];           
            if( STATS_NO_ERROR == ocmath_linear_fit(vx, vy, 
                                     vy.GetSize(), sFitParameter) )
            {
                    // フィットXデータをレポート表に追加
                    string strName = "X" + (nRange+1);
                    string strLongName = "X";
                    rt.AddColumn(vx, strName, nSubID++, strLongName,
                                    OKDATAOBJ_DESIGNATION_X);
     
                    // フィットYデータを計算
                    double dIntercept = sFitParameter[0].Value;
                    double dSlope = sFitParameter[1].Value;                        
                    vector vFitY;
                    vFitY = vx * dSlope + dIntercept;                        
     
                    // フィットYデータをレポート表に追加
                    strName = "Y" + (nRange+1);
                    string strRange;
                    strRange = drOne.GetDescription(GETLC_COL_LN_ONLY);                 
                    strLongName = "Fitted data on " + strRange;
                    rt.AddColumn(vFitY, strName, nSubID++, strLongName, 
                                    OKDATAOBJ_DESIGNATION_Y);
            }
    }

Xファンクションを実行する

  1. ワークシートにOriginExePath\Samples\Curve FittingフォルダのLinear Fit.datファイルをインポートします。
  2. 全ての列を選択して、スクリプトウィンドウでFitLinearReport -d を実行すると、以下のようなダイアログが開きます。
    Ocguide xfdialog FitLinearReport display.png
  3. デフォルトのまま、OKボタンをクリックします。3つのグループフィッティングXYデータセットのレポートシートが生成されます。

    Ocguide xfdialog FitLinearReport result.png