Clear Filters
Clear Filters

Error: using fmincon FMINCON requires all values returned by functions to be of data type double.

2 views (last 30 days)
I am getting an error when running this code. It will be helpful if you could help.
%% Input
syms d
G1 = 3e6;
p = 1;
G0 = 1e8;
k0 = 0.004;
k1 = 0.003;
%% Calculation
D = [cos(k1*d) sin(k1*d)*p/(G1*k1)*1i; sin(k1*d)*(G1*k1)/p*1i cos(k1*d)];
L = [2*p/k0*cos(5*k0) sin(5*k0)*2*p/k0*1i; sin(5*k0)*2*G0*1i 2*G0*cos(5*k0)];
B = D*L;
B1 = B(1,1);
B2 = B(1,2);
B3 = B(2,1);
B4 = B(2,2);
answer = (2*p*(B4-B3)-2*k0*G0*(B2-B1))/(k0*(B1+B2)*(B4-B3)-k0*(B4+B3)*(B2-B1));
magnitude = abs(answer);
%% Optimization
fun = @(d)magnitude;
d0 = 0.5;
A = [];
b = [];
Aeq = [];
beq = [];
lb = 0;
ub = Inf;
[s,fval] = fmincon(fun,d0,A,b,Aeq,beq,lb,ub); %minimize

Accepted Answer

Dyuman Joshi
Dyuman Joshi on 9 Nov 2023
Use matlabFunction to convert the symbolic expression to an anonymous function -
%% Input
syms d
G1 = 3e6;
p = 1;
G0 = 1e8;
k0 = 0.004;
k1 = 0.003;
%% Calculation
D = [cos(k1*d) sin(k1*d)*p/(G1*k1)*1i; sin(k1*d)*(G1*k1)/p*1i cos(k1*d)];
L = [2*p/k0*cos(5*k0) sin(5*k0)*2*p/k0*1i; sin(5*k0)*2*G0*1i 2*G0*cos(5*k0)];
B = D*L;
B1 = B(1,1);
B2 = B(1,2);
B3 = B(2,1);
B4 = B(2,2);
answer = (2*p*(B4-B3)-2*k0*G0*(B2-B1))/(k0*(B1+B2)*(B4-B3)-k0*(B4+B3)*(B2-B1));
magnitude = abs(answer);
%% Optimization
fun = matlabFunction(magnitude, 'Vars', d);
d0 = 0.5;
A = [];
b = [];
Aeq = [];
beq = [];
lb = 0;
ub = Inf;
[s,fval] = fmincon(fun,d0,A,b,Aeq,beq,lb,ub) %minimize
Local minimum found that satisfies the constraints. Optimization completed because the objective function is non-decreasing in feasible directions, to within the value of the optimality tolerance, and constraints are satisfied to within the value of the constraint tolerance.
s = 0.0096
fval = 1.0000

More Answers (0)

Products


Release

R2022a

Community Treasure Hunt

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

Start Hunting!