FMINCON requires the following inputs to be of data type double
9 views (last 30 days)
Show older comments
Konstantina Symeonidou
on 14 May 2022
Commented: Torsten
on 18 May 2022
I have the following code and I can't understand how to fix the error.
0 Comments
Accepted Answer
Torsten
on 14 May 2022
Although I don't understand your problem setup because the variables in the objective function are not influenced by your constraint, here is a running code:
%Parameters of the system%
Fk = 10^10;
Bk = 20*10^6;
p = 0.1; %Watts
g0 = 10^(-4);
w0 = -100;
v = 0.2*10^(-11); %J/cycle
C = 8*500; %cycles/bit
fe = 100*10^9; %Hz
fc = 500*10^9; %Hz
s_enc = 240*10^6; %cycles, random number
s_dec = 240*10^6; %cycles, random number
w = 0.5; %decision weight
%Parameters of the system that change%
fl = (0.4:0.1:1)*10^9; %Hz
D = linspace(0,10,100)*10^6; %MB
theta = randi([0,1]);
r = randi([1 length(fl)],1,1); %generate random nuber
fl_temp = fl(r);
q = randi([1 length(D)],1,1); %generate random nuber
D_temp = D(r);
%variables of the system%
w0_watt = 10^(w0/10)/1000;
R = Bk*log2(1+(p*g0^2)/(w0_watt*Bk));
% E_enc = v*s_enc*D_temp*a3;
% t_end_dec = (v*s_enc*D_temp/fc)*a3 + (v*s_dec*D_temp/fe)*a3;
% E_l = v*C*D_temp*a1;
% T_l = (C*D_temp/fl_temp)*a1;
% T_s = (C*D_temp/fe)*a2;
% T_c = (C*D_temp/fc)*a3;
% T_trans = D_temp/R*(a2 + a3);
% E_r = p*T_trans;
% E_sec = theta*(E_enc + E_r) + (1-theta)*E_r;
% T_sec = theta*(t_end_dec + T_trans) + (1-theta)*T_trans;
%
% E = E_l + E_sec;
% T = max([T_l, T_sec + T_s, T_sec + T_c]);
%Soving the problem%
%set initial guess values for the problem variables%
a1 = 1/3;
a2 = 1/3;
a3 = 1/3;
Emax = 1.0;
Tmax = 1.0;
%Load guess values into an array%
x0 = [a1 a2 a3 Emax Tmax];
E_enc = v*s_enc*D_temp*a3;
t_end_dec = (v*s_enc*D_temp/fc)*a3 + (v*s_dec*D_temp/fe)*a3;
E_l = v*C*D_temp*a1;
T_l = (C*D_temp/fl_temp)*a1;
T_s = (C*D_temp/fe)*a2;
T_c = (C*D_temp/fc)*a3;
T_trans = D_temp/R*(a2 + a3);
E_r = p*T_trans;
E_sec = theta*(E_enc + E_r) + (1-theta)*E_r;
T_sec = theta*(t_end_dec + T_trans) + (1-theta)*T_trans;
E = E_l + E_sec;
T = max([T_l, T_sec + T_s, T_sec + T_c]);
%set lower and upper bounds%
lb = [0 0 0 E T];
ub = [1.0 1.0 1.0 1000.0 1000.0];
%call solver to minimize the objective function given the constraints%
% fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon)%
A = [1 1 1 0 0];
b = 1.0;
Aeq = [];
beq = [];
[x,fval] = fmincon(@(x)objective(x,w),x0,A,b,Aeq,beq,lb,ub)
end
%define objective function for optimization%
function obj = objective(x,w)
Emax = x(4);
Tmax = x(5);
obj = w*Emax + (1-w)*Tmax;
end
9 Comments
Torsten
on 18 May 2022
a1, a2 and a3 are used to calculate quantities before you call fmincon.
This is incorrect. All these calculations have to be done within the objective function.
So you will first have to change this basic problem before looping or further changes to your code.
More Answers (0)
See Also
Categories
Find more on Systems of Nonlinear Equations in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!