MATLAB Language
MATLABによる補間
サーチ…
構文
- zy = interp1(x、y);
- zy = interp1(x、y、 'method');
- zy = interp1(x、y、 '方法'、 '外挿');
- zy = interp1(x、y、zx);
- zy = interp1(x、y、zx、 'method');
- zy = interp1(x、y、zx、 '方法'、 '外挿');
区分的補間2次元
データを初期化します。
[X,Y] = meshgrid(1:2:10);
Z = X.*cos(Y) - Y.*sin(X);
次に、補間したい点を設定します。
[Vx,Vy] = meshgrid(1:0.25:10);
最近の補間を実行できるようになりました。
Vz = interp2(X,Y,Z,Vx,Vy,'nearest');
線形補間、
Vz = interp2(X,Y,Z,Vx,Vy,'linear');
3次補間
Vz = interp2(X,Y,Z,Vx,Vy,'cubic');
またはスプライン補間:
Vz = interp2(X,Y,Z,Vx,Vy,'spline');
区分的補間1次元
次のデータを使用します。
x = 1:5:50;
y = randi([-10 10],1,10);
x
、 x
とy
はデータ点の座標、 z
は情報が必要な点です。
z = 0:0.25:50;
zのy値を求める1つの方法は、区分的線形補間です。
z_y = interp1(x,y,z,'linear');
これにより、2つの隣接する点の間の線を計算し、点がそれらの線の要素であると仮定することによってz_y
を得る。
interp1
は最近傍補間のような他のオプションも提供しますが、
z_y = interp1(x,y,z, 'nearest');
次の補間、
z_y = interp1(x,y,z, 'next');
以前の補間、
z_y = interp1(x,y,z, 'previous');
形状を保持した区分的3次補間、
z_y = interp1(x,y,z, 'pchip');
3次コンボリューション、z_y = interp1(x、y、z、 'v5cubic');
スプライン補間
z_y = interp1(x,y,z, 'spline');
これにより、近似、次および前の補間による区分的な一定の補間が行われる。
多項式補間
補間したいデータを初期化します。
x = 0:0.5:10;
y = sin(x/2);
これは、区間[0,10]のデータの基礎となる関数が正弦波であることを意味します。近似多項式の係数は次のように計算されます。
p1 = polyfit(x,y,1);
p2 = polyfit(x,y,2);
p3 = polyfit(x,y,3);
p5 = polyfit(x,y,5);
p10 = polyfit(x,y,10);
x
、xはデータ点のx値とy
値、そして第3の数は多項式の次数/次数です。補間関数を計算するグリッドを次のように設定します。
zx = 0:0.1:10;
y値を計算する:
zy1 = polyval(p1,zx);
zy2 = polyval(p2,zx);
zy3 = polyval(p3,zx);
zy5 = polyval(p5,zx);
zy10 = polyval(p10,zx);
多項式の次数が増加すると、サンプルの近似誤差が小さくなることが分かります。
この例における直線の近似は、より大きな誤差を有するが、このインターバルでは、3次多項式は、洞の関数に近似する。
5次と10次の多項式による補間には、近似誤差がほとんどありません。
しかし、サンプル外のパフォーマンスを考慮すると、あまりにも高すぎるとオーバーフィットする傾向があり、したがってサンプルのパフォーマンスが悪くなることがあります。我々は設定した
zx = -10:0.1:40;
p10 = polyfit(X,Y,10);
p20 = polyfit(X,Y,20);
そして
zy10 = polyval(p10,zx);
zy20 = polyval(p20,zx);
プロットを見てみると、サンプル・アウトのパフォーマンスは、オーダー1
程度が増すにつれて悪化し続けます。