Borrar filtros
Borrar filtros

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

1 visualización (últimos 30 días)
I am using symbolic toolbox and fmincon for minimization. But when I am using d, r_g and G_g as symbolic variable I am getting an error. This is the error I am getting "FMINCON requires all values returned by functions to be of data type double."
[q] = optimizeParameters();% Call optimizeParameters to define the objective function q
options = optimset('PlotFcns', @optimplotfval);% Set optimization options
d0 = [-0.5, 24, 3e6];
lb = [-1, 24, 2e6];
ub = [0, 32, 6e6];
q(d0(1),d0(2),d0(3))
ans = 
NaN
%[solution, fval] = fmincon(@(x) q(x(1), x(2), x(3)), d0, [], [], [], [], lb, ub, [], options);
function q = optimizeParameters()
syms d r_g G_g%symbolic variables
theta = pi/4;
p = 2*pi;
Vs = 250;
k = p / Vs;
c = Vs / sin(theta);
w5 = 0.001;
n = 3;
dl = -6;
d1 = dl + 2 * n * d - d;
q = @(d, r_g, G_g) calculateObjective(theta, p, d, r_g, G_g, Vs, k, c, w5, n, dl, d1);
end
function answer = calculateObjective(theta, p, d, r_g, G_g, Vs, k, c, w5, n, dl, d1);
r_s= 2000;
G_s= 1.25e8;
n_s= 0.3;
l_s= 2*n_s*G_s/(1-2*n_s);
a_s= sqrt((l_s+2*G_s)/r_s);
b_s= sqrt(G_s/r_s);
g_a_s= sqrt((c/a_s)^2-1);
g_b_s= sqrt((c/b_s)^2-1);
theta_s= 2*(b_s/c)^2;
A_s= k*g_a_s*d;
B_s= k*g_b_s*d;
C_A_s= cos(A_s);
S_A_s= sin(A_s);
C_B_s= cos(B_s);
S_B_s= sin(B_s);
n_g= 0.17;
l_g= 2*n_g*G_g/(1-2*n_g);
a_g= sqrt((l_g+2*G_g)/r_g);
b_g= sqrt(G_g/r_g);
g_a_g= sqrt((c/a_g)^2-1);
g_b_g= sqrt((c/b_g)^2-1);
theta_g= 2*(b_g/c)^2;
A_g= k*g_a_g*d;
B_g= k*g_b_g*d;
C_A_g= cos(A_g);
S_A_g= sin(A_g);
C_B_g= cos(B_g);
S_B_g= sin(B_g);
Gs_inv = [theta_s*C_A_s+(1-theta_s)*C_B_s, 1i*(g_a_s*g_b_s*theta_s*S_B_s+(1-theta_s)*S_A_s)/g_a_s, (-C_A_s+C_B_s)/(c^2*r_s), 1i*(g_a_s*g_b_s*S_B_s+S_A_s)/(c^2*g_a_s*r_s);...
1i*(-g_a_s*g_b_s*theta_s*S_A_s+(1-theta_s)*S_B_s)/g_b_s, theta_s*C_B_s+(1-theta_s)*C_A_s, 1i*(g_a_s*g_b_s*S_A_s+S_B_s)/(c^2*g_b_s*r_s), (-C_A_s+C_B_s)/(c^2*r_s);...
c^2*r_s*theta_s*(theta_s-1)*(C_A_s-C_B_s), 1i*c^2*r_s*(g_a_s*g_b_s*theta_s^2*S_B_s-(theta_s-1)^2*S_A_s)/g_a_s, theta_s*C_B_s+(1-theta_s)*C_A_s, 1i*(g_a_s*g_b_s*theta_s*S_B_s+(theta_s-1)*S_A_s)/g_a_s;...
1i*c^2*r_s*(g_a_s*g_b_s*theta_s^2*S_A_s+(theta_s-1)^2*S_B_s)/g_b_s, c^2*r_s*theta_s*(theta_s-1)*(C_A_s-C_B_s), 1i*(-g_a_s*g_b_s*theta_s*S_A_s+(1-theta_s)*S_B_s)/g_b_s, theta_s*C_A_s+(1-theta_s)*C_B_s];
Gg_inv = [theta_g*C_A_g+(1-theta_g)*C_B_g, 1i*(g_a_g*g_b_g*theta_g*S_B_g+(1-theta_g)*S_A_g)/g_a_g, (-C_A_g+C_B_g)/(c^2*r_g), 1i*(g_a_g*g_b_g*S_B_g+S_A_g)/(c^2*g_a_g*r_g);...
1i*(-g_a_g*g_b_g*theta_g*S_A_g+(1-theta_g)*S_B_g)/g_b_g, theta_g*C_B_g+(1-theta_g)*C_A_g, 1i*(g_a_g*g_b_g*S_A_g+S_B_g)/(c^2*g_b_g*r_g), (-C_A_g+C_B_g)/(c^2*r_g);...
c^2*r_g*theta_g*(theta_g-1)*(C_A_g-C_B_g), 1i*c^2*r_g*(g_a_g*g_b_g*theta_g^2*S_B_g-(theta_g-1)^2*S_A_g)/g_a_g, theta_g*C_B_g+(1-theta_g)*C_A_g, 1i*(g_a_g*g_b_g*theta_g*S_B_g+(theta_g-1)*S_A_g)/g_a_g;...
1i*c^2*r_g*(g_a_g*g_b_g*theta_g^2*S_A_g+(theta_g-1)^2*S_B_g)/g_b_g, c^2*r_g*theta_g*(theta_g-1)*(C_A_g-C_B_g), 1i*(-g_a_g*g_b_g*theta_g*S_A_g+(1-theta_g)*S_B_g)/g_b_g, theta_g*C_A_g+(1-theta_g)*C_B_g];
A1= (Gg_inv*Gs_inv)*(Gg_inv*Gs_inv)*Gg_inv;
A_s0= k*g_a_s*dl;
B_s0= k*g_b_s*dl;
C_A_s0= cos(A_s0);
S_A_s0= sin(A_s0);
C_B_s0= cos(B_s0);
S_B_s0= sin(B_s0);
D= [-(a_s/c)^2*C_A_s0, 1i*(a_s/c)^2*S_A_s0, -theta_s*g_b_s*C_B_s0, 1i*theta_s*g_b_s*S_B_s0;...
-1i*(a_s/c)^2*g_a_s*S_A_s0, (a_s/c)^2*g_a_s*C_A_s0, 1i*theta_s*S_B_s0, -theta_s*C_B_s0;...
-r_s*a_s^2*(theta_s-1)*C_A_s0, 1i*r_s*a_s^2*(theta_s-1)*S_A_s0, -r_s*c^2*theta_s^2*g_b_s*C_B_s0, 1i*r_s*c^2*theta_s^2*g_b_s*S_B_s0;...
1i*r_s*a_s^2*theta_s*g_a_s*S_A_s0, -r_s*a_s^2*theta_s*g_a_s*C_A_s0, -1i*r_s*c^2*theta_s*(theta_s-1)*S_B_s0, r_s*c^2*theta_s*(theta_s-1)*C_B_s0];
D1= D(1,1);
D2= D(1,2);
D3= D(1,3);
D4= D(1,4);
D5= D(2,1);
D6= D(2,2);
D7= D(2,3);
D8= D(2,4);
D9= D(3,1);
D10= D(3,2);
D11= D(3,3);
D12= D(3,4);
D13= D(4,1);
D14= D(4,2);
D15= D(4,3);
D16= D(4,4);
a_bar= ((D10-D9)*(D8-D7)+(D5-D6)*(D12-D11))/((D2-D1)*(D8-D7)+(D4-D3)*(D5-D6));
b_bar= ((D9-D10)*(D4-D3)+(D2-D1)*(D12-D11))/((D2-D1)*(D8-D7)+(D4-D3)*(D5-D6));
c_bar= ((D14-D13)*(D8-D7)+(D16-D15)*(D5-D6))/((D2-D1)*(D8-D7)+(D4-D3)*(D5-D6));
d_bar= ((D13-D14)*(D4-D3)-(D16-D15)*(D1-D2))/((D2-D1)*(D8-D7)+(D4-D3)*(D5-D6));
A_s1= k*g_a_s*d1;
B_s1= k*g_b_s*d1;
C_A_s1= cos(A_s1);
S_A_s1= sin(A_s1);
C_B_s1= cos(B_s1);
S_B_s1= sin(B_s1);
D_l= [-(a_s/c)^2*C_A_s1, 1i*(a_s/c)^2*S_A_s1, -theta_s*g_b_s*C_B_s1, 1i*theta_s*g_b_s*S_B_s1;...
-1i*(a_s/c)^2*g_a_s*S_A_s1, (a_s/c)^2*g_a_s*C_A_s1, 1i*theta_s*S_B_s1, -theta_s*C_B_s1;...
-r_s*a_s^2*(theta_s-1)*C_A_s1, 1i*r_s*a_s^2*(theta_s-1)*S_A_s1, -r_s*c^2*theta_s^2*g_b_s*C_B_s1, 1i*r_s*c^2*theta_s^2*g_b_s*S_B_s1;...
1i*r_s*a_s^2*theta_s*g_a_s*S_A_s1, -r_s*a_s^2*theta_s*g_a_s*C_A_s1, -1i*r_s*c^2*theta_s*(theta_s-1)*S_B_s1, r_s*c^2*theta_s*(theta_s-1)*C_B_s1];
B= A1*D_l;
B1= B(1,1);
B2= B(1,2);
B3= B(1,3);
B4= B(1,4);
B5= B(2,1);
B6= B(2,2);
B7= B(2,3);
B8= B(2,4);
B9= B(3,1);
B10= B(3,2);
B11= B(3,3);
B12= B(3,4);
B13= B(4,1);
B14= B(4,2);
B15= B(4,3);
B16= B(4,4);
w_in= (D_l(2,4)-D_l(2,3))*c*w5;
mag_w_in= abs(w_in);
u_in= (D_l(1,4)-D_l(1,3))*c*w5;
mag_u_in= abs(u_in);
Input= sqrt(mag_u_in^2+mag_w_in^2);
c1= -(B1+B2);
c2= -(B3+B4);
c3= -(B5+B6);
c4= -(B7+B8);
c5= -(B9+B10);
c6= -(B11+B12);
c7= -(B13+B14);
c8= -(B15+B16);
x2_inv= [(-b_bar*c3*c8+b_bar*c4*c7+c3*c6*d_bar-c4*c5*d_bar+c5*c8-c6*c7)/(a_bar*(c1*c4*d_bar-c1*c8-c2*c3*d_bar+c2*c7)+b_bar*(-c1*c4*c_bar+c2*c3*c_bar-c3*c8+c4*c7)+c_bar*(c1*c6-c2*c5)+d_bar*(c3*c6-c4*c5)+c5*c8-c6*c7), (b_bar*c1*c8-b_bar*c2*c7-c1*c6*d_bar+c2*c3*d_bar)/(a_bar*(c1*c4*d_bar-c1*c8-c2*c3*d_bar+c2*c7)+b_bar*(-c1*c4*c_bar+c2*c3*c_bar-c3*c8+c4*c7)+c_bar*(c1*c6-c2*c5)+d_bar*(c3*c6-c4*c5)+c5*c8-c6*c7), (c1*c4*d_bar-c1*c8-c2*c3*d_bar+c2*c7)/(a_bar*(c1*c4*d_bar-c1*c8-c2*c3*d_bar+c2*c7)+b_bar*(-c1*c4*c_bar+c2*c3*c_bar-c3*c8+c4*c7)+c_bar*(c1*c6-c2*c5)+d_bar*(c3*c6-c4*c5)+c5*c8-c6*c7), (-b_bar*c1*c4+b_bar*c2*c3+c1*c6-c2*c5)/(a_bar*(c1*c4*d_bar-c1*c8-c2*c3*d_bar+c2*c7)+b_bar*(-c1*c4*c_bar+c2*c3*c_bar-c3*c8+c4*c7)+c_bar*(c1*c6-c2*c5)+d_bar*(c3*c6-c4*c5)+c5*c8-c6*c7);...
(a_bar*c3*c8-a_bar*c4*c7-c3*c6*c_bar+c4*c5*c_bar)/(a_bar*(c1*c4*d_bar-c1*c8-c2*c3*d_bar+c2*c7)+b_bar*(-c1*c4*c_bar+c2*c3*c_bar-c3*c8+c4*c7)+c_bar*(c1*c6-c2*c5)+d_bar*(c3*c6-c4*c5)+c5*c8-c6*c7), (-a_bar*c1*c8+a_bar*c2*c7+c1*c6*c_bar-c2*c5*c_bar+c5*c8-c6*c7)/(a_bar*(c1*c4*d_bar-c1*c8-c2*c3*d_bar+c2*c7)+b_bar*(-c1*c4*c_bar+c2*c3*c_bar-c3*c8+c4*c7)+c_bar*(c1*c6-c2*c5)+d_bar*(c3*c6-c4*c5)+c5*c8-c6*c7), (-c1*c4*c_bar+c2*c3*c_bar-c3*c8+c4*c7)/(a_bar*(c1*c4*d_bar-c1*c8-c2*c3*d_bar+c2*c7)+b_bar*(-c1*c4*c_bar+c2*c3*c_bar-c3*c8+c4*c7)+c_bar*(c1*c6-c2*c5)+d_bar*(c3*c6-c4*c5)+c5*c8-c6*c7), (a_bar*c1*c4-a_bar*c2*c3+c3*c6-c4*c5)/(a_bar*(c1*c4*d_bar-c1*c8-c2*c3*d_bar+c2*c7)+b_bar*(-c1*c4*c_bar+c2*c3*c_bar-c3*c8+c4*c7)+c_bar*(c1*c6-c2*c5)+d_bar*(c3*c6-c4*c5)+c5*c8-c6*c7);...
(a_bar*c4*d_bar-a_bar*c8-b_bar*c4*c_bar+c6*c_bar)/(a_bar*(c1*c4*d_bar-c1*c8-c2*c3*d_bar+c2*c7)+b_bar*(-c1*c4*c_bar+c2*c3*c_bar-c3*c8+c4*c7)+c_bar*(c1*c6-c2*c5)+d_bar*(c3*c6-c4*c5)+c5*c8-c6*c7), (-a_bar*c2*d_bar+b_bar*c2*c_bar-b_bar*c8+c6*d_bar)/(a_bar*(c1*c4*d_bar-c1*c8-c2*c3*d_bar+c2*c7)+b_bar*(-c1*c4*c_bar+c2*c3*c_bar-c3*c8+c4*c7)+c_bar*(c1*c6-c2*c5)+d_bar*(c3*c6-c4*c5)+c5*c8-c6*c7), (-c2*c_bar+c4*d_bar+c8)/(a_bar*(c1*c4*d_bar-c1*c8-c2*c3*d_bar+c2*c7)+b_bar*(-c1*c4*c_bar+c2*c3*c_bar-c3*c8+c4*c7)+c_bar*(c1*c6-c2*c5)+d_bar*(c3*c6-c4*c5)+c5*c8-c6*c7), (a_bar*c2+b_bar*c4-c6)/(a_bar*(c1*c4*d_bar-c1*c8-c2*c3*d_bar+c2*c7)+b_bar*(-c1*c4*c_bar+c2*c3*c_bar-c3*c8+c4*c7)+c_bar*(c1*c6-c2*c5)+d_bar*(c3*c6-c4*c5)+c5*c8-c6*c7);...
(-a_bar*c3*d_bar+a_bar*c7+b_bar*c3*c_bar-c5*c_bar)/(a_bar*(c1*c4*d_bar-c1*c8-c2*c3*d_bar+c2*c7)+b_bar*(-c1*c4*c_bar+c2*c3*c_bar-c3*c8+c4*c7)+c_bar*(c1*c6-c2*c5)+d_bar*(c3*c6-c4*c5)+c5*c8-c6*c7), (a_bar*c1*d_bar-b_bar*c1*c_bar-b_bar*c7-c5*d_bar)/(a_bar*(c1*c4*d_bar-c1*c8-c2*c3*d_bar+c2*c7)+b_bar*(-c1*c4*c_bar+c2*c3*c_bar-c3*c8+c4*c7)+c_bar*(c1*c6-c2*c5)+d_bar*(c3*c6-c4*c5)+c5*c8-c6*c7), (c1*c_bar+c3*d_bar-c7)/(a_bar*(c1*c4*d_bar-c1*c8-c2*c3*d_bar+c2*c7)+b_bar*(-c1*c4*c_bar+c2*c3*c_bar-c3*c8+c4*c7)+c_bar*(c1*c6-c2*c5)+d_bar*(c3*c6-c4*c5)+c5*c8-c6*c7), (-a_bar*c1+b_bar*c3+c5)/(a_bar*(c1*c4*d_bar-c1*c8-c2*c3*d_bar+c2*c7)+b_bar*(-c1*c4*c_bar+c2*c3*c_bar-c3*c8+c4*c7)+c_bar*(c1*c6-c2*c5)+d_bar*(c3*c6-c4*c5)+c5*c8-c6*c7)];
Y2= x2_inv*(B*[0;0;-w5;w5]);
u_out1= c*abs(Y2(1,1));
w_out1= c*abs(Y2(2,1));
Output= sqrt(u_out1^2+w_out1^2);
answer= Output/Input;
end

Respuesta aceptada

Torsten
Torsten el 30 de Abr. de 2024
Movida: Torsten el 30 de Abr. de 2024
As you can see above, your function returns a symbolic NaN, but it must return a numerical defined value.
To change the output to numeric, use
function q = optimizeParameters()
%syms d r_g G_g%symbolic variables
theta = pi/4;
p = 2*pi;
Vs = 250;
k = p / Vs;
c = Vs / sin(theta);
w5 = 0.001;
n = 3;
dl = -6;
d1 = @(d)dl + 2 * n * d - d;
q = @(d, r_g, G_g) calculateObjective(theta, p, d, r_g, G_g, Vs, k, c, w5, n, dl, d1(d));
end
To avoid NaN output, debug "calculateObjective".

Más respuestas (0)

Productos


Versión

R2022a

Community Treasure Hunt

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

Start Hunting!

Translated by