polyfit
多項式の曲線近似
説明
例
三角関数の多項式近似
[0,4*pi]
の区間内で正弦曲線に沿って等間隔に分布する 10 個の点を生成します。
x = linspace(0,4*pi,10); y = sin(x);
polyfit
を使用して 7 次の多項式を点にあてはめます。
p = polyfit(x,y,7);
より細かいグリッド上で多項式を計算して結果をプロットします。
x1 = linspace(0,4*pi); y1 = polyval(p,x1); figure plot(x,y,'o') hold on plot(x1,y1) hold off
点の集合の多項式近似
[0,1]
の区間内で等間隔に配置された 5 つの点のベクトルを作成し、それらの点で を評価します。
x = linspace(0,1,5); y = 1./(1+x);
4 次の多項式をこの 5 つの点にあてはめます。一般に n
個の点に対して、それらの点を正確に通過する n-1
次の多項式をあてはめられます。
p = polyfit(x,y,4);
0 と 2 の間のより細かい点のグリッド上で、元の関数と多項式近似を計算します。
x1 = linspace(0,2); y1 = 1./(1+x1); f1 = polyval(p,x1);
元の関数の値と多項式近似をより広い区間 [0,2]
でプロットし、多項式近似を求めるために使用した点を円で強調表示します。多項式近似は元の [0,1]
の区間では良好ですが、この区間の外側では近似させた関数から急速に離れています。
figure plot(x,y,'o') hold on plot(x1,y1) plot(x1,f1,'r--') legend('y','y1','f1')
誤差関数の多項式近似
最初に、区間 [0,2.5]
で等間隔に分布する x
個の点からなるベクトルを作成し、これらの点で erf(x)
を評価します。
x = (0:0.1:2.5)'; y = erf(x);
6 次の近似多項式の係数を求めます。
p = polyfit(x,y,6)
p = 1×7
0.0084 -0.0983 0.4217 -0.7435 0.1471 1.1064 0.0004
近似の程度を見るために、データ点で多項式を計算し、データ、近似値、誤差を表示する表を生成します。
f = polyval(p,x); T = table(x,y,f,y-f,'VariableNames',{'X','Y','Fit','FitError'})
T=26×4 table
X Y Fit FitError
___ _______ __________ ___________
0 0 0.00044117 -0.00044117
0.1 0.11246 0.11185 0.00060836
0.2 0.2227 0.22231 0.00039189
0.3 0.32863 0.32872 -9.7429e-05
0.4 0.42839 0.4288 -0.00040661
0.5 0.5205 0.52093 -0.00042568
0.6 0.60386 0.60408 -0.00022824
0.7 0.6778 0.67775 4.6383e-05
0.8 0.7421 0.74183 0.00026992
0.9 0.79691 0.79654 0.00036515
1 0.8427 0.84238 0.0003164
1.1 0.88021 0.88005 0.00015948
1.2 0.91031 0.91035 -3.9919e-05
1.3 0.93401 0.93422 -0.000211
1.4 0.95229 0.95258 -0.00029933
1.5 0.96611 0.96639 -0.00028097
⋮
この区間内では、内挿値と実際の値は、かなり一致しています。この区間の外側で外挿値が実際のデータからどの程度急速に離れるのかを見るためにプロットを作成します。
x1 = (0:0.1:5)'; y1 = erf(x1); f1 = polyval(p,x1); figure plot(x,y,'o') hold on plot(x1,y1,'-') plot(x1,f1,'r--') axis([0 5 0 2]) hold off
センタリングとスケーリングを使用した数値特性の改善
1750 ~ 2000 年の人口のデータのテーブルを作成し、データ点をプロットします。
year = (1750:25:2000)'; pop = 1e6*[791 856 978 1050 1262 1544 1650 2532 6122 8170 11560]'; T = table(year, pop)
T=11×2 table
year pop
____ _________
1750 7.91e+08
1775 8.56e+08
1800 9.78e+08
1825 1.05e+09
1850 1.262e+09
1875 1.544e+09
1900 1.65e+09
1925 2.532e+09
1950 6.122e+09
1975 8.17e+09
2000 1.156e+10
plot(year,pop,'o')
3 出力の polyfit
を使用し、センタリングとスケーリングを使用して 5 次の多項式をあてはめます。これにより問題の数値特性が向上します。polyfit
は year
のデータを 0 にセンタリングし、標準偏差が 1 になるようにスケーリングします。これにより近似計算において悪条件のヴァンデルモンド行列を避けることができます。
[p,~,mu] = polyfit(T.year, T.pop, 5);
polyval
を 4 入力で使用し、p
をスケーリングされた年 (year-mu(1))/mu(2)
に対して評価します。結果を元の年に対してプロットします。
f = polyval(p,year,[],mu); hold on plot(year,f) hold off
単純な線形回帰
単純な線形回帰モデルを、一連の離散 2 次元データ点に近似します。
サンプル データ点のベクトル (x,y) をいくつか作成します。1 次多項式をデータに近似します。
x = 1:50; y = -0.3*x + 2*randn(1,50); p = polyfit(x,y,1);
近似多項式 p
を x
の点で評価します。その結果得られる線形回帰モデルをデータでプロットします。
f = polyval(p,x); plot(x,y,'o',x,f,'-') legend('data','linear fit')
誤差推定を含む線形回帰
線形モデルでデータ点セットを近似し、95% の予測区間の推定を含めて結果をプロットします。
サンプル データ点のベクトル (x,y) をいくつか作成します。polyfit
を使用して、1 次多項式でデータを近似します。線形近似の係数と誤差推定値の構造体を返す 2 つの出力を指定します。
x = 1:100; y = -0.3*x + 2*randn(1,100); [p,S] = polyfit(x,y,1);
x
の各点で p
の 1 次多項式近似を評価します。polyval
の 3 番目の入力として誤差推定の構造体を指定し、標準誤差の推定値を計算します。標準誤差の推定値は delta
に返されます。
[y_fit,delta] = polyval(p,x,S);
元のデータ、線形近似、および 95% の予測区間 をプロットします。
plot(x,y,'bo') hold on plot(x,y_fit,'r-') plot(x,y_fit+2*delta,'m--',x,y_fit-2*delta,'m--') title('Linear Fit of Data with 95% Prediction Interval') legend('Data','Linear Fit','95% Prediction Interval')
入力引数
x
— クエリ点
ベクトル
クエリ点。ベクトルとして指定します。x
の点は、y
に含まれる近似された関数の値に対応します。x
がベクトルでない場合、polyfit
はそれを列ベクトル x(:)
に変換します。
x
が同じ点 (またはほぼ同じ点) を含む場合または x
のセンタリングやスケーリングが必要になる可能性がある場合には、警告メッセージが出力されます。
データ型: single
| double
複素数のサポート: あり
y
— クエリ点における近似値
ベクトル
クエリ点における近似値。ベクトルとして指定します。y
の値は、x
に含まれるクエリ点に対応します。y
がベクトルでない場合、polyfit
はそれを列ベクトル y(:)
に変換します。
データ型: single
| double
複素数のサポート: あり
n
— 多項式近似の次数
正の整数スカラー
多項式近似の次数。正の整数スカラーとして指定します。n
は、p
の最も左の係数の、多項式のべき乗を指定します。
出力引数
p
— 最小二乗近似多項式の係数
ベクトル
最小二乗近似多項式の係数。ベクトルとして返されます。p
の長さは n+1
で、最大べき乗が n
である多項式の係数を降べきの順に含みます。x
または y
のいずれかに NaN
値が含まれ、n < length(x)
である場合、p
のすべての要素が NaN
です。データのセンタリングとスケーリングを行うために 3 つの出力引数を指定した場合、polyfit
は、データのセンタリングとスケーリングを行わない場合とは異なる係数を p
に返します。
クエリ点における p
を評価するには、polyval
を使用します。
S
— 誤差推定の構造体
構造体
誤差推定の構造体。このオプションの出力構造体は、主に誤差推定を得るために関数 polyval
への入力として使用します。S
には次のフィールドが含まれています。
フィールド | 説明 |
---|---|
R | x のヴァンデルモンド行列の QR 分解によって得られる (置換されている可能性がある) 三角 R 因子 |
df | 自由度 |
normr | 残差のノルム |
データ y
がランダムな場合、p
の共分散行列の推定は、(Rinv*Rinv')*normr^2/df
になります。ここで、Rinv
は R
の逆行列です。
y
のデータの誤差が一定の分散をもつ独立した正規分布の場合、関数 [y,delta] = polyval(...)
は少なくとも予測の 50% を含む誤差範囲を出力します。つまり y
± delta
の範囲には、x
において予想される将来の観測値の 50% 以上が含まれます。
mu
— センタリング値とスケーリング値
2 要素ベクトル
センタリング値とスケーリング値。2 要素ベクトルとして返されます。mu(1)
は mean(x)
、mu(2)
は std(x)
です。これらの値は、x
のクエリ点が単位標準偏差をもち、ゼロ センタリングされるために使用されます。
mu
を polyval
への 4 番目の入力として使用すると、スケーリングされた点 (x - mu(1))/mu(2)
で p
を計算します。
制限
多くの点をもつ問題に対して
polyfit
を使用して多項式近似の次元数を増やしても、より優れた近似が得られるとは限りません。高次の多項式はデータ点の間で振動する場合があり、データの "より劣った" 近似になる場合があります。このような場合は、低次の多項式近似 (点の間がより滑らかになる傾向がある) や別の手法を問題に応じて使用します。多項式は本質的に非有界の振動関数です。このため、有界のデータや、単調増加または単調減少するデータの外挿にはあまり適していません。
アルゴリズム
polyfit
は x
を使用して n+1
列および m = length(x)
行のヴァンデルモンド行列 V
を形成し、次の線形方程式を導きます。
polyfit
はこれを p = V\y
によって解きます。ヴァンデルモンド行列の列はベクトル x
のべき乗であるため、V
の条件数は高次の近似の場合にはしばしば大きくなり、結果として特異係数行列になります。このような場合、センタリングとスケーリングによって方程式の数値特性が向上し、信頼性の高い近似が得られる場合があります。
拡張機能
tall 配列
メモリの許容量を超えるような多数の行を含む配列を計算します。
C/C++ コード生成
MATLAB® Coder™ を使用して C および C++ コードを生成します。
スレッドベースの環境
MATLAB® の backgroundPool
を使用してバックグラウンドでコードを実行するか、Parallel Computing Toolbox™ の ThreadPool
を使用してコードを高速化します。
この関数はスレッドベースの環境を完全にサポートしています。詳細については、スレッドベースの環境での MATLAB 関数の実行を参照してください。
GPU 配列
Parallel Computing Toolbox™ を使用してグラフィックス処理装置 (GPU) 上で実行することにより、コードを高速化します。
この関数は GPU 配列を完全にサポートしています。詳細については、GPU での MATLAB 関数の実行 (Parallel Computing Toolbox)を参照してください。
分散配列
Parallel Computing Toolbox™ を使用して、クラスターの結合メモリ上で大きなアレイを分割します。
この関数は分散配列を完全にサポートしています。詳細については、分散配列を使用した MATLAB 関数の実行 (Parallel Computing Toolbox)を参照してください。
バージョン履歴
R2006a より前に導入
MATLAB コマンド
次の MATLAB コマンドに対応するリンクがクリックされました。
コマンドを MATLAB コマンド ウィンドウに入力して実行してください。Web ブラウザーは MATLAB コマンドをサポートしていません。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)