How to create a non-uniform 2d grid?
Show older comments
Hi all, I have created a grid as shown in below image

But my aim is to create a grid in the following way

Can anyone help me in creating this type of mesh. Please find below code,
clear all
clc
L=1;
nx=50;
ny=50;
x1=linspace(0,0.4,10);
x2=linspace(0.42,1,40);
x=cat(2,x1,x2);
y1=linspace(0,0.4,10);
y2=linspace(0.42,1,40);
y=cat(2,y1,y2);
[X,Y]=meshgrid(x,y);
plot(X,Y,'k',Y,X,'k');
Thank you all.
Answers (2)
Gregory Gargioni
on 24 Sep 2020
Edited: Gregory Gargioni
on 24 Sep 2020
clear all; close all;
alx3 = 1.0; %LENGTH X
aly3 = 0.5; %LENGTH Y
nx = 50; %NODES X
ny = 50; %NODES Y
str3 = 1.2; %STRETCH
%HYPERBOLIC TANGENT-TYPE CLUSTERING
nxm=nx-1;
tstr3=tanh(str3);
xc(1)=0.0;
for kc=2:nx;
z2dp=(2*kc-nx-1)/(nxm);
xc(kc)=(1+tanh(str3*z2dp)/tstr3)*0.5*alx3;
end
nym=ny-1;
yc(1)=0.0;
for kc=2:ny;
z2dp=(2*kc-ny-1)/(nym);
yc(kc)=(1+tanh(str3*z2dp)/tstr3)*0.5*aly3;
end
[X,Y]=meshgrid(xc,yc);
hold on;
plot(X,Y,'k');
plot(X.',Y.','k');
axis equal;
xlim([0.0 alx3]);
ylim([0.0 aly3]);
You have an infinity different ways to difine how you will strach your mesh (uniform, HYPERBOLIC TANGENT-TYPE, CLIPPED CHEBYCHEV-TYPE and much more...), I picked up one method, because the trick is the last part of the code:
hold on;
plot(X,Y,'k'); %Creates the VERTICAL lines
plot(X.',Y.','k'); %Creates the Horizontal lines --> I am using the transpose matrices here
The code will give you the following mesh:

Hopefully it will help you
1 Comment
Abdalrhaman Koko
on 5 Dec 2020
can you name and reference more methods please
Venkata Siva Krishna Madala
on 5 Feb 2018
1 vote
Hi Ganesh,
I understand that you are trying to create a Mesh(2nd image) with non-uniform width between the lines. My understanding is that you would like to change/increase the line width when compared to the first image. Please correct me if I am wrong.
7 Comments
Ganesh kumar Badri narayan
on 5 Feb 2018
Venkata Siva Krishna Madala
on 5 Feb 2018
By using the LineWidth property in the Plot function you can change the size of the line drawn(make it thicker).
However if you want to decrease the spacing between the lines and make the 1st image look like the 2nd image then you have to tinker with the X and Y data. My observations would be that
- Data along the y axis is gradually increasing in spacing while the data along the x axis is symmetric over some x value.
- Due to this you have to use different sets on data in ploteg:- plot(X1,Y1,'k',X2,Y2,'k')
It would be very helpful if you could elaborate your application because if its related to Logrithmic functions then you can use the "loglog", "semilogx", etc functions for plotting these values.
Ganesh kumar Badri narayan
on 5 Feb 2018
Venkata Siva Krishna Madala
on 7 Feb 2018
Edited: Venkata Siva Krishna Madala
on 7 Feb 2018
Like I have mentioned before one of the possible way of creating the 2nd mesh image would be be play around with your X and Y data. But since you are more interested in Mesh Generation I have found some interesting links that could help you out.
https://www.mathworks.com/matlabcentral/answers/122114-how-to-make-a-grid-with-non-uniform-nodes
https://stackoverflow.com/questions/42045140/generating-a-non-uniform-1d-mesh-in-matlab
https://www.mathworks.com/matlabcentral/fileexchange/25555-mesh2d-delaunay-based-unstructured-mesh-generation
Yeru Shang
on 19 Apr 2018
Thank you Venkata, your answer is very helpful!
Paul Safier
on 31 Mar 2020
How about for a non-uniform 3D mesh?
darova
on 1 Apr 2020
Do you have a picture?
Categories
Find more on Linear Programming and Mixed-Integer Linear Programming 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!