数値の補間方法について

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

Accepted Answer

Hernia Baby
Hernia Baby on 3 Sep 2021
まずは 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 Comments
GeekField
GeekField on 9 Sep 2021
ご丁寧に解説いただきありがとうございます。
当方プログラミングそのものが始めたばかりであり、
If  や For 構文も使い方は多少分かっているつもりではございますが、実際に活用するとなると『?』となってしまいます。
解説してくださった元のCSVファイルをお見せいただくことは可能でしょうか?
私のCSVと照らし併せながら活用させていただきたいと思います。
よろしくお願いいたします。
Hernia Baby
Hernia Baby on 11 Sep 2021
コメント遅れました。ごめんなさい。
このコメント内で使っているデータは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形式でほしい場合は別途考えますのでコメントお願いします

Sign in to comment.

More Answers (0)

Categories

Find more on 内挿 in Help Center and File Exchange

Products


Release

R2021a

Community Treasure Hunt

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

Start Hunting!