[解決済み] MATLABによる差分の分割
2022-02-25 23:17:21
質問
ニュートンの差分法(遡及版)を行っています。 ここで しかし、この部分に問題があります。
for j=1:n
for i=n:-1:j
d(i)=(d(i)-d(i-1))/(x(i)-x(i-j));
end
end
d(0)を使わないでこの処理を始めるには?
これまで試行錯誤してきました。
for j=1:n
for i=n:-1:j+1
d(i)=(d(i)-d(i-1))/(x(i)-x(i-j));
end
end
これが助けになることを願っています(私は誰かの検証が必要なだけです):)。
<ブロッククオート <ブロッククオート以下はコード全体です :)
n=15;
t=-5:5;
d=zeros(1,n);
x=linspace(-5,5,n);
for i=1:n
> d(i)=1/(1+x(i)^2);
end
>
> for j=1:n
> for i=n:-1:j+1
> d(i)=(d(i)-d(i-1))/(x(i)-x(i-j));
>
> end
> end
>
>
> disp('The coefficients are:')
disp(d)
私の成績
15個の係数を計算すると、次のような多項式になります。
5つの係数を持つ
詳細
補間多項式をプロットしたいので、実際のコード全体はこんな感じです。
n = 15;
t = -5:5;
d = zeros(1,n+1);
x = linspace(-5,5,n+1);
for i = 1:n+1
d(i)=1/(1+x(i)^2);
end
for j = 1:n
for i = n+1:-1:j+1
d(i) = (d(i)-d(i-1))/(x(i)-x(i-j));
end
end
disp('The coefficients are:')
disp(d)
x_1=linspace(-5,5,30);
y_1=d(1)+...
d(2).*(x_1-x(1))+...
d(3).*(x_1-x(1)).*(x_1-x(2))+...
d(4).*(x_1-x(1)).*(x_1-x(2)).*(x_1-x(3))+...
d(5).*(x_1-x(1)).*(x_1-x(2)).*(x_1-x(3)).*(x_1-x(4))+...
d(6).*(x_1-x(1)).*(x_1-x(2)).*(x_1-x(3)).*(x_1-x(4)).*(x_1-x(5))+...
d(7).*(x_1-x(1)).*(x_1-x(2)).*(x_1-x(3)).*(x_1-x(4)).*(x_1-x(5)).*(x_1-x(6))+...
d(8).*(x_1-x(1)).*(x_1-x(2)).*(x_1-x(3)).*(x_1-x(4)).*(x_1-x(5)).*(x_1-x(6)).*(x_1-x(7))+...
d(9).*(x_1-x(1)).*(x_1-x(2)).*(x_1-x(3)).*(x_1-x(4)).*(x_1-x(5)).*(x_1-x(6)).*(x_1-x(7)).*(x_1-x(8))+...
d(10).*(x_1-x(1)).*(x_1-x(2)).*(x_1-x(3)).*(x_1-x(4)).*(x_1-x(5)).*(x_1-x(6)).*(x_1-x(7)).*(x_1-x(8)).*(x_1-x(9))+...
d(11).*(x_1-x(1)).*(x_1-x(2)).*(x_1-x(3)).*(x_1-x(4)).*(x_1-x(5)).*(x_1-x(6)).*(x_1-x(7)).*(x_1-x(8)).*(x_1-x(9)).*(x_1-x(10))+...
d(12).*(x_1-x(1)).*(x_1-x(2)).*(x_1-x(3)).*(x_1-x(4)).*(x_1-x(5)).*(x_1-x(6)).*(x_1-x(7)).*(x_1-x(8)).*(x_1-x(9)).*(x_1-x(10)).*(x_1-(x(11)))+...
d(13).*(x_1-x(1)).*(x_1-x(2)).*(x_1-x(3)).*(x_1-x(4)).*(x_1-x(5)).*(x_1-x(6)).*(x_1-x(7)).*(x_1-x(8)).*(x_1-x(9)).*(x_1-x(10)).*(x_1-(x(11))).*(x_1-x(12))+...
d(14).*(x_1-x(1)).*(x_1-x(2)).*(x_1-x(3)).*(x_1-x(4)).*(x_1-x(5)).*(x_1-x(6)).*(x_1-x(7)).*(x_1-x(8)).*(x_1-x(9)).*(x_1-x(10)).*(x_1-(x(11))).*(x_1-x(12)).*(x_1-x(13))+...
d(15).*(x_1-x(1)).*(x_1-x(2)).*(x_1-x(3)).*(x_1-x(4)).*(x_1-x(5)).*(x_1-x(6)).*(x_1-x(7)).*(x_1-x(8)).*(x_1-x(9)).*(x_1-x(10)).*(x_1-(x(11))).*(x_1-x(12)).*(x_1-x(13)).*(x_1-x(14))+...
d(16).*(x_1-x(1)).*(x_1-x(2)).*(x_1-x(3)).*(x_1-x(4)).*(x_1-x(5)).*(x_1-x(6)).*(x_1-x(7)).*(x_1-x(8)).*(x_1-x(9)).*(x_1-x(10)).*(x_1-(x(11))).*(x_1-x(12)).*(x_1-x(13)).*(x_1-x(14)).*(x_1-x(15));
z_1=1./(1+(x_1).^2);
disp('Our differences are:')
disp(z_1-y_1)
plot(x_1,y_1)
が、これでは非常に不格好なので、多項式 y_1 を for ループに入れたい :)
どのように解決するのですか?
これは非常に一般的なインデックスの問題です。インデックスを1つずらすだけで解決できます。このとき、d(1)は以前のd(0)であることを覚えておく必要があります(数学のテキストで見るd(0)と同じです)。数学は同じで、インデックスが違うだけです。
n = 15;
t = -5:5;
d = zeros(1,n+1); % Give d one more element. The math notation d(0):d(15) will be equivalent to d(1):d(16) here.
x = linspace(-5,5,n+1);
for i = 1:n+1
d(i)=1/(1+x(i)^2);
end
for j = 1:n
for i = n+1:-1:j+1 % Also shift i by 1 because you use this to index d.
d(i) = (d(i)-d(i-1))/(x(i)-x(i-j));
end
end
これはあくまでインデックス問題を回避する方法を示すための例です。数学的な妥当性はご自身で検証してください。
コードの最後の部分は、再帰的な関数呼び出しを使用することができます。
function y = ff(ii)
if ii > 0
y = ff(ii-1) + d(ii+1).*(x_1-x(ii));
else
y = d(1);
end
end
ii = 1の時に分かると思います。
y = ff(1) = ff(0) + d(2).*(x_1-x(1)) = d(1) + d(2).*(x_1-x(1));
で、ii = 2のとき。
y = ff(2) = ff(1) + d(3).*(x_1-x(2)) = d(1) + d(2).*(x_1-x(1)) + d(3).*(x_1-x(2))
などなど...
関連
-
[解決済み] ある行列から固有ベクトルの異なる解を得ることができるでしょうか?
-
[解決済み] matlabで補強行列を作成し、縮小行エシュロン形式を作成する。
-
[解決済み] Matlabのstrcat関数が空白を含んでいる場合のトラブル
-
[解決済み] MATLABでカラーバーのスケールを制御する
-
[解決済み] Matlab - 連立方程式を解くときにvpasolveエラーが発生する
-
[解決済み] パーフカーブで1つの値を返す - matlab
-
[解決済み] グラフ理論 Matlab BFSアルゴリズム
-
[解決済み] Ax = B の形の行列を解く ==> エラー。行列が特異に近い、またはスケールが悪い
-
[解決済み] Matlabでεの機械値を求める
-
[解決済み] RGBカラーによるMATLABプロット
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Matlabのstrcat関数が空白を含んでいる場合のトラブル
-
[解決済み] Matlabでcorr2関数を説明する
-
[解決済み] グラフと関係のないカスタム凡例を追加する
-
[解決済み] Wolfram AlphaとMATLABでは伝達関数のプロットが異なる
-
[解決済み] Matlabで固有ベクトルを正しくプロットする
-
[解決済み] MATLABで関数のパラメータにデフォルト値を設定するにはどうすればよいですか?
-
[解決済み] 1変数に対するfzeroとfsolveの差分
-
[解決済み] Matlabで'symfun'によって記号関数の微分を実装するには?
-
[解決済み] 入力引数が多すぎる Matlab ode45
-
[解決済み] MATLABのコードヘルプです。バックワードオイラー法