<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />測定 (PAR ポテンシオスタットを使用したサイクリック ボルタンメトリー) から得られた 2 つの列 X と Y で構成されるデータセットがあります。 残念ながら、X の間隔は等しくなく (0.0005 ~ 0.0015 の間で変化します)、機器のソフトウェアはこれを修正できません。 データをリサンプリングまたは内挿して、X 方向に例えば 0.001 の等間隔を取得したいと考えています。 早くできる方法はありますか?
あなたの質問に対する答えは、x 値がどの程度不規則であるか、そして「補間」が正確に何を意味するかによって異なります。
したがって、以下のスクリプトは決して推奨ではなく、可能なことの一例にすぎません。 スクリプトが必要ない場合は、同様の手順を手動で実行できるはずです。
おそらく、重要な問題は、最終的な値を何に使用するかということです。
名前デフォルトここへ( 1 ) ;
// (0) 特定の関数を使用して等間隔のデータを作成します
h =関数( {バツ} 、 {デフォルトのローカル} 、 0.5 + 0.4 *罪( 2 *円周率() *バツ) ) ;
N = 100 ; // [0,1] 内の (等間隔の) x 値の数
xVals =索引( 0 、 1 、 1 / ( N - 1 ) ) `; // x 値を列ベクトルとして
yVals = h ( xVals ) + J ( N 、 1 、ランダム ノーマル( 0 、 0.1 ) ) ; // y 値を列ベクトルとして
// (1) データの 4 分の 3 をランダムに間引き、不均等な x 値をシミュレートします (ただし元のグリッド上にあります)
デル=ランダムインデックス( N 、ラウンド( 3 * N / 4 、 0 )) ;
xVals [デル] = [] ;
yVals [デル] = [] ;
dt =新しいテーブル( 「凹凸×」 、
新しい列( "バツ" 、数値、継続的、価値観( xVals )) 、
新しい列( 「はい」 、数値、継続的、価値観( yVals ))
) ;
// (2) カーネルをスムースにフィットさせ、予測式を保存する
ビブ= dt <<二変量( Y ( : y ) 、バツ( :バツ) ) ;
ビブ<<カーネル スムーザー( 1 、 1 、 0.48261 、 0 、 {予測式の保存}) ;
// (3) 予測式を取得する
pフォーム=カラム( dt 、 「黄土の予言者 for y」 ) << getプロパティ( "式" ) ;
// (4) 等間隔の x 値を保持する新しいテーブルを構築する
CMD =エクスプレッション(
dt2 =新しいテーブル( 「偶数×」 、
新しい列( "バツ" 、数値、継続的) 、
新しい列( 「予想通りだ」 、数値、継続的、式(未定))
)
) ;
代入( CMD 、エクスプレッション(未定) 、 EvalExpr ( pフォーム)) ;
CMD ;
// (5) シミュレートされた測定データを 2 つのベクトルに取得します
xVals =カラム( dt 、 "バツ" ) << GetAsMatrix ;
yVals =カラム( dt 、 「はい」 ) << GetAsMatrix ;
// (6) データ内の最小の x 増分を見つけます。
xデル=分( xVals [ 2 :: Nロウ( xVals )] - xVals [ 1 :: ( Nロウ( xVals ) - 1 )]) ;
// (7) 等間隔、たとえば 3*xDel を使用して補間されたデータをテーブルに埋めます。
xVals2 =索引( 0 、 1 、 3 * xデル) `;
カラム( dt2 、 "バツ" ) <<値の設定( xVals2 ) ;
// (8) 結果を見てください
dt2 <<グラフビルダー(
サイズ( 534 、 454 ) 、
コントロールパネルを表示( 0 ) 、
変数(バツ( :バツ) 、 Y ( :予測y ) ) 、
要素(ポイント(バツ、 Y 、伝説( 5 ) ) )
) ;