離散点の流線の表示
10 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
Ryota Kobayashi
le 30 Avr 2020
Réponse apportée : Ryota Kobayashi
le 6 Mai 2020
初学者です.
以下のような離散点のベクトル分布の表示は出来るのですが,これらを流線でつなぐことに苦労しております.
アドバイスをお願い致します.
〇データのサンプル
位置座標(x,y)
ベクトル成分(u,v)
x y u v
-5.962731664E-20, 1.222600000E-01, 1.015245670E-01, 2.703176021E-01
-2.730629758E-04, 1.223873224E-01, 1.767483465E-01, 2.366670314E-01
-5.473406056E-04, 1.225152111E-01, 1.951194702E-01, 2.120557251E-01
-8.231614298E-04, 1.226438194E-01, 1.981463266E-01, 2.020150697E-01
-1.098073810E-03, 1.227720041E-01, 2.019696265E-01, 1.947334165E-01
-1.373855385E-03, 1.229005941E-01, 2.133377823E-01, 2.118655201E-01
-1.648460662E-03, 1.230286356E-01, 2.150505966E-01, 2.054816282E-01
-1.924210978E-03, 1.231572111E-01, 1.999315308E-01, 1.708878617E-01
-2.199271944E-03, 1.232854650E-01 2.010232258E-01, 1.849475885E-01
-2.474703466E-03, 1.234138918E-01, 1.875819806E-01, 2.136792789E-01
4 commentaires
Akira Agata
le 5 Mai 2020
添付頂いたデータを確認してみましたが、同じ (x,y) 座標に対して異なる (u,v) の値が格納されているデータが、いくつかあるようです。下記はその一例です。とりあえず (x,y) が重複しているデータは、重複のどちらか一方を除いて流線でつなぐ、という方針で良いでしょうか?(もし可能であれば、重複を除去済みのデータを提供頂けると助かります)
x y u v
_____ _______ _______ ________
0.122 -0.0972 0.0222 -0.0207
0.122 -0.0972 -0.0602 -0.00339
Réponse acceptée
Akira Agata
le 6 Mai 2020
さっそく対象データを提供頂き、ありがとうございます。
MATLABには流線をプロットするための関数として、streamline が用意されています。ただ、この関数は入力データがメッシュグリッドになっている必要があります。
頂いたデータを見ますと (x,y) 座標は必ずしもメッシュ上に位置していないようでした。そこで、まず meshgrid 関数でメッシュグリッド形式の (x,y) 座標点を作成したうえで、 griddata 関数で各グリッド点上での (u,v) 値を内挿で計算し、最後に streamline 関数で流線を表示する、という方法を取りました。
作成した図は、元データから作成したquiver プロット(データ点が多いため矢印が見えなくなっていますが・・・)と任意に設定した流線のスタート位置(赤い丸印)、およびそこからの流線(青線)を示しています。ご参考になれば幸いです。
% Read the data file
T = readtable('Results.csv');
T.Properties.VariableNames = {'x','y','u','v'};
% Create meshgrid
[xGrid,yGrid] = meshgrid(...
linspace(min(T.x),max(T.x)),...
linspace(min(T.y),max(T.y)));
% Apply interpolation to estimate (u,v) for each grid point
uGrid = griddata(T.x,T.y,T.u,xGrid,yGrid);
vGrid = griddata(T.x,T.y,T.v,xGrid,yGrid);
% Starting points of streamlines
startY = linspace(min(T.y),max(T.y),20);
startX = (max(T.x)/2)*ones(size(startY));
% Show the result
figure
quiver(T.x,T.y,T.u,T.v)
hold on
streamline(xGrid,yGrid,uGrid,vGrid,startX,startY)
scatter(startX,startY,'ro')
grid on
box on
xlabel('X','FontSize',14)
ylabel('Y','FontSize',14)
0 commentaires
Plus de réponses (1)
Voir également
Catégories
En savoir plus sur ベクトル場 dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!