Hello,
I aim to obtain the normal depth of a channel using Mannig's equation. Somehow I don't manage to resolve its value. Here it's the pieco of code that I'm using:
riverSlope=0.0114; % [m/m] - inletSlope, outletSlope or riverSlope
bottom_width=33.5937; % [m] - inlet or outlet bottom width
slope_Rbank=1.1336; % [m/m] - slope_Rbank_in or slope_Rbank_out
slope_Lbank=0.3334; % [m/m] - slope_Lbank_in or slope_Lbank_out
q=10; % [m3/s] - Flow discharge
n=0.04; % [-] - Manning's roughness coefficient
syms y
area=(bottom_width+(y/(2*slope_Rbank))+(y/(2*slope_Lbank)))*y;
wetted_perimeter=bottom_width+y*(sqrt(1+(1/slope_Rbank)^2)+sqrt(1+(1/slope_Lbank)^2));
manning_eqn=@(y)(1/n)*((area/wetted_perimeter)^(2/3))*(riverSlope^(1/2))*area==q;
soly=solve(manning_eqn,y)
I would really appreciate if someone can help to fix it in order to obtain the desired values and avoid the coding of an iteration loop for the manual calculation. Thanks in advance!!
Álvaro

 채택된 답변

Alan Stevens
Alan Stevens 2020년 8월 1일
편집: Alan Stevens 2020년 8월 1일

0 개 추천

This shoud do it:
depth0 = 1; % Initial guess
depth = fzero(@manningfn, depth0);
function manning = manningfn(y)
riverSlope=0.0114; % [m/m] - inletSlope, outletSlope or riverSlope
bottom_width=33.5937; % [m] - inlet or outlet bottom width
slope_Rbank=1.1336; % [m/m] - slope_Rbank_in or slope_Rbank_out
slope_Lbank=0.3334; % [m/m] - slope_Lbank_in or slope_Lbank_out
q=10; % [m3/s] - Flow discharge
n=0.04; % [-] - Manning's roughness coefficient
area=(bottom_width+(y/(2*slope_Rbank))+(y/(2*slope_Lbank)))*y;
wetted_perimeter=bottom_width+y*(sqrt(1+(1/slope_Rbank)^2)+sqrt(1+(1/slope_Lbank)^2));
manning = (1/n)*((area/wetted_perimeter)^(2/3))*(riverSlope^(1/2))*area-q;
end

댓글 수: 3

Is there any way I can define the parameters out of the function? That would be nice because I aim to use them for other applications. Many thanks!!
Yes, you could do this:
riverSlope=0.0114; % [m/m] - inletSlope, outletSlope or riverSlope
bottom_width=33.5937; % [m] - inlet or outlet bottom width
slope_Rbank=1.1336; % [m/m] - slope_Rbank_in or slope_Rbank_out
slope_Lbank=0.3334; % [m/m] - slope_Lbank_in or slope_Lbank_out
q=10; % [m3/s] - Flow discharge
n=0.04; % [-] - Manning's roughness coefficient
data =[riverSlope; bottom_width; slope_Rbank; slope_Lbank; q; n];
depth0 = 1; % Initial guess
depth = fzero(@manningfn, depth0,[],data);
function manning = manningfn(y, data)
riverSlope=data(1);
bottom_width=data(2);
slope_Rbank=data(3);
slope_Lbank=data(4);
q=data(5);
n=data(6);
area=(bottom_width+(y/(2*slope_Rbank))+(y/(2*slope_Lbank)))*y;
wetted_perimeter=bottom_width+y*(sqrt(1+(1/slope_Rbank)^2)+sqrt(1+(1/slope_Lbank)^2));
manning = (1/n)*((area/wetted_perimeter)^(2/3))*(riverSlope^(1/2))*area-q;
end
Many thanks Alan!

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

추가 답변 (0개)

카테고리

도움말 센터File Exchange에서 Mathematics and Optimization에 대해 자세히 알아보기

질문:

2020년 8월 1일

댓글:

2020년 8월 1일

Community Treasure Hunt

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

Start Hunting!

Translated by