obtaining the same results for unknown values in a cost function using different input values
조회 수: 1 (최근 30일)
이전 댓글 표시
Dear Friends,
I am going to determine two unknow variables (called W and tau-nad) using several input datasets and least squares optimization. the cost function is the RMSE of residual( observed values minus simulated values ). I expect to obtain different values for the unknown parameters when using different set of input values. However, I encounter the constant values for both unknown variables, even when I use different set of input datasets or use different optimization algorithms (e.g., GA). I observe the upper bound of the definded/ intriduced range for each one of the unknown parameters. I mean I observed values around 0.6 and 1.5 for W and tau-nad, respectivelly. I also test several optimization methods including GA with no success. it seems that there is a problem with my codes. I attached my code and I would be thankful if you could help me with this problem.
fun2= @(params) cost_function3(params, observed_reflectivity, C, T, H_r, theta);
options = optimoptions('fmincon','Display','iter');
[x2, fval] = fmincon(fun, initial_guess, [], [], [], [], [0,0], [0.6,1.5], [], options);
fun = @(params) cost_function(params, observed_reflectivity, C, T, H_r, theta);
[x,resnorm,residual,exitflag,output,lambda,jacobian] =lsqnonlin(fun, initial_guess, [0,0], [0.6,1.5]);
function epsilon_r = calculate_permittivity(C, T, W)
W_t = 0.0286+0.00307.*C;
n_d = 1.634 - 0.00539 * C + 2.75 * 10^(-5)* C.^2;
K_d = 0.0395 - 4.038 * 10^(-4)* C;
n_b = (8.86 + 0.00321 * T) + (-0.0644 + 7.96 * 10^(-4)* T).* C + (2.97 * 10^(-4) - 9.6 * 10^(-6)* T) .* C.^2;
K_b = (0.738 - 0.00903 * T + 8.57 * 10^(-5) * T.^2) + (-0.00215 + 1.47 * 10^(-4) * T).* C + (7.36 * 10^(-5) - 1.03 * 10^(-6) * T + 1.05 * 10^(-8) * T.^2) .* C.^2;
n_u = (10.3 - 0.0173 * T) + (6.5 * 10^(-4) + 8.82 * 10^(-5) * T) .* C + (-6.34 * 10^(-6) - 6.32 * 10^(-7) * T) .* C.^2;
K_u = (0.7 - 0.017 * T + 1.78 * 10^(-4) * T.^2) + (0.0161 + 7.25 * 10^(-4) * T) .* C + (-1.46 * 10^(-4) - 6.03 * 10^(-6) * T - 7.87 * 10^(-9) * T.^2) .* C.^2;
% if W <= W_t
% ns = n_d + (n_b - 1) .* W;
% ks = K_d + K_b .* W;
% else
ns = n_d + (n_b - 1) .* W_t + (n_u - 1) .* (W - W_t);
ks = K_d + K_b .* W_t + K_u .* (W - W_t);
% end
real_permittivity = ns.^2 - ks.^2;
imaginary_permittivity = 2 * ns .* ks;
epsilon_r = complex(real_permittivity, imaginary_permittivity);
end
function R_vv = calculate_R_vv(C, T, W, theta)
epsilon_r = calculate_permittivity(C, T, W);
R_vv = (epsilon_r .* cos(deg2rad(theta)) - sqrt(epsilon_r - sin(deg2rad(theta)).^2)) ./ (epsilon_r .* cos(deg2rad(theta)) + sqrt(epsilon_r - sin(deg2rad(theta)).^2));
end
function R_hh = calculate_R_hh(C, T, W, theta)
epsilon_r = calculate_permittivity(C, T, W);
R_hh = (cos(deg2rad(theta)) - sqrt(epsilon_r - sin(deg2rad(theta)).^2))./ (cos(deg2rad(theta)) + sqrt(epsilon_r - sin(deg2rad(theta)).^2));
end
function G_GP_star = calculate_G_GP_star(C, T, W, theta)
R_vv = calculate_R_vv(C, T, W, theta);
R_hh = calculate_R_hh(C, T, W, theta);
G_GP_star = (abs((R_vv - R_hh) ./ 2)).^2;
end
function ref_eff = reflectivity_model(params, C, T, H_r, theta)
W = params(1);
tau_nad = params(2);
ref_GP_star = calculate_G_GP_star(C, T, W, theta);
ref_eff = exp(-((2 * tau_nad) ./ cos(deg2rad(theta))) - (H_r .* (cos(deg2rad(theta))).^(-1)) .* ref_GP_star);
end
function rmse = cost_function3(params, observed_reflectivity, C, T, H_r, theta)
% W = params(1);
% tau_nad = params(2);
modeled_reflectivity = reflectivity_model(params,C, T, H_r, theta);
rmse = (sum((modeled_reflectivity - observed_reflectivity).^2));
end
댓글 수: 1
답변 (0개)
참고 항목
카테고리
Help Center 및 File Exchange에서 Genetic Algorithm에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!