polyfit
matlabの関数を使用して、線形最小二乗多項式をデータに適合させています。私が読んだところによると、これは標準の多項式基底(単項式基底)を使用しています。チェビシェフ多項式基底を使用して近似すると、数値の安定性が向上することを読みました。これを実行したいと思います。matlabにはこのオプションがありますか?
2 に答える
ここでは、第 1 種チェビシェフ多項式が必要であると仮定します。私の知る限り、Matlab にはこれが組み込まれていません。ただし、自分でコーディングするのは簡単です。チェビシェフ多項式は [-1,1] でのみ定義されるため、最初に x データをこの範囲にマップする必要があります。次に、再帰関係を使用してチェビシェフ多項式を生成しますhttp://en.wikipedia.org/wiki/Chebyshev_polynomials#Definition
T_(n+1)(x) = 2xT_(n)x - T_(n-1)(x)
x
横座標とデータ ポイントが次数多項式近似y
の観測行列A
(単項基底の Vandermonde 行列と同等) を生成する場合:n
n = degree;
m = length(x);
%% Generate the z variable as a mapping of your x data range into the
%% interval [-1,1]
z = ((x-min(x))-(max(x)-x))/(max(x)-min(x));
A(:,1) = ones(m,1);
if n > 1
A(:,2) = z;
end
if n > 2
for k = 3:n+1
A(:,k) = 2*z.*A(:,k-1) - A(:,k-2); %% recurrence relation
end
end
b
次に、行列除算を使用して、ソリューションパラメーター(近似係数)の線形システムを解くことができます
b = A \ y
ここで覚えておかなければならないことは、近似を評価するときは、評価する前に値を間隔 [-1,1] にマッピングする必要があるということです。x
係数は、近似のために指定した初期範囲でのみ有効です。x
初期範囲外では、(有効な意味で) 近似を評価することはできません。そのようにしたい場合は、データよりも広い間隔を使用する必要があります。そのように、変換を使用してその内部にポイントをマッピングすると、ポイントは常に[-1,1]にあるため、近似の評価は有効です.
私はしばらくmatlabを使用していないので、新しいバージョンには実際にこれらすべてを実行する機能が組み込まれている可能性があります。私が最後に使用したときはそうではありませんでした。他のすべてが失敗した場合、上記の方法でチェビシェフ基底(第 1 種)を使用して最小二乗多項式近似を生成できます。
Chebfunツールボックスを探していると思います。とりわけ、チェビシェフ点とチェビシェフ内挿を使用してpolyfit関数をオーバーロードします。
上記の次に、これをいつでも自分でコーディングできます。それほど難しいことではありません。編集: mathematician1975 の投稿を参照してください:)。EDIT2: chebfun ウェブサイトを更新しました。