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)

Antworten (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

Kategorien

Mehr zu Develop Apps Using App Designer finden Sie in Hilfe-Center und File Exchange

Gefragt:

am 16 Jul. 2014

Beantwortet:

am 17 Jul. 2014

Community Treasure Hunt

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

Start Hunting!

Translated by