Environmental Engineering Reference
In-Depth Information
if(fc*fa
<
0)
b
=
c;
fb
=
fc;
else
a
=
c;
fa
=
fc;
end
end
y
=
0.5*(a
+
b);
return
%
% Definition of U to X function, X_value
function X
=
X_value(U,mu,sigma,distri)
switch distri
case 'TruncNormal'
X
=
mu
+
sigma*norminv((1-normcdf(-mu/sigma))*U
+
normcdf(-mu/sigma));
case 'Lognormal'
X
=
exp(norminv(U)*sqrt(log(1
+
sigma^2/(mu^2)))
+
log(mu)-
0.5*log(1
+
sigma^2/(mu^2)));
case 'TruncGumbel'
a
=
1.282549808/sigma;
b
=
mu-(0.5772156649/a);
X
=
b-log(-log(U*(1-exp(-exp(a*b)))
+
exp(-exp(a*b))))/a;
case 'Weibull'
k
=
k_solveWeibull(mu,sigma);
u
=
mu/gamma(1
+
1/k);
X
=
u*(-log(1-U)).^(1/k);
end
return
%
% Definition of Weibull distribution parameter k solving function,
% k_solveWeibull
function y
=
k_solveWeibull(mu,sigma)
a
=
0.02;
b
=
40;
eps
=
1e-6;
fa
=
1/sqrt(gamma(1
+
2/a)/gamma(1
+
1/a)^2-1)-mu/sigma;
fb
=
1/sqrt(gamma(1
+
2/b)/gamma(1
+
1/b)^2-1)-mu/sigma;
if fa*fb
>
0
disp('error:[a b] interval no solution, please re-enter a and b');
return
end
while b-a
>
eps
c
=
0.5*(a
+
b);
fc
=
1/sqrt(gamma(1
+
2/c)/gamma(1
+
1/c)^2-1)-mu/sigma;
if fc*fa
<
0;
b
=
c;
fb
=
fc;
else
a
=
c;
fa
=
fc;
end
end
y
=
0.5*(a
+
b);
return
Search WWH ::
Custom Search