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

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)

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

Categories

Find more on Develop Apps Using App Designer in Help Center and File Exchange

Asked:

on 16 Jul 2014

Answered:

on 17 Jul 2014

Community Treasure Hunt

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

Start Hunting!