Mathematics | ![]() ![]() |
多項式近似
人口データの近似の最初の試みは、簡単な多項式近似です。この処理には2つのMATLAB関数が用意されています。
関数 |
詳細 |
|
多項式近似 |
|
多項式近似値の計算 |
MATLABの関数polyfit
は、与えられたデータセットに対して設定した次数の"最良の近似と言う意味(最小二乗の意味)"の多項式です。次数4の多項式は、
p = polyfit(cdate,pop,4) Warning: Matrix is close to singular or badly scaled. Results may be inaccurate. RCOND = 5.429790e-20 p = 1.0e+05 * 0.0000 -0.0000 0.0000 -0.0126 6.0020
関数polyfit
は、非常に大きな値をもつ行列(この計算の中で、Vandermonde行列を作成します。詳細は、polyfit
ファイルを参照してください)に対して基底としてcdate値を使っているので、ワーニングが表示されます。cdate
値の広がりは、スケーリング問題になります。これを取り扱う1つの方法は、cdate
データを正規化する方法です。
前処理:データの正規化
正規化は、連続的な数値計算の精度を改良するデータセットの中の数値をスケーリングする過程です。cdate
を正規化する方法は、平均をゼロ、標準偏差を1になるようにスケーリングすることです。
sdate = (cdate - mean(cdate))./std(cdate)
正規化されたデータを使って、4次多項式モデルで計算してみましょう。
p = polyfit(sdate,pop,4) p = 0.7047 0.9210 23.4706 73.8598 62.2285
正規化したデータ(年代)で近似多項式値を計算し、観測データ点に対してプロットします。
pop4 = polyval(p,sdate); plot(cdate,pop4,'-',cdate,pop,'+'), grid on
データを正規化する他の方法は、解に関するある知識と単位を使うことです。例えば、このデータセットを使って、1790年のデータをゼロに設置することでも、満足のいく結果を出力します。
![]() | ケーススタディ:カーブフィッテング | 残差の解析 | ![]() |