Filter löschen
Filter löschen

minimzing the expression to find the variables

2 Ansichten (letzte 30 Tage)
Akhil
Akhil am 14 Jan. 2024
Kommentiert: Akhil am 15 Jan. 2024
i want to perform minimzation to get the values of variable,
i have the following given data:
a=[3.85094026548672, 18.1807706489675, 22.0685840707964, 22.036320058997, 22.0040560471976, 21.9833148967551, 21.9441371681415, 24.511430678466, 24.4791666666666, 24.45151179941, 24.4330752212389, 24.410029498525, 30.9112278761062, 36.1149520648967, 41.3163716814159, 45.2203171091445]
b=b=[957.522123893805, 962.831858407079, 948.672566371681, 923.893805309734, 899.115044247787, 883.185840707964, 853.097345132743, 824.778761061946, 799.999999999999, 778.761061946902, 764.601769911504, 746.902654867256, 739.823008849557, 736.283185840707, 730.973451327433, 729.203539823008]
lb_x=[3.8509,30.9112,63.4418,3.5698,3.2909,17.6254,0.2120,27.5857,65.7679,32.7733, 157.6696,67.318860619469, 64.4704092920354, 85.1124631268436, 128.037426253687, 152.502765486725]
similarly i have values for ub_x, lb_y, ub_y, lb_w, ub_w, reg1, reg2
for i = 1:numel(a)
r1 = reg1(i);
r2 = reg2(i);
expr = expr + w(r2) * (sqrt((x(r1)-a(i))^2 + (y(r1)-b(i))^2)) - w(r1) * (sqrt((x(r2)-a(i))^2 + (y(r2)-b(i))^2));
end
i want to minimize expr = expr + w(r2) * (sqrt((x(r1)-a(i))^2 + (y(r1)-b(i))^2)) - w(r1) * (sqrt((x(r2)-a(i))^2 + (y(r2)-b(i))^2)), in order to get the different values of x,y and w
for k=1:26
x.LowerBound(k)=lb_x(k);
x.UpperBound(k)=ub_x(k);
y.LowerBound(k)=lb_y(k);
y.UpperBound(k)=ub_y(k);
w.LowerBound(k)=lb_w(k);
w.UpperBound(k)=ub_w(k);
end
showbounds(x)
showbounds(y)
showbounds(w)
Kindly suggest a way to perform this minimzation
  2 Kommentare
Torsten
Torsten am 14 Jan. 2024
Bearbeitet: Torsten am 14 Jan. 2024
I don't understand the arrays reg1 and reg2. They must be index arrays of integers between 1 and 16 because you access components of x and y by using them. So is the order of the elements from 1 to 16 also to be optimized independently in these two vectors ?
Akhil
Akhil am 15 Jan. 2024
Yes, reg1 and reg2 are index arrays of integers between 1 and 16. no need of optimization of order

Melden Sie sich an, um zu kommentieren.

Akzeptierte Antwort

Hassaan
Hassaan am 14 Jan. 2024
% Your given data
a = [...]; % Define your array
b = [...]; % Define your array
reg1 = [...]; % Define your array
reg2 = [...]; % Define your array
lb_x = [...]; % Lower bounds for x
ub_x = [...]; % Upper bounds for x
lb_y = [...]; % Lower bounds for y
ub_y = [...]; % Upper bounds for y
lb_w = [...]; % Lower bounds for w
ub_w = [...]; % Upper bounds for w
% Initial guesses
initial_x = zeros(1, 26);
initial_y = zeros(1, 26);
initial_w = zeros(1, 26);
% Concatenating initial guesses, lower bounds, and upper bounds
initialVars = [initial_x, initial_y, initial_w];
lb = [lb_x, lb_y, lb_w];
ub = [ub_x, ub_y, ub_w];
% Optimization options
options = optimoptions('fmincon', 'Display', 'iter', 'Algorithm', 'sqp');
% Define the objective function directly in the script
objFun = @(vars) objective(vars, a, b, reg1, reg2);
% Run optimization
[optimalVars, fval] = fmincon(objFun, initialVars, [], [], [], [], lb, ub, [], options);
% Extract optimal x, y, and w
optimal_x = optimalVars(1:26);
optimal_y = optimalVars(27:52);
optimal_w = optimalVars(53:end);
% Display results
disp('Optimal x:');
disp(optimal_x);
disp('Optimal y:');
disp(optimal_y);
disp('Optimal w:');
disp(optimal_w);
disp('Objective function value:');
disp(fval);
% Objective function
function f = objective(vars, a, b, reg1, reg2)
x = vars(1:26);
y = vars(27:52);
w = vars(53:end);
f = 0;
for i = 1:numel(a)
r1 = reg1(i);
r2 = reg2(i);
f = f + w(r2) * sqrt((x(r1)-a(i))^2 + (y(r1)-b(i))^2) - w(r1) * sqrt((x(r2)-a(i))^2 + (y(r2)-b(i))^2);
end
end
Need to replace the [...] parts with your actual data.
------------------------------------------------------------------------------------------------------------------------------------------------
If you find the solution helpful and it resolves your issue, it would be greatly appreciated if you could accept the answer. Also, leaving an upvote and a comment are also wonderful ways to provide feedback.
Professional Interests
  • Technical Services and Consulting
  • Embedded Systems | Firmware Developement | Simulations
  • Electrical and Electronics Engineering
Feel free to contact me.

Weitere Antworten (0)

Community Treasure Hunt

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

Start Hunting!

Translated by