Tutorial-Mathematical-Analysis
微分、積分、補間、複数曲線の平均化などのOriginの多くの数学的解析ツールは、LabTalkスクリプトからアクセスできます。これらの分析のほとんどには、1つ以上のXファンクションがに関連付けられており、多くのコマンド、オブジェクト、または算術演算子がこれらのXファンクションの実装として機能します。
数学的分析を実行する場合、ユーザ入力での値を使用してさらに計算するための対話型ダイアログを作成すると便利な場合があります。
このチュートリアルでは、以下の項目について解説します。
// 新規ブックを作成し、Waterfallと名前付け(ロングネームとショートネーム両方) newbook name:="Waterfall" option:=lsname; // ファイル名とフィルタ名を定義 string fname$ = system.path.program$ + "Samples\Graphing\Waterfall.dat"; string filtername$ = "waterfall.oif"; // Xファンクションimpfileを使用して、インポートフィルタで指定ファイルをインポート impfile fname:=fname$ filtername:=filtername$ location:=data orng:=[Waterfall]1!;
// SubtractedDataという名前の新しいシートを作成 newsheet name:=SubtractedData; ///新しく作成したワークシート(現在アクティブ)を範囲変数として定義 range sdwk = !; //Waterfallワークシートを名前でアクティブ化 page.active$ = "Waterfall"; //Waterfallシートの列数を保持する積分を定義 int nc = wks.nCols; //SubtractedDataシートの列数も同様に設定 sdwk.nCols = nc; //ループとXファンクションsubtract_lineを使用してベースラインを減算 //最初と最後のデータポイントを検出して、線形に接続 //この線はをソースデータからベースラインとして差し引く //減算データは、ソースデータの励起波長で名前付け loop(ii, 2, nc) { range rx = [Waterfall]Waterfall!col(1); range ry = [Waterfall]Waterfall!col($(ii)); subtract_line iy:=[Waterfall]Waterfall!(1,$(ii)) x1:=rx[1] /* 最初の点のX値を指定*/ y1:=ry[1] /* 最初の点のY値を指定*/ x2:=rx[$(wks.maxRows)] /* 最後の点のX値を指定*/ y2:=ry[$(wks.maxRows)] /* 最後の点のY値を指定*/ oy:=[Waterfall]SubtractedData!(1,$(ii)); //SubtractedDataシートの列のロングネームを変更 //Waterfall シートでユーザ定義パラメータ Wavelengthを使用 [Waterfall]SubtractedData!col($(ii))[L]$ = [Waterfall]Waterfall!col($(ii))[D1]$ + "nm"; }
//参照ピーク位置のX値についてユーザ入力を取得するためのダイアログを作成 double xx;//初期値を与える //getnダイアログを作成 int n; getn (Use Specified Reference Peak for Normalization) n:2s (Reference Peak Position X Value) xx (If not specified, the data will be normalized based on maximum Y value);
// Normalizedというワークシートを作成 //前のワークシートと同じ列数に設定 newsheet name:=Normalized cols:=nc outname:=sname1$; //SubtractedDataワークシートの列Aと同じデータを列Aに入力 range r1 = col(1); range r2 = [Waterfall]SubtractedData!col(1); r1 = r2; if(n==0)/*"Use Specified Reference Peak for Normalization"を選択していない場合*/ { loop(ii, 2, nc) { //Xファンクションrnormalizeを使用して列を正規化 rnormalize -r 2 irng:=[Waterfall]SubtractedData!col($(ii)) method:=max /*「最大値による除算」を正規化方法として使用 */ orng:=%(sname1$)col($(ii)); wks.col = ii; col($(ii))[L]$ = [Waterfall]Waterfall!col($(ii))[D1]$ + "nm"; } } if(n==1)/*"Use Specified Reference Peak for Normalization"を選択した場合*/ { loop(ii, 2, nc) { range rr=[Waterfall]SubtractedData!(1,$(ii)); //指定されたXのY値を補間で計算 double yy = rr(xx); // Xファンクションrnormalizeで列を正規化 rnormalize -r 2 irng:=[Waterfall]SubtractedData!col($(ii)) method:=specify /*正規化方法として「指定値で除算」を使用*/ val:=yy /*補間により計算されたY値を基準値として使用*/ orng:=%(sname1$)col($(ii)); wks.col = ii; col($(ii))[L]$ = [Waterfall]Waterfall!col($(ii))[D1]$ + "nm"; } }
range()構文を除き、interp1 (XからYを補間)、 interp1q (線形補間と補外)、iinterp1xy (XYデータのグループに対する1D補間/補外) など、いくつかのXファンクション使って補間できます。
//正規化データをグループ化折れ線グラフとしてプロット。凡例なし plotxy iy:=(1,2:end) plot:=200 legend:=0;
win -a Waterfall; //Avecurveという名前の新しいシートを作成 newsheet name:=Avecurve; //ループを使用して、4 つの曲線ごとに平均を計算 for(ii=2; ii<nc; ii=ii+4) { avecurves -r 2 iy:=%(sname1$)(1,$(ii):$(ii+4)) rd:=[Waterfall]Avecurve!col($(ii/2)); }
// Avecurveワークシート全体を選択 worksheet -s 0 0 0 0; //グループ化折れ線としてアクティブな範囲をプロット plotxy plot:=200 legend:=0;