準備中
Qiitaのブログにもまとめているので、こちらもご参照ください。
HPではもう少し細かい情報までまとめていきたいと思っています。
2変数の離散データの書き方はネット上でも簡単に見つかるのですが、3変数になると、なかなか良いリンクが見つかりませんでした。
私のお勧めはこちらのリンクです。
上記リンクの"Table3:XYZ Format"でデータを与えてみます。
具体的には以下のような形でデータを与えています。
# x y z
0.249402768 2.759875858 7.67911652
0.982415773 4.417552518 20.47991102
1.70574064 2.403588299 8.68678793
2.424333709 2.615355897 12.71748044
3.273830003 3.587892959 23.59093886
3.107301641 3.458134639 21.61401877
2.554010616 1.34484958 8.331590679
・
・
・
こちらの数値はz=x^2+y^2に対して、x,yを0~5の乱数で与え、zに0.0000001×乱数の誤差を与えただけのデータなので、特に意味ある数値ではないですが、テストに上記のデータを実験データとしてプロットしてみます。
.datファイルではなく、テキスト形式で読み込みます。
Cドライブの直下に"Fitting"フォルダを作成し、その下に、Sample3D.txtファイルを作成して、上記のような適当なXYZデータを書き込みます。
まずは、なにも装飾なしで、読み込んだデータをただプロットします。
splot 'C:\Fitting\Sample3D.txt'
ちょっと味気ないですが、ひとまず下図のように3Dplotができることは確認できました。
上記のようにひとまずプロットはできたものの、プロットの点数が思ったより少なかったので、どうも曲面のイメージが掴みにくいですね。
フィッティングをするためにはデータの大まかな動きを把握しておいた方が良いので、プロットではなく、曲面の形が見たいところです。
調べた所、離散的に分布しているデータから滑らかな曲面を生成するコマンドがあるようなので、各コマンドで曲面を生成してみます。
コマンドは"qnorm"と"splines"の2種類があるようです。(こちらのリンクを参照しました)
qnormは、格子点と入力データの距離に応じた重みづけを行うようです。
ひとまずなにも考えず上記リンクのコマンドを真似てプロットしてみます。
set dgrid3d 20,20 qnorm 1
splot 'C:\\Fitting\\Sample3D.txt' with lines
今回x^2+y^2に近いプロットをしているはずなので、どうも本来の曲面を表現できているとは言い難いですね。
確かに乱数分の誤差を与えたので、データにばらつきはありますが、たかだか大きくて1E-7程度なので、もう少し滑らかな曲線を作ってくれるかと思ったのですが、、、。
もう一度こちらのリンクの説明文を、少し真面目に見てみます。
dgrid3dの使い方としては、以下のように書かれています。
set dgrid3d {
{ splines |
qnorm {
(gauss | cauchy | exp | box | hann) {
dgrid3dの次に書かれている2つの数字は、x、yの格子数、qnormの後ろの数字が距離に対する乗数のようで、重み付け関数を特に指定しない場合は、1/{(格子点からの距離)^(norm)}で重み付けを行うようです。
つまり上記の例では、20×20の格子が生成し、各点のzの値は1/{(格子点からの距離)^(norm)}で重み付けされているようです。
(さらに細かく言うと、距離はdx、dyでnormalizeされるようですが、今回dx、dy入力しない=1なので、ひとまず置いておきます)
今回入力したデータのx,yは0~5の乱数なので、それぞれ5に近い数字まで生成していたとすると、大体格子間隔は5/20で0.25程度となります。
norm=1としているので、各データと格子間の距離に応じて重み付けされているはずです。少しデータが多いので、さらにシンプルな例で検証してみます。
set dgrid3d splines splot 'C:\\Fitting\\Sample3D.txt' with lines やはりsplineがきれいですね。 当サイトに不具合、ご意見等ございましたらCEsolutionにお知らせください。 splines