2次元座標でスプライ​ン補間した結果を3次​元座標で表現すること​は可能でしょうか?

24 Ansichten (letzte 30 Tage)
克仁
克仁 am 7 Okt. 2022
Kommentiert: Hernia Baby am 8 Nov. 2022
二次元(xy座標)の離散データをsplineで補間した際
その結果を”Z=0の補完したデータ”として扱い、他のデータをZ=1の場合…、また他のデータをZ=2の場合…、といった風に複数の補間した曲線を三次元(xyz座標)で表現することは可能でしょうか?また、x軸方向からも行い(y軸を縦方向と考えた場合)、メッシュ状に表現することは可能でしょうか?
x = [-2 -1.5 -1 -0.5 0 0.5 1 1.5 2];
y = [1.83 10.5 36.7 77.8 100 77.8 36.7 10.5 1.83];
cs = spline(x,[0 y 0]);
xx = linspace(-2,2,101);
plot(x,y,'o',xx,ppval(cs,xx),'-');
これだと二次元で表示されるので、それをZ=0などの数値を与えて三次元的に表現できないでしょうか
教えていただけると幸いです。
  2 Kommentare
Hernia Baby
Hernia Baby am 11 Okt. 2022
> ”Z=0の補完したデータ”として扱い、他のデータをZ=1の場合…、また他のデータをZ=2の場合…、
ここの詳細教えてください。
x(:,ii) = [-2 -1.5 -1 -0.5 0 0.5 1 1.5 2]';
y(:,ii) = [1.83 10.5 36.7 77.8 100 77.8 36.7 10.5 1.83]';
cs = spline(x,[0 y 0]);
xx = linspace(-2,2,101);
z(:,ii) = ppval(cs,xx);
上記のながれで ii が @克仁さんのいう Z に対応してますか?
そうすると x と y は行列になりますが、これらはベクトルでしょうか?
克仁
克仁 am 17 Okt. 2022
Bearbeitet: 克仁 am 18 Okt. 2022
表現が拙く申し訳ございません。
私がやりたいことといたしまして、平面から離散的にデータが取れる状態にあり(点データの位置、つまりxy座標とその場所のスカラー量、こいつをz成分としたい)、それらのデータをスプライン補間して3次元的に表現したいと考えています。例えば、y=0上にあるxとzのデータをスプライン補間、y=1、y=2…という風に行い、また今度はx方向を固定し同じことを行い、結果的にgriddataに出て来る例のように表示したいと考えています。
MATLABの例で上がっているものでgriddataが一番やりたい形なのですが、補間方法にスプライン補間がなく、また例として挙がっているものは点データがランダムであることからあまり参考にできずにいます。
plot3を使うのか、など考えましたが詰まっています。
MATLAB自体最近使い始めたので、行列とベクトルの違いに確信は持てませんが、たぶんベクトルだと思います。最初に書いたコードはsplineの例で出てきたコードのx、yの中をいじっただけです。xyの中身はそれぞれの値に対する座標として認識していました。
これで私のやりたいことが伝わっていると幸いです。返信遅れて申し訳ございません。

Melden Sie sich an, um zu kommentieren.

Akzeptierte Antwort

克仁
克仁 am 8 Nov. 2022
Bearbeitet: 克仁 am 8 Nov. 2022
最低限やりたいことはできたのでコードの共有をします。スプライン補間を三次元的に表現したものとなります。
%z=-2でのデータ
x = [-2 -1 0 1 2];
y = [0.03 0.67 1.83 0.67 0.03];
xx = -2:.25:2;
yy = spline(x,y,xx);
x9= xx;
y9= -2*ones(1,17);
z9= yy;
plot3(x9,y9,z9,'-','Color','b','MarkerSize',10,...
'MarkerFaceColor','#D9FFFF')
hold on
%z=-1でのデータ
x = [-2 -1 0 1 2];
y = [0.67 13.53 36.78 13.53 0.67];
xx = -2:.25:2;
yy = spline(x,y,xx);
x8= xx;
y8= -1*ones(1,17);
z8= yy;
plot3(x8,y8,z8,'-','Color','b','MarkerSize',10,...
'MarkerFaceColor','#D9FFFF')
hold on
%z=0でのデー
x = [-2 -1 0 1 2];
y = [1.83 36.78 100 36.78 1.83];
xx = -2:.25:2;
yy = spline(x,y,xx);
x0=xx;
y0=zeros(1,size(xx,2));
z0=yy;
plot3(x0,y0,z0,'-','Color','b','MarkerSize',10,...
'MarkerFaceColor','#D9FFFF')
hold on
%z=1でのデータ
x = [-2 -1 0 1 2];
y = [0.67 13.53 36.78 13.53 0.67];
xx = -2:.25:2;
yy = spline(x,y,xx);
x1=xx;
y1=ones(1,17);
z1=yy;
plot3(x1,y1,z1,'-','Color','b','MarkerSize',10,...
'MarkerFaceColor','#D9FFFF')
hold on
%z=2でのデータ
x = [-2 -1 0 1 2];
y = [0.03 0.67 1.83 0.67 0.03];
xx = -2:.25:2;
yy = spline(x,y,xx);
x2=xx;
y2=2*ones(1,17);
z2=yy;
plot3(x2,y2,z2,'-','Color','b','MarkerSize',10,...
'MarkerFaceColor','#D9FFFF')
  2 Kommentare
Hernia Baby
Hernia Baby am 8 Nov. 2022
すみません、回答できてませんでしたね…
cell型を利用すればコンパクトに行えます
データを作成します
x = [-2 -1 0 1 2];
xx = -2:.25:2;
y{1} = [0.03 0.67 1.83 0.67 0.03];
y{2} = [0.67 13.53 36.78 13.53 0.67];
y{3} = [1.83 36.78 100 36.78 1.83];
y{4} = [0.67 13.53 36.78 13.53 0.67];
y{5} = [0.03 0.67 1.83 0.67 0.03];
yを補間します
yy = cellfun(@(Y) spline(x,Y,xx),y,'UniformOutput',false);
データをまとめます
x1 = xx;
y1 = num2cell((-2:2)'.*ones(1,17), 2);
z1 = yy';
図示します。
figure
hold on
cellfun(@(Y,Z) plot3(x1,Y,Z,'-',...
'Color','b','MarkerSize',10,...
'MarkerFaceColor','#D9FFFF'),y1,z1,'UniformOutput',false);
hold off
view(3)
Hernia Baby
Hernia Baby am 8 Nov. 2022
もしくは interp2 を使ってもいいかもしれませんね
[X,Y] = meshgrid(-2:2);
Z = [0.03 0.67 1.83 0.67 0.03
0.67 13.53 36.78 13.53 0.67
1.83 36.78 100 36.78 1.83
0.67 13.53 36.78 13.53 0.67
0.03 0.67 1.83 0.67 0.03];
xだけ細かくします
[X1,Y1] = meshgrid(-2:.25:2,-2:2);
補間します
Z1 = interp2(X,Y,Z,X1,Y1,'spline');
図示します
figure
hold on
for ii = 1:height(X1)
plot3(X1(ii,:),Y1(ii,:),Z1(ii,:) ...
,'-','Color','b','MarkerSize',10 ...
,'MarkerFaceColor','#D9FFFF')
end
hold off
view(3)

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Kategorien

Mehr zu 内挿 finden Sie in Help Center und File Exchange

Produkte


Version

R2022b

Community Treasure Hunt

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

Start Hunting!