Hello matlab users
I have a 2-dimensional water depth data. When the value is negative, it is land (make_bathy)
I need to linearly smooth the relationship between land and water to prevent the difference in water depth from being too large.
As shown in plot_bathy.m (read the file in QA.zip)
Thanks in advance

 채택된 답변

Mathieu NOE
Mathieu NOE 2023년 11월 6일

0 개 추천

hello
I am not sure to understand your plot and where the transition land / water can be seen
nevertheless , if you need to smooth a 2D surface , I like the two following Fex submissions
code
clear all
dep=load('dep_shoal_inlet.txt');
[n,m]=size(dep);
dx=2.0;
dy=2.0;
x=[0:m-1]*dx;
y=[0:n-1]*dy;
x_sponge=[0 180 180 0 0];
y_sponge=[0 0 y(end) y(end) 0];
x_wavemaker=[240 260 260 240 240];
y_wavemaker=[0 0 y(end) y(end) 0];
wid=5;
len=6;
set(gcf,'units','inches','paperunits','inches','papersize', [wid len],'position',[1 1 wid len],'paperposition',[0 0 wid len]);
clf
figure(1),
pcolor(x,y,-dep),shading flat
cbar=colorbar;
set(get(cbar,'ylabel'),'String',' -dep (m) ')
hold on
plot(x_sponge,y_sponge,'g--','LineWidth',2)
text(10,1000,'Sponge','Color','g')
plot(x_wavemaker,y_wavemaker,'w-','LineWidth',2)
text(270,1200,'Wavemaker','Color','w')
caxis([-10 3])
xlabel('x (m)')
ylabel('y (m)')
% print -djpeg inlet_shoal.jpg
% smoothn : Fex : https://fr.mathworks.com/matlabcentral/fileexchange/25634-smoothn?s_tid=ta_fx_results
deps = smoothn(dep,1e5);
figure(2),
pcolor(x,y,-deps),shading flat
% smooth2a : Fex : https://fr.mathworks.com/matlabcentral/fileexchange/23287-smooth2a?s_tid=srchtitle
deps2 = smooth2a(dep,25,25);
figure(3),
pcolor(x,y,-deps2),shading flat

댓글 수: 4

peter huang
peter huang 2023년 11월 7일
Sorry, I may not have expressed it clearly.
In make_bathy, the terrain file I created wanted to have a gradually rising slope like plot_bathy. plot_bathy can see the gradually rising gradient
no problem
the code below is quite the same as above , adapted to plot_bathy.m
this is the result obtained with smoothn
and with smooth2a
clear all;clc;clf
set(gcf,'color','w')
%%
m = 1024;
n = 512;
%---------------------grid size----------------------
dx = 2.0;
dy = 2.0;
lx = (n-1)*dx;
ly = (m-1)*dy;
xx = [0:dx:lx]';
yy = [0:dy:ly]';
[x,y] = meshgrid(xx,yy);
nx = length(xx); % Mglob
ny = length(yy); % Nglob
%% initial water depth
h0 = 10.0;
%% iobs - index ; water = 1
for j = 1 : n
for i = 1 : m
if ( x(i,j) >= 500 && x(i,j)<= 1024 && y(i,j)>= 1200 && y(i,j)<= 2048 )
dep(i,j) = -2;
elseif ( x(i,j) >= 500 && x(i,j)<= 1024 && y(i,j)>= 0 && y(i,j)<= 1000 )
dep(i,j) = -2;
else
dep(i,j) = h0;
end
end
end
%% check results
figure(1),
pcolor(x,y,-dep);shading interp ;colorbar
xlabel('x (m)')
ylabel('y (m)')
axis equal
% smoothn : Fex : https://fr.mathworks.com/matlabcentral/fileexchange/25634-smoothn?s_tid=ta_fx_results
deps = smoothn(dep,1e5);
figure(2),
pcolor(x,y,-deps),shading interp ;colorbar
xlabel('x (m)')
ylabel('y (m)')
axis equal
% smooth2a : Fex : https://fr.mathworks.com/matlabcentral/fileexchange/23287-smooth2a?s_tid=srchtitle
deps2 = smooth2a(dep,20,30);
figure(3),
pcolor(x,y,-deps2),shading interp ;colorbar
xlabel('x (m)')
ylabel('y (m)')
axis equal
peter huang
peter huang 2023년 11월 7일
Thank you so much
Mathieu NOE
Mathieu NOE 2023년 11월 8일
as always, my pleasure !

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

카테고리

도움말 센터File Exchange에서 Curve Fitting Toolbox에 대해 자세히 알아보기

태그

질문:

2023년 11월 6일

댓글:

2023년 11월 8일

Community Treasure Hunt

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

Start Hunting!

Translated by