区間ごとに関数でフィットする

内容

  1. 1 サマリー
  2. 2 学習する項目
  3. 3 サンプルとステップ
    1. 3.1 関数を定義する
    2. 3.2 曲線をフィットする

サマリー

このチュートリアルでは、区間毎のフィット関数を定義する方法を説明します。

必要なOriginのバージョン:8.0 SR6

学習する項目

このチュートリアルでは、以下の項目について説明します。

  • 区間(条件)のフィット関数を定義する

サンプルとステップ

\Samples\Curve Fitting\Exponential Decay.datファイルをインポートして、このチュートリアルを開始します。列Dを選択し、散布図をプロットします。Growth/Sigmoidalカテゴリーにある多くの組込関数を使ってこの曲線をフィットできますが、このチュートリアルでは、区間関数で曲線を2つの区間に分けます。

image:Tutorial_Fitting_with_Piecewise_Functions_001.png

関数式は次のようなものです。

y = \begin{cases} a+bx+e^{-\frac{x-x_c}{t1}}, & \mbox{if } x<x_c \\ a+bx, & \mbox{if } x \ge x_c \end{cases}

関数を定義する

F9を押し、フィット関数オーガナイザを開き、以下のように関数を定義します。

   
関数名: piecewise
実現方式: ユーザ定義
独立変数: x
従属変数: y
パラメータの名前: xc, a, b, t1
定義形式: Origin C
関数:  

関数編集ボックスの右にあるボタンImage:User-Defined Fitting Functions-2.png をクリックし、コードビルダで次のようにフィット関数を定義します。

void _nlsfpiecewise(
// フィットパラメータ:
double xc, double a, double b, double t1,
// 独立変数:
double x,
// 従属変数:
double& y)
{
        // 編集可能部分の開始
        // if条件で、曲線を分ける
        if(x<xc) {
                y = a+b*x+exp(-(x-xc)/t1);
        } else {
                y = a+b*x;
        }
        // 編集可能部分の終了
}

曲線をフィットする

Ctrl + Y を押すと、グラフウィンドウをアクティブにしてNLFitダイアログが開きます。定義した piecewise 関数を選択し、次の値でパラメータを初期化します。

   
xc: 1
a: 1
b: -1
t1: 0.1

フィット」ボタンをクリックし、結果を生成します。

   
xc: 0.24
a: 36.76585
b: -24.62876
t1: 0.04961

Note: この関数は、xct1に敏感で、異なる初期値を使うと結果も異なります。