数値の補間方法について

89 ビュー (過去 30 日間)
GeekField
GeekField 2021 年 9 月 3 日
コメント済み: Hernia Baby 2021 年 9 月 11 日
ある行に数値が20点入ります。
しかし、未知数の箇所が20点内にところどころで9点あり、その未知数を求めたいのです。
直線補間とスプライン補間の両方を行いたいのですが、それぞれどのような構文を記載すればよいでしょうか?
直線補間は全体が直線上に数値が並ぶのではなく、既知と既知の間をそれぞれ線形補間を行いたいです。
スプライン補間については未知数を挟む既知だけでは計算ができないと思うので、ある程度周辺の値を利用して補間を行いたいです。
また、CSVファイル内の行の指定から教えていただけると幸いです。
同様に、列についても教えていただきたいです。
よろしくお願いいたします。

採用された回答

Hernia Baby
Hernia Baby 2021 年 9 月 3 日
まずは csvread で表を読み込みます
A = csvread('test.csv');
x = A(:,2);
y = A(:,3);
interp1 で 0 ~ 20まで 20点分の内挿を行います
y1が線形補間、y2がスプライン補間です
x1 = linspace(0,20,20)';
y1 = interp1(x, y, x1);
y2 = interp1(x, y, x1,'spline');
プロットします
figure
hold on
plot(x,y,'o')
plot(x1,y1,':.')
plot(x1,y2,'--')
  5 件のコメント
GeekField
GeekField 2021 年 9 月 9 日
ご丁寧に解説いただきありがとうございます。
当方プログラミングそのものが始めたばかりであり、
If  や For 構文も使い方は多少分かっているつもりではございますが、実際に活用するとなると『?』となってしまいます。
解説してくださった元のCSVファイルをお見せいただくことは可能でしょうか?
私のCSVと照らし併せながら活用させていただきたいと思います。
よろしくお願いいたします。
Hernia Baby
Hernia Baby 2021 年 9 月 11 日
コメント遅れました。ごめんなさい。
このコメント内で使っているデータはcsvファイルを読み込んでいません。
以下の行で作っています。
これは i 番目の行に j = 1~15 番目の数字をA(i, j )に入れてます
そして j の処理が終わったら i + 1で同様の処理をさせてます
t = 1:9;
Fs = 20;
f = 1:15;
for i = t
for j = f
A(i,j) = sin(2*pi/Fs.*i.*j);
end
end
これはワークスペース内の変数をクリックすると構成を見ることができます
以下のように「;」つけずに変数を直打ちしても出るっちゃ出ますが、変数を見たほうが便利です
A
A = 9×15
0.3090 0.5878 0.8090 0.9511 1.0000 0.9511 0.8090 0.5878 0.3090 0.0000 -0.3090 -0.5878 -0.8090 -0.9511 -1.0000 0.5878 0.9511 0.9511 0.5878 0.0000 -0.5878 -0.9511 -0.9511 -0.5878 -0.0000 0.5878 0.9511 0.9511 0.5878 0.0000 0.8090 0.9511 0.3090 -0.5878 -1.0000 -0.5878 0.3090 0.9511 0.8090 0.0000 -0.8090 -0.9511 -0.3090 0.5878 1.0000 0.9511 0.5878 -0.5878 -0.9511 -0.0000 0.9511 0.5878 -0.5878 -0.9511 -0.0000 0.9511 0.5878 -0.5878 -0.9511 -0.0000 1.0000 0.0000 -1.0000 -0.0000 1.0000 0.0000 -1.0000 -0.0000 1.0000 0.0000 -1.0000 -0.0000 1.0000 0.0000 -1.0000 0.9511 -0.5878 -0.5878 0.9511 0.0000 -0.9511 0.5878 0.5878 -0.9511 -0.0000 0.9511 -0.5878 -0.5878 0.9511 0.0000 0.8090 -0.9511 0.3090 0.5878 -1.0000 0.5878 0.3090 -0.9511 0.8090 0.0000 -0.8090 0.9511 -0.3090 -0.5878 1.0000 0.5878 -0.9511 0.9511 -0.5878 -0.0000 0.5878 -0.9511 0.9511 -0.5878 -0.0000 0.5878 -0.9511 0.9511 -0.5878 -0.0000 0.3090 -0.5878 0.8090 -0.9511 1.0000 -0.9511 0.8090 -0.5878 0.3090 0.0000 -0.3090 0.5878 -0.8090 0.9511 -1.0000
csv形式でほしい場合は別途考えますのでコメントお願いします

サインインしてコメントする。

その他の回答 (0 件)

カテゴリ

Help Center および File Exchange内挿 についてさらに検索

製品


リリース

R2021a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!