補間補間
補間はデータに実行する一般的な数学関数の一つで、Originは2つの方法(1)範囲表記で一つの値とデータセットの補間(2)Xファンクションによる全曲線の補間、で補間をサポートしています。(1)範囲表記で一つの値とデータセットの補間、(2)Xファンクションによる全曲線の補間、で補間をサポートしています。
XY範囲を使う
一度宣言したXY範囲(X値による部分範囲指定を利用可能)は、関数として使うことができます。 この関数への引数はスカラー(スカラーを返す)またはベクター(ベクターを返す)にすることができます。 どちらの場合でも、Xデータセットは単調に増加、減少している必要があります。 例えば:
newbook;
wks.ncols = 4;
col(1) = data(1,0,-.05);
col(2) = gauss(col(1),0,.5,.2,100);
range rxy = (1,2);
rxy(.67)=;
range newx = 3; // 列をX列データとして使用
newx = {0, 0.3333, 0.6667, 1.0}; // 新しいXデータ範囲を作成
range newy = 4; // これは補間する空の列
newy = rxy(newx);
そして、この範囲変数を以下の形式を持つ関数として使うことができます。
XYRangeVariable(RangeVariableOrScalar[,connect[,param]])
ここでconnectは、以下のいずれかを指定します。
- line
- 直線の接続
- spline
- スプライン接続
- bspline
- B-スプライン接続
そして、param はスムージングパラメータで、bspline接続法にのみ適用されます。param=-1の場合、単純なbsplineが使われます。これはプロット内でbspline line接続と同じになります。param >=0の場合、NAG関数 nag_1d_spline_function が使われます。
Note: XY範囲の補間を使うとき、 spline または bspline を接続法として使用する場合、x 値が重複してはいけません。代わりに、補間のXファンクションを使うことができます。
|
ワークシートデータから
次のサンプルは、関数として範囲を使い、ワークシートからのデータを引数として補間を実行する方法を示します。
サンプル1:
次のコードは、bsplineのさまざまなスムージングパラメータの使用法を紹介します。
col(1)=data(1,9); // 列1に行番号を入力
col(2)=normal(9); // 列2に乱数を入力
col(3)=data(1,9,0.01); // 希望のX値でCol(3)に入力
wks.col3.type = 4;
range bb=(1,2); // cols 1,2を使用する範囲を宣言;
// 異なるパラメータ設定を使って補間した値を計算
loop(i, 4, 10) {
wcol(i)=bb(col(3), bspline, $(i*0.1));
}
サンプル2:
XY範囲を使って、次のようなコードを使ってどんなX値からでもY値のデータを取得することができます。
// いくつかのデータを生成
newbook;
wcol(1)={1, 2, 3, 4};
wcol(2)={2, 3, 5, 6};
// XY範囲を定義
range rr =(1,2);
// 線形補間で指定してX値に対するY値を探す
rr(1.23) = ; // ANS: rr(1.23)=2.23
// 線形補間でX値の配列に対してY値を探す
wcol(3)={1.5, 2.5, 3.5};
range rNewX = col(3);
// 計算したY値を保持する新しい列を追加する
wks.addcol();
wcol(4) = rr(rNewX);
サンプル3:
指定したY値に対するX値を探す場合、上記の例の引数を逆にします。 YからXを探す場合、Yデータセットが単調に増加または減少している必要があります。
// いくつかのデータを生成
newbook;
wcol(1)={1, 2, 3, 4};
wcol(2)={2, 3, 5, 6};
// XY範囲を定義
range rr =(2,1); //XとYを入れ替え
// 線形補間で指定したY値に対するX値を探す
rr(2.23) = ; // ANS: rr(2.23)=1.23;
// 計算したX値を保持する新しい列を追加
wks.addcol();
range rNewX = wcol(3);
// 線形補間でY値の配列に対するX値を探す
wcol(4)={2.5, 3.5, 5.5};
range rNewY = wcol(4);
rNewX = rr(rNewY);
グラフから
グラフページがアクティブなときに範囲補間を使うこともできます。
サンプル1:
配列の値の補間
// アクティブプロットの範囲を定義
range rg = %C;
// 線形で使ったスカラー値に対する補間
rg(3.54)=;
// 配列の値に対する補間
// 新しいX値の位置を与える:
range newX = [Book2]1!1;
// 新しいY値(出力)が行くべき場所を与える:
range newY = [Book2]1!2;
// 新しいY値を計算する:
newY = rg(newX);
サンプル2:
補間法を指定します。
// 指定したプロットの範囲を定義
range -wx rWx = 2; // アクティブレイヤの2番目のプロットのX値を使う
range -w rWy = 2; // アクティブレイヤで2プロット目のYを使用
range rr = (rWx,rWy); // 2つの範囲からXY範囲を構築
// 新しいX値の出力場所を定義
range newX = [Book2]1!1;
newX = {5,15,25};
range newY1 = [Book2]1!2; // 新しいYの範囲
range newY2 = [Book2]1!3; // 新しいYの範囲
// 線形補間でX値の配列に対する新しいYの値を探す
newY1 = rr(newX);
// bspline補間でX値の配列に対する新しいYの値を出力
newY2 = rr(newX,bspline);
任意のデータセットを使う
単調増加または減少している同じサイズの2つの任意データセットに対して、2つのデータセットを補間し、片方のデータセットにおける補間値を与える事で、もう片方のデータセットの補間値を出力できます。データセットは範囲変数、データセット変数、列にすることができます。このような補間を実行する形式は次の通りです。
dataset1(value, dataset2)
これは、dataset2 と dataset1で構築されるXYデータのグループを補間し、与えられたX (dataset2) 値.での Y (dataset1) 値を返します。例えば、
// データセットを使う
dataset ds1 = {1, 2, 3, 4};
dataset ds2 = {2, 3, 5, 6};
// ds1のXが1.23での補間された値をds2に返す
ds2(1.23, ds1) = ; // 2.23を返す
// ds2のXが5.28での補間した値をds1に返す
ds1(5.28, ds2) = ; // 3.28を返す
// 範囲を使う
newbook;
wks.ncols = 3;
range r1 = 2; // アクティブワークシートの列2
r1 = {1, 2, 3, 4};
range r2 = 3; // アクティブワークシートの列3
r2 = {2, 3, 5, 6};
r2(1.23, r1) = ;
r1(5.28, r2) = ;
// 列を使う
col(3)(1.23, col(2)) = ;
col(2)(5.28, col(3)) = ;
補間曲線を作成する
曲線補間用のXファンクション
Originには、XYデータを補間して、新しい出力XYデータを作成する3つのXファンクションがあります。
既存のXデータセットを使用
以下の例は、既存のXデータセットを使って補間したY値を探すものです。
// 指定した列の属性を持つ新しいワークブックを作成
newbook sheet:=0;
newsheet cols:=4 xy:="XYXY";
// サンプルデータファイルをインポート
fname$ = system.path.program$ + "Samples\Mathematics\Interpolation.dat";
impasc;
// col(3)のX値でcol(1) と col(2) のデータを補間
range rResult=col(4);
interp1 ix:=col(3) iy:=(col(1), col(2)) method:=linear ox:=rResult;
//元のデータと結果をプロット
plotxy iy:=col(2) plot:=202 color:=1;
plotxy iy:=rResult plot:=202 color:=2 size:=5 ogl:=1;
均一で等間隔なX出力
次のサンプルは、均一で等間隔なX値を出力として生成し、補間を実行します。
//新しいワークブックを作成し、データファイルをインポート
fname$ = system.path.program$ + "Samples\Mathematics\Sine Curve.dat";
newbook;
impasc;
//列2でデータを補間
interp1xy iy:=col(2) method:=bspline npts:=50;
range rResult = col(3);
//元のデータと結果をプロット
plotxy iy:=col(2) plot:=202 color:=1;
plotxy iy:=rResult plot:=202 color:=2 size:=5 ogl:=1;
非単調データを補間
次のサンプルはX値が単調でないデータに対してトレース補間を実行します。
//新しいワークブックを作成し、データファイルをインポート
fname$ = system.path.program$ + "Samples\Mathematics\circle.dat";
newbook;
impasc;
//トレース補間で列2の循環データを補間
interp1trace iy:=Col(2) method:=bspline;
range rResult= col(4);
//元のデータと結果をプロット
plotxy iy:=col(2) plot:=202 color:=1;
plotxy iy:=rResult plot:=202 color:=2 size:=1 ogl:=1;
補間のXファンクションは、入力データのX範囲の外側にあるY値を補外するのに使用することもできます。
行列の補間
minterp2 Xファンクションは、行列の補間/補外を実行するのに使うことができます。
// 新しい行列ブックを作成し、サンプルデータをインポート
newbook mat:=1;
filepath$ = "Samples\Matrix Conversion and Gridding\Direct.dat";
string fname$=system.path.program$ + filepath$;
impasc;
// 元のXおよびYデータサイズの10倍で行列を補間
range rin = 1; // 入力データで行列をポイント
int nx, ny;
nx = rin.ncols * 10;
ny = rin.nrows * 10;
minterp2 method:=bicubic cols:=nx rows:=ny ;
OriginProは、 interp3 Xファンクションも提供しており、これは、4次の散布データを補間するのに使うことができます。
|