Derivatives with respect to three variables using gradent function. I am getting zero as answer for all values of varables
Afficher commentaires plus anciens
function f = objective_fun_full(x)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Input parameters------------------------------------------------
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Inj_Pr_min = 500; % Kpa
Inj_Pr_max = 8500; % Kpa
Injection_period_min = 0.5; % years
Injection_period_max= 8.5; % years
Solvolfrac_min = 0.01;% fraction
Solvolfrac_max = 0.410;% fraction
A = (Inj_Pr_min + Inj_Pr_max)/2;
B = (Injection_period_min+Injection_period_max)/2;
C = (Solvolfrac_min+Solvolfrac_max)/2;
a = (Inj_Pr_max - Inj_Pr_min)/2;
b = (Injection_period_max - Injection_period_min)/2;
c = (Solvolfrac_max - Solvolfrac_min)/2;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Optimum conditions--------------------------------------
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Inj_Pr_Op_RF = 5400;
Inj_Period_Op_RF = 5.4;
Solvent_frac_Op_RF = 0.255;
Inj_Pr_Op_cSOR = 600;
Inj_Period_Op_cSOR = 0.6;
Solvent_frac_Op_cSOR = 0.015;
Inj_Pr_Op_Solv_Reco = 6600;
Inj_Period_Op_Solv_Reco = 6.6;
Solvent_frac_Op_Solv_Reco = 0.315;
RF_Optimum = (0.428612934) + (0.073578399) * ((Inj_Pr_Op_RF-A)/a) + (-0.028780801) * ((Inj_Period_Op_RF-B)/b) + (0.093376701) * ((Solvent_frac_Op_RF-C)/c) + (-0.022667198) * ((Inj_Pr_Op_RF-A)/a)*((Inj_Period_Op_RF-B)/b) + (-0.023206995) * ((Inj_Pr_Op_RF-A)/a)*((Solvent_frac_Op_RF-C)/c) + (-0.085392014) * ((Inj_Period_Op_RF-B)/b)*((Solvent_frac_Op_RF-C)/c) + (0.012506573) * ((Inj_Pr_Op_RF-A)/a)*((Inj_Period_Op_RF-B)/b)*((Solvent_frac_Op_RF-C)/c) + (-0.013395787) * ((Inj_Pr_Op_RF-A)/a)*((Inj_Pr_Op_RF-A)/a) + (-0.028069875) * ((Inj_Period_Op_RF-B)/b)*((Inj_Period_Op_RF-B)/b) + (-0.053102912) * ((Solvent_frac_Op_RF-C)/c)*((Solvent_frac_Op_RF-C)/c);
cSOR_Optimum = (2.485517241) + (0.21) * ((Inj_Pr_Op_RF-A)/a) + (0.436) * ((Inj_Period_Op_RF-B)/b) + (-0.048) * ((Solvent_frac_Op_RF-C)/c) + (-0.1075) * ((Inj_Pr_Op_RF-A)/a)*((Inj_Period_Op_RF-B)/b) + (0.045) * ((Inj_Pr_Op_RF-A)/a)*((Solvent_frac_Op_RF-C)/c) + (0.0925) * ((Inj_Period_Op_RF-B)/b)*((Solvent_frac_Op_RF-C)/c) + (0.3325) * ((Inj_Pr_Op_RF-A)/a)*((Inj_Period_Op_RF-B)/b)*((Solvent_frac_Op_RF-C)/c) + (0.071724138) * ((Inj_Pr_Op_RF-A)/a)*((Inj_Pr_Op_RF-A)/a) + (0.001724138) * ((Inj_Period_Op_RF-B)/b)*((Inj_Period_Op_RF-B)/b) + (0.051724138) * ((Solvent_frac_Op_RF-C)/c)*((Solvent_frac_Op_RF-C)/c);
Solv_Reco_Optimum = (1.00619478) + (-0.002832569) * ((Inj_Pr_Op_RF-A)/a) + (0.017820705) * ((Inj_Period_Op_RF-B)/b) + (0.015304436) * ((Solvent_frac_Op_RF-C)/c) + (0.005412352) * ((Inj_Pr_Op_RF-A)/a)*((Inj_Period_Op_RF-B)/b) + (0.003780369) * ((Inj_Pr_Op_RF-A)/a)*((Solvent_frac_Op_RF-C)/c) + (-0.016360606) * ((Inj_Period_Op_RF-B)/b)*((Solvent_frac_Op_RF-C)/c) + (-0.005467952) * ((Inj_Pr_Op_RF-A)/a)*((Inj_Period_Op_RF-B)/b)*((Solvent_frac_Op_RF-C)/c) + (-0.013667312) * ((Inj_Pr_Op_RF-A)/a)*((Inj_Pr_Op_RF-A)/a) + (-0.000849831) * ((Inj_Period_Op_RF-B)/b)*((Inj_Period_Op_RF-B)/b) + (-0.017202734) * ((Solvent_frac_Op_RF-C)/c)*((Solvent_frac_Op_RF-C)/c);
x=[2500 0.5 0.5]
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Optimum conditions--------------------------------------
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
RF1 = (0.428612934) + (0.073578399) * ((x(1)-A)/a) + (-0.028780801) * ((x(2)-B)/b) + (0.093376701) * ((x(3)-C)/c) + (-0.022667198) * ((x(1)-A)/a)*((x(2)-B)/b) + (-0.023206995) * ((x(1)-A)/a)*((x(3)-C)/c) + (-0.085392014) * ((x(2)-B)/b)*((x(3)-C)/c) + (0.012506573) * ((x(1)-A)/a)*((x(2)-B)/b)*((x(3)-C)/c) + (-0.013395787) * ((x(1)-A)/a)*((x(1)-A)/a) + (-0.028069875) * ((x(2)-B)/b)*((x(2)-B)/b) + (-0.053102912) * ((x(3)-C)/c)*((x(3)-C)/c);
cSOR1 = (2.485517241) + (0.21) * ((x(1)-A)/a) + (0.436) * ((x(2)-B)/b) + (-0.048) * ((x(3)-C)/c) + (-0.1075) * ((x(1)-A)/a)*((x(2)-B)/b) + (0.045) * ((x(1)-A)/a)*((x(3)-C)/c) + (0.0925) * ((x(2)-B)/b)*((x(3)-C)/c) + (0.3325) * ((x(1)-A)/a)*((x(2)-B)/b)*((x(3)-C)/c) + (0.071724138) * ((x(1)-A)/a)*((x(1)-A)/a) + (0.001724138) * ((x(2)-B)/b)*((x(2)-B)/b) + (0.051724138) * ((x(3)-C)/c)*((x(3)-C)/c);
Solv_Reco1 = (1.00619478) + (-0.002832569) * ((x(1)-A)/a) + (0.017820705) * ((x(2)-B)/b) + (0.015304436) * ((x(3)-C)/c) + (0.005412352) * ((x(1)-A)/a)*((x(2)-B)/b) + (0.003780369) * ((x(1)-A)/a)*((x(3)-C)/c) + (-0.016360606) * ((x(2)-B)/b)*((x(3)-C)/c) + (-0.005467952) * ((x(1)-A)/a)*((x(2)-B)/b)*((x(3)-C)/c) + (-0.013667312) * ((x(1)-A)/a)*((x(1)-A)/a) + (-0.000849831) * ((x(2)-B)/b)*((x(2)-B)/b) + (-0.017202734) * ((x(3)-C)/c)*((x(3)-C)/c);
distance= sqrt((((RF1-RF_Optimum)^2)/RF_Optimum^2) + ((cSOR1 - cSOR_Optimum)^2/cSOR_Optimum^2)+(((Solv_Reco1-Solv_Reco_Optimum)^2)/Solv_Reco_Optimum^2))
f = gradient(distance)
Réponses (1)
Alan Weiss
le 17 Juil 2014
0 votes
The MATLAB gradient function calculates a numerical gradient as described here, not an analytic gradient. If you are looking for an analytic gradient, use Symbolic Math Toolbox and the jacobian or gradient function.
Alan Weiss
MATLAB mathematical toolbox documentation
Catégories
En savoir plus sur Develop Apps Using App Designer dans Centre d'aide et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!