多項式補間を行うコードを書き込もうとしていますが、うまくいきません。私は学生で、Matlab でコード形式で再作成するために、このビデオhttps://www.youtube.com/watch?v=VpI-wC94RKwのロジックに従っていますが、作成しようとするたびにビデオに示されているマトリックスの独自のバージョンでは、代わりにほぼゼロで埋められたマトリックスが得られます (1 つの要素を除く)。なぜこれが起こっているのか理解できません。
私のコード:
x=[150, 200, 300, 500, 1000, 2000, 99999]';
y=[2, 3, 4, 5, 6, 7, 8]';
function f = interPoly(x,y)
% Skapar en matris A var varje rad är [x_1^6, x_1^5,..., 1] till [x_n^6, x_n^5,..., 1]
A = [x.^6 x.^5 x.^4 x.^3 x.^2 x ones(numel(x),1) y];
% Gaussar matris A
R = rref(A);
% Plockar sista kolumnen ur R
c = R(:,end);
f = c(1)*x.^6+c(2)*x.^5+c(3)*x.^4+c(4)*x.^3+c(5)*x.^2+c(6)*x+c(7);
end
(ここで問題となっているのは行列「A」です。最終的に取得した関数も、値としてゼロで埋められています。また、コメントがスウェーデン語で申し訳ありません)
x と y に 7 つの値があるため、6 次の多項式になりますが、最後から 2 番目の列の定数がどうあるべきかよくわかりません。ロジックについては少し不明です)。
とにかく、他の入力データで同じ関数を使用してみましたが、うまくいきました。
代替入力データ:
x=[0, 0.5, 1, 1.5, 2, 2.99, 3]';
y=[0, 0.52, 1.09, 1.75, 2.45, 3.5, 4]';
要素がオーバーフローしたためにゼロが表示されますか (たとえば、99999^6 は非常に大きな数値です)。ここで何が起こっているのか、なぜ別の入力データのセットでうまく機能しているのかがよくわかりません。ヘルプ?
ありがとう!
編集:このタスクの全体的なポイント(私の学校から提供されたもの)は、「最小二乗」法(コードを書いたが投稿していない)を多項式補間法(上記のコードのもの)と比較することです。上記の「x」の最後の値は無限大 (f(inf)=8) であると想定されているため、非常に大きな数値に置き換えただけで、「均等に」分散されません。これを行うより良い方法はありますか?