fmincon to get 3 unknown parameters
1 vue (au cours des 30 derniers jours)
Afficher commentaires plus anciens
Hey guys, i have no idea what is wrong. Who can helps me pls?
clear all; close all; clc
%%%%%%%%%%%%%%%%%%%%%%Define simulation parameters%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% My = magnetic permeability[H/m]
% Rho = Gain factor
% phi = phase delay [°]
% Theta Sensing directional angle
% r,Theta = Position and angular distance between conductors and sensors
% xs,ys = Coordinate of the sensors
% xi,yi = Coordinate of conductor to be measured
% I = Current of the Cables [A]
% RI = Cable Radius in m
global My Rho phi Theta RI B V Vm xs ys xdata
My = 4*pi*10^(-7);
Rho = 6.824*10000;
phi = 13.61;
Theta = 0.01;
RI = 21*(1e-3); % in[m]
%------------Calculation of voltage by magnetic flux B in [T]-------------%
%-------------------------------------------------------------------------%
% Define the magetic fields in [T] of sensors
B = [0.17, 0.47, 35.30, 35.32, 6.66, 6.59, 36.28, 35.43, 13.36, 15.04, 42.17, 44.05];
B = B*1e-6;
B
% calculate the output voltage of sensors in [V]
V = (Rho*exp(1i*phi*pi/180))*B;
V
% % %---------------Define the measured voltage of sensors----------------%
Vm = [0.0152, 0.03, 2.942, 2.943, 0.5751, 0.6, 3.0238, 2.9529, 1.1235, 1.2535, 3.714, 3.6713];
% Define the positions of each sensor in [m]
xs = [21;-21;0;0;-14.5;-15;16;15.3;-8.800;-7.900;10.3;9.4];
ys = [0;0;21;-21;14.5;13.8;-12.9;13.9;18.3;-18.8;-17.9;18];
xs = xs.*1e-3;
ys = ys.*1e-3;
%-------------------------------------------------------------------------%
%--------------all x-and y-coordinates value of the sensors---------------%
xdata = xs;
xdata(:,2) = ys;
xdata(:,3) =V;
%---create the initial guess of x-and y-coordinates value of the cables---%
%--------create the initial guess of current value of the cables----------%
%-------------the field x consists of this 3 parameters-------------------%
x0 = [-6.3;-6.3;-6.3].*1e-3;
x0(:,2) = [-6.3;-6.3;-6.3].*1e-3;
x0(:,3) = [0;0;0];
x0
%---------create the Lower(lb) and Upper(ub) bounds of fields x----------%
A = [];
b= [];
Aeq=[];
beq=[];
lb = [-21*1e-4,-21*1e-4,-5];
ub = [21*1e-4,21*1e-4,5];
options=optimset('MaxFunEvals',Inf);
%---------solve the NNLS function to find out the fields of x-------------%
[x] = fmincon(@(x)Fmin_fun(x),x0,A,b,Aeq,beq,lb,ub,@(x)unitdisk(x),options)
function fmin_fun = Fmin_fun(x)
% x - parameter: positions of the conductors & the current in the conductors
% xdata - array of positions of the sensors
% NNLS - the calculated voltage at each position of each sensor
global My Rho phi Theta xdata
% Create the number of x m and the xdata n
for n=1:1:12
for m=1:1:3
% calculate the distance between the sensor and conductor
dis_array =sqrt((xdata(n,1)).^2+(xdata(n,2)).^2);
% calculate cos angular distance between conductor and sensor
cos_delta_a = (xdata(n,1).*cos(Theta)-xdata(n,2).*sin(Theta)).*((xdata(n,1)-x(m,1))+(xdata(n,2).*cos(Theta)+xdata(n,1).*sin(Theta))).*(xdata(n,2)-x(m,2));
cos_delta_b = (xdata(n,1)-x(m,1)).^2+(xdata(n,2)-x(m,2)).^2;
a = My*Rho*exp(1i*phi*pi/180)*x(m,3);
% calculate the Output-voltage
b(m,n) = (a.*(cos_delta_a)./(2*pi*(dis_array).*cos_delta_b));
end
if n == 12
xdata(:,3) = (xdata(:,3)');
fmin_fun(:,:) = sum((xdata(:,3)-sum(b)).^2);
end
end
end
function [c,ceq] = unitdisk(x)
c = x(:,1).^2+x(:,2).^2-RI^2;
ceq = [];
end
error:Error using fmincon (line 625)
Supplied objective function must return a scalar value.
2 commentaires
Stephen23
le 6 Nov 2019
Modifié(e) : Stephen23
le 6 Nov 2019
Hey guys, i have no idea what is wrong. Who can helps me pls?
clear all; close all; clc
%%%%%%%%%%%%%%%%%%%%%%Define simulation parameters%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% My = magnetic permeability[H/m]
% Rho = Gain factor
% phi = phase delay [°]
% Theta Sensing directional angle
% r,Theta = Position and angular distance between conductors and sensors
% xs,ys = Coordinate of the sensors
% xi,yi = Coordinate of conductor to be measured
% I = Current of the Cables [A]
% RI = Cable Radius in m
global My Rho phi Theta RI B V Vm xs ys xdata
My = 4*pi*10^(-7);
Rho = 6.824*10000;
phi = 13.61;
Theta = 0.01;
RI = 21*(1e-3); % in[m]
%------------Calculation of voltage by magnetic flux B in [T]-------------%
%-------------------------------------------------------------------------%
% Define the magetic fields in [T] of sensors
B = [0.17, 0.47, 35.30, 35.32, 6.66, 6.59, 36.28, 35.43, 13.36, 15.04, 42.17, 44.05];
B = B*1e-6;
B
% calculate the output voltage of sensors in [V]
V = (Rho*exp(1i*phi*pi/180))*B;
V
% % %---------------Define the measured voltage of sensors----------------%
Vm = [0.0152, 0.03, 2.942, 2.943, 0.5751, 0.6, 3.0238, 2.9529, 1.1235, 1.2535, 3.714, 3.6713];
% Define the positions of each sensor in [m]
xs = [21;-21;0;0;-14.5;-15;16;15.3;-8.800;-7.900;10.3;9.4];
ys = [0;0;21;-21;14.5;13.8;-12.9;13.9;18.3;-18.8;-17.9;18];
xs = xs.*1e-3;
ys = ys.*1e-3;
%-------------------------------------------------------------------------%
%--------------all x-and y-coordinates value of the sensors---------------%
xdata = xs;
xdata(:,2) = ys;
xdata(:,3) =V;
%---create the initial guess of x-and y-coordinates value of the cables---%
%--------create the initial guess of current value of the cables----------%
%-------------the field x consists of this 3 parameters-------------------%
x0 = [-6.3;-6.3;-6.3].*1e-3;
x0(:,2) = [-6.3;-6.3;-6.3].*1e-3;
x0(:,3) = [0;0;0];
x0
%---------create the Lower(lb) and Upper(ub) bounds of fields x----------%
A = [];
b= [];
Aeq=[];
beq=[];
lb = [-21*1e-4,-21*1e-4,-5];
ub = [21*1e-4,21*1e-4,5];
options=optimset('MaxFunEvals',Inf);
%---------solve the NNLS function to find out the fields of x-------------%
[x] = fmincon(@(x)Fmin_fun(x),x0,A,b,Aeq,beq,lb,ub,@(x)unitdisk(x),options)
function fmin_fun = Fmin_fun(x)
% x - parameter: positions of the conductors & the current in the conductors
% xdata - array of positions of the sensors
% NNLS - the calculated voltage at each position of each sensor
global My Rho phi Theta xdata
% Create the number of x m and the xdata n
for n=1:1:12
for m=1:1:3
% calculate the distance between the sensor and conductor
dis_array =sqrt((xdata(n,1)).^2+(xdata(n,2)).^2);
% calculate cos angular distance between conductor and sensor
cos_delta_a = (xdata(n,1).*cos(Theta)-xdata(n,2).*sin(Theta)).*((xdata(n,1)-x(m,1))+(xdata(n,2).*cos(Theta)+xdata(n,1).*sin(Theta))).*(xdata(n,2)-x(m,2));
cos_delta_b = (xdata(n,1)-x(m,1)).^2+(xdata(n,2)-x(m,2)).^2;
a = My*Rho*exp(1i*phi*pi/180)*x(m,3);
% calculate the Output-voltage
b(m,n) = (a.*(cos_delta_a)./(2*pi*(dis_array).*cos_delta_b));
end
if n == 12
xdata(:,3) = (xdata(:,3)');
fmin_fun(:,:) = sum((xdata(:,3)-sum(b)).^2);
end
end
end
function [c,ceq] = unitdisk(x)
c = x(:,1).^2+x(:,2).^2-RI^2;
ceq = [];
end
error:Error using fmincon (line 625)
Supplied objective function must return a scalar value.
Réponses (1)
Matt J
le 28 Oct 2019
As the error message says, your objective function must return a scalar value and does not. It returns a length 12 vector. The value returned is also complex-valued, which is another problem you will want to address.
K>> Fmin_fun(x0)
ans =
Columns 1 through 5
38.4142 +19.7592i 38.4142 +19.7592i 38.4142 +19.7592i 38.4142 +19.7592i 38.4142 +19.7592i
Columns 6 through 10
38.4142 +19.7592i 38.4142 +19.7592i 38.4142 +19.7592i 38.4142 +19.7592i 38.4142 +19.7592i
Columns 11 through 12
38.4142 +19.7592i 38.4142 +19.7592i
4 commentaires
Voir également
Catégories
En savoir plus sur Systems of Nonlinear Equations dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!