Need Help with Streamline Function in MATLAB

28 views (last 30 days)
Chijing
Chijing on 15 Jan 2024
Commented: Chijing on 7 Feb 2024
Hi, I am using quiver and streamline functions and here is my code:
figure;
startX =xavgsym(1,:)'
startY=yavgsym(1,:)';
quiver(xavgsym,yavgsym,uavgsym(:,:,2),vavgsym(:,:,2))
hold on
streamline(xavgsym,yavgsym,uavgsym(:,:,2),vavgsym(:,:,2),startX,startY)
hold off
xlim([-20 20])
ylim([-5 25])
The 'quiver' function works fine and I got a nice velocity vector plot. However, I'm not getting any output for the 'streamline' function
I've tried a couple of things to resolve the issue, but none of them worked:
  1. using 'stream2': verts=stream2(xavgsym,yavgsym,uavgsym(:,:,2),vavgsym(:,:,2),startX,startY);
  2. defined different 'startX' and 'startY' using meshgrid: [startX,startY] = meshgrid(10,0:10:25);
I also checked there is no NaN's in u and v, and 'startX' and 'startY' values are in the range of my x, y data
I have attached the data. Any assistance or guidance on this matter would be greatly appreciated. Thank you in advance!

Answers (1)

Shubh
Shubh on 18 Jan 2024
Hi Chijing,
It seems the issue with the 'streamline' function not producing output in MATLAB could be related to how the data is structured or how the streamline function is being called. Given that your 'quiver' plot works correctly, but 'streamline' does not, let's review and adjust your MATLAB code.
First, ensure that the xavgsym and 'yavgsym' matrices form a regular grid. MATLAB's 'streamline' function requires a grid of starting points, which might not align with your data if it's irregularly spaced or not sorted. Here's how you can approach it:
  1. Check Grid Regularity: Ensure 'xavgsym' and 'yavgsym' are regularly spaced. If they aren't, you might need to interpolate your data onto a regular grid.
  2. Interpolate Data if Necessary: If your grid is irregular, use MATLAB's 'interp2' function to interpolate 'uavgsym' and 'vavgsym' onto a regular grid.
  3. Adjust Start Points: The start points for the streamlines (startX, startY) should be within the bounds of your grid. Make sure they are not outside the range of 'xavgsym' and 'yavgsym'.
Here's a revised version of your code with these considerations:
% Assuming xavgsym, yavgsym, uavgsym, and vavgsym are already loaded
% Check if the grid is regular
if ~isequal(size(xavgsym), size(yavgsym))
error('xavgsym and yavgsym must be the same size');
end
% Select the appropriate slice for u and v
u_slice = uavgsym(:,:,2);
v_slice = vavgsym(:,:,2);
% Create a figure
figure;
% Plot the quiver
quiver(xavgsym, yavgsym, u_slice, v_slice);
hold on;
% Set start points for streamline - adjust as needed
startX = xavgsym(1,:)';
startY = yavgsym(1,:)';
% Check if startX and startY are within the range
if any(startX < min(xavgsym(:))) || any(startX > max(xavgsym(:))) || ...
any(startY < min(yavgsym(:))) || any(startY > max(yavgsym(:)))
error('Start points are outside the grid range');
end
% Generate streamlines
streamline(xavgsym, yavgsym, u_slice, v_slice, startX, startY);
% Set axes limits
xlim([-20 20]);
ylim([-5 25]);
hold off;
This code addresses potential issues with grid regularity and start points. If the 'streamline' function still doesn't produce output, you might want to further investigate the characteristics of your velocity field data ('uavgsym' and 'vavgsym'). Ensure that the velocities are not too small or too uniform, as this might also cause streamlines to be less visible or not appear at all.
Hope this helps!
  1 Comment
Chijing
Chijing on 7 Feb 2024
Hi Shubh,
Thanks for your reply. I've tried the code you provided by couldn't get this problem solved.

Sign in to comment.

Categories

Find more on Vector Fields in Help Center and File Exchange

Community Treasure Hunt

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

Start Hunting!