Derivatives with respect to three variables using gradent function. I am getting zero as answer for all values of varables

1 view (last 30 days)
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)

Answers (1)

Alan Weiss
Alan Weiss on 17 Jul 2014
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

Community Treasure Hunt

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

Start Hunting!