0

次のベクトルとしましょう:

[1.2 2.13 3.45 4.59 4.79]

そして、多項式関数を取得したいと思います。たとえばf、このデータに適合するとします。したがって、私はのようなもので行きたいですpolyfit。ただし、polyfit最小二乗誤差の合計を最小化します。しかし、私が欲しいのは

f(1)=1.2 f(2)=2.13 f(3)=3.45 f(4)=4.59 f(5)=4.79

つまり、フィッティング アルゴリズムを操作して、既に与えた正確なポイントと、正確な値が与えられていないいくつかのフィッティング値が得られるようにしたいと考えています。どうやってやるの?

4

4 に答える 4

1

誰もが要点を見失っていると思います。「つまり、フィッティング アルゴリズムを操作して、正確なポイントと、正確なフィッティングが存在しないいくつかのフィッティング値が得られるようにしたいのですが、どうすればそれを行うことができますか?」とあなたは言いました。

私にとって、これは、リストされたセットに対して正確な (補間) 適合を希望し、他のいくつかの点については、最小二乗適合を行いたいことを意味します。

LSQLINを使用して、ポイントに一連の等式制約を設定して正確に適合させ、残りのポイントを最小二乗法で適合させることにより、これを行うことができます。

問題は、これには高次の多項式が必要になることです。5 点とその他の点を正確に適合させるには、多項式の次数をかなり高くします。高次の多項式、特に制約のある点を持つ多項式は厄介なことをします。ただし、悪い結果が予想される限り、自由にやりたいことをしてください。

編集:より良い選択は、最小二乗スプラインを使用することです。これは、特定のポイントセットを通過するように制約できるものであり、最小二乗の意味で他のポイントをフィッティングしますが、ワイルドでクレイジーなことはしません。結果として。

于 2012-03-01T21:29:16.490 に答える
0

Polyfit は、あなたが望むことを行います。N-1 次の多項式は N 個の点に正確に適合できるため、2 乗誤差の合計を最小化すると 0 になります (これが目的です)。

y=[1.2 2.13 3.45 4.59 4.79];
x=[1:5];
coeffs = polyfit(x,y,4);

すべてのポイントを通過する多項式を取得します。

于 2012-03-01T18:20:21.613 に答える
0

What you ask is known as Lagrange Interpolation . There is a MATLAB file exchange available. http://www.mathworks.com/matlabcentral/fileexchange/899-lagrange-polynomial-interpolation
However, you should note that least squares polynomial fitting is generally preferred to Lagrange Interpolation since the data you have in principle will have noise in it and Lagrange Interpolation will fit the noise as well as the data you have. So if you know that your data actually represents M dimensional polynomial and have N data, where N>>M, then you will have a order N polynomial with Lagrange.

于 2012-03-01T18:21:13.870 に答える
0

オプションがあります。

  1. polyfit を使用して、正確なフィットを実行するのに十分な余裕を持たせてください。あれは:

    values = [1.2 2.13 3.45 4.59 4.79];
    p = polyfit(1:length(values), values, length(values)-1);
    

    polyval(p,2)  %returns 2.13
    
  2. 内挿/外挿を使用

    values = [1.2 2.13 3.45 4.59 4.79];
    xInterp = 0:0.1:6;
    valueInterp = interp1(1:length(values), values, xInterp ,'linear','extrap');
    

    補間は、平滑化、外挿などの多くのオプションを提供します。たとえば、次を試してください。

    valueInterp = interp1(1:length(values), values, xInterp ,'spline','extrap');
    
于 2012-03-01T18:24:41.623 に答える